我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot使用JPA实现查询部分字段

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot使用JPA实现查询部分字段

SpringBoot JPA查询部分字段

用过JPA的都知道,只需要继承JpaRepository 根据Jpa的函数命名规范写出接口中的函数,不需要实现,底层就可以自动解析成各种数据库的sql语句,进行增删改查等操作。

自定义简单的查询方法

如findByUserName,findByUserNameOrEmail(String username, String email)等条件的属性名称与个数要与参数的位置与个数一一对应,JpaRepository能够解析方法名自动生成sql语句

主要的语法是findXXBy,readAXXBy,queryXXBy,countXXBy, getXXBy后面跟属性名称即可

关键词 举例 对应的sql语句
And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2
Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2
Is,Equals findByFirstnameIs,findByFirstnameEquals … where x.firstname = ?1
Between findByStartDateBetween … where x.startDate between ?1 and ?2
LessThan findByAgeLessThan … where x.age < ?1
LessThanEqual findByAgeLessThanEqual … where x.age ⇐ ?1
GreaterThan findByAgeGreaterThan … where x.age > ?1
GreaterThanEqual findByAgeGreaterThanEqual … where x.age >= ?1
After findByStartDateAfter … where x.startDate > ?1
Before findByStartDateBefore … where x.startDate < ?1
IsNull findByAgeIsNull … where x.age is null
IsNotNull,NotNull findByAge(Is)NotNull … where x.age not null
Like findByFirstnameLike … where x.firstname like ?1
NotLike findByFirstnameNotLike … where x.firstname not like ?1
StartingWith findByFirstnameStartingWith … where x.firstname like ?1 (parameter bound with appended %)
EndingWith findByFirstnameEndingWith … where x.firstname like ?1 (parameter bound with prepended %)
Containing findByFirstnameContaining … where x.firstname like ?1 (parameter bound wrapped in %)
OrderBy findByAgeOrderByLastnameDesc … where x.age = ?1 order by x.lastname desc
Not findByLastnameNot … where x.lastname <> ?1
In findByAgeIn(Collection ages) … where x.age in ?1
NotIn findByAgeNotIn(Collection age) … where x.age not in ?1
TRUE findByActiveTrue() … where x.active = true
FALSE findByActiveFalse() … where x.active = false
IgnoreCase findByFirstnameIgnoreCase … where UPPER(x.firstame) = UPPER(?1)

这种方式很简单,但也有很多缺陷,不够灵活,不用担心,Spring data jpa还支持自定义查询语句。

  • 使用 @Query注解,添加JPQL语句,JPQL是一种面向对象的表达式语言,通过类名和属性访问,而不是数据库中的表名和属性,避免了不同数据库语法的不同。
  • 在@Query中添加nativeQuery = true表示使用原生的sql语句,这时候就有要使用数据库表名和字段名了。
  • 当涉及到删除和修改在需要加上@Modifying.也可以根据需要添加 @Transactional对事物的支持,查询超时的设置等。

使用JPA命名规范写的函数能够查询出整个对象,而不能只查询出一个或几个字段,因为有时候我们只需要一个bean中的几个字段就够了,不需要全部的。

例如用户表,根据id查姓名,就不需要把密码等重要信息查出来了,因为这些信息封装在一个对象中返回到前端是很危险的,即使没有显示,但也可以在浏览器上调试看到。

原生的sql当然可以做到,但是我们还想让查询出的结果封装成一个对象,以便后续的操作。

那么自定义的JPQL就可以实现这个功能了。

例如有一个用户表,如下:


@Entity
@Table(name = "yhb")
public class YHB {
    //用户编号
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer yhbh;
    //用户代码(名字拼音缩写)
    private String yhdm;
    //用户名称
    private String yhmc;
    //用户密码
    private String yhkl;
    //用户部门编号
    private String yhbm;
    //用户职务
    private String yhsf;
    //用户手机号
    private String phone;
//省略构造函数和get set

现在需要根据部门编号查询出这个部门所有人的用户编号和用户名称,那么我们可以新建一个Model,就只有用户编号和用户名称这两个字段:

YhbModel.java


public class YhbModel implements Serializable {
    private Integer yhbh;
    //用户名称
    private String yhmc;

在用户表的dao层可以这样写操作数据库的方法:


@Repository
public interface YhbDao extends JpaRepository<YHB,Integer>{
    //根据部门查找用户
    @Transactional
    @Query(value = "select new com.nju.software.assessment.model.YhbModel(y.yhbh,y.yhmc) from YHB y where yhbm=?1")
     List<YhbModel> findYhmcByYhbm(String yhbm);
}

@Query中的JPQL意思是根据用户部门编号yhbm查询用户的实体类YHB中的用户编号yhbh和用户名称yhmc,并把查询出的结果封装成一个YhbModel对象,List<YhbModel>中类型也是YhbModel类型的,之后的service层和controller层调用的时候返回类型也是List<YhbModel>。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot使用JPA实现查询部分字段

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot项目中使用JPA如何实现表关联查询

SpringBoot项目中使用JPA如何实现表关联查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。例子中总共有两个实体类,一个是Floor(商品楼层类),另一个是FloorC
2023-05-31

在Spring Boot中使用Spring-data-jpa实现分页查询

在我们平时的工作中,查询列表在我们的系统中基本随处可见,那么我们如何使用jpa进行多条件查询以及查询列表分页呢?下面我将介绍两种多条件查询方式。1、引入起步依赖 org.springfram
2023-05-31

SpringBoot使用JPA如何实现读写分离

今天就跟大家聊聊有关SpringBoot使用JPA如何实现读写分离,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JPA是什么JPA(Java Persistence API)是Sun
2023-05-31

使用Spring Data JPA如何实现多条件的分页查询

使用Spring Data JPA如何实现多条件的分页查询?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。话不多说,请看代码:public Map
2023-05-31

Jpa Specification怎么实现and和or同时使用查询

这篇文章主要为大家展示了“Jpa Specification怎么实现and和or同时使用查询”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Jpa Specification怎么实现and和or同
2023-06-25

怎么使用JPA+querydsl实现多条件动态查询

这篇文章将为大家详细讲解有关怎么使用JPA+querydsl实现多条件动态查询,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JPA querydsl多条件动态查询相信很多人在做订单管理的时候会用到多条件的
2023-06-29

使用Spring Data JPA如何实现自定义规则查询

使用Spring Data JPA如何实现自定义规则查询?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、常用规则速查1   And    并且2   Or     或3
2023-05-31

springdata jpa如何使用Example快速实现动态查询功能

这篇文章将为大家详细讲解有关springdata jpa如何使用Example快速实现动态查询功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Example官方介绍Query by Example (Q
2023-06-25

使用jquery实现分页查询数据

随着 Web 技术的不断发展,越来越多的网站需要支持分页查询数据功能。而 jQuery 是一种非常流行的 JavaScript 库,能够帮助开发人员更加方便地操作 DOM、事件、动画等方面,因此使用 jQuery 实现分页查询数据是一个不错的选择。本文将介绍使用 jQuery 实现分页查询数据的基本原理、步骤和代码实现方法,并提供一个简单的示例供读者参考。一、基本原理使用 jQ
2023-05-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录