返回顶部
首页 > 资讯 > 精选 >SpringData JPA的常用语法有哪些
  • 282
分享到

SpringData JPA的常用语法有哪些

2023-07-02 08:07:21 282人浏览 八月长安
摘要

今天小编给大家分享一下springData JPA的常用语法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前

今天小编给大家分享一下springData JPA的常用语法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    前言

    SpringData JPA常用有两种写法,一个是用Jpa自带方法进行CRUD,适合简单查询场景、例如查询全部数据、根据某个字段查询,根据某字段排序等等。另一种是使用注解方式,@Query@Modifying

    1.方法方式

    方法说明

    接口方法如下,方法作用见注释:

    public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {    // 无条件,查询全部记录    List<T> findAll();    // 排序查询    List<T> findAll(Sort var1);    // 根据主键ID查询    List<T> findAllById(Iterable<ID> var1);    // 批量保存集合数据    <S extends T> List<S> saveAll(Iterable<S> var1);    void flush();     <S extends T> S saveAndFlush(S var1);    // 批量删除    void deleteInBatch(Iterable<T> var1);    // all in 全部删除    void deleteAllInBatch();    // 查询一条记录    T getOne(ID var1);    // 条件查询    <S extends T> List<S> findAll(Example<S> var1);    // 条件查询,带排序    <S extends T> List<S> findAll(Example<S> var1, Sort var2);}

    例子

    一般dao实现JpaRepository接口,直接调用JpaRepository中的方法就可以实现了简单查询,例如查询User实例列表:

    // 构建user的Example对象Example<User> example =Example.of(User);List<User> users = userRepository.findAll(example);

    2.注解方式

    jpa实现CRUD的主要注解是@Query

    注解说明

    @Query注解主要有以下参数,参数作用如下:

    • valuesql语句

    • countQuery: 分页查询时统计总数

    • nativeQuery: 使用执行这个方法的时候执行原生sql语句,直接写数据库中的实际表名和表的实际字段名

    @Query的代码如下:

    @Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})@QueryAnnotation@Documentedpublic @interface Query {    String value() default "";    String countQuery() default "";    String countProjection() default "";    boolean nativeQuery() default false;    String name() default "";    String countName() default "";}

    例子

    • 使用注解方式分组查询

    跟正常写sql语句相同,将sql写到value中,并且nativeQuery = true。下面例子是根据task_id进行分组查询task集合

    @Query(value = "select task_id from task group by task_id", nativeQuery = true)List<Task> queryByGroup();
    • 使用注解方式排序

    根据task_id进行排序查询task集合

    @Query(value = "select task_id,task_date from task order by task_id", nativeQuery = true)List<Task> queryOrder();
    • 使用注解方式条件查询

    条件查询时可以使用字段名 操作符 ?;例如:task_date >= ?,使用位置匹配?。也可以使用字段名 操作符 :属性名;例如:task_date >= :startDate,使用属性名匹配,推荐使用后者,如果字段顺序修改,不影响匹配结果。下面是根据任务时间(task_date)段内和未被删除(deleted)的任务

    @Query(value = "select task_id,task_date from task where task_date >=? and task_date <=? and deleted=0 ", nativeQuery = true)List<ApptTask> queryDate(@Param("startDate") String startDate, @Param("endDate") String endDate);
    • 使用注解方式修改

    修改一条数据需要加上@Modifying用于标识是修改操作,默认事务等级是只读,所以还需要加上@Transactional,这样覆盖了默认的@Transactional才可以执行修改操作。下面是根据task_id更新task表的备注信息

    @Transactional(rollbackOn = Exception.class)@Modifying@Query(value = "update task set remark = ? where task_id=?", nativeQuery = true)void updateRemark(@Param("remark") String remark, @Param("taskId") String taskId);

    多表联查,且多条件、分页查询怎么写?

    复杂的查询需要注意,以下使用一个Mysql的多表联查的例子来说明复杂的查询要怎么写。下面是usertask表关联查询出任务名称、任务ID、用户名称这些信息,并且根据task_nametask_date进行过滤;根据task_date倒序。

    共有几点需要注意:

    • 多表联查使用正常的JOIN就可以

    • 多条件是常见的情况,需要区别传入的条件是否要去执行,这种情况需要使用where 1=1 and 这种方式来保证条件不传时仍然正常查询。

    • 分页查询需要传入分页参数Pageable,并且写countQuery来统计总数。

    • 多条件查询关键:if(:参数!='',k.字段名 =:参数,1=1),这里是使用了if进行判断,这个写法类似mybatis xml中的<if>标签。if的含义是代表传入的参数如果不为""(Spring类型空是""而不是null)将参数传入,如果为空时显示1=1 代表参数为真,对查询结果不产生作用。

    代码:

    @Query(value =      " select a.task_name, a.task_id,u.user_name" +      " from task a " +      " LEFT JOIN usert u" +      " ON a.user_id = u.user_id" +      " where  a.deleted=0  " +      " AND if(:taskName!='',a.task_name =:taskName,1=1)" +      " AND if(:startDate!='',a.task_date >=:startDate,1=1)" +      " AND if(:endDate!='',a.task_date <=:endDate,1=1)" +      " order by a.task_date desc"      ,       nativeQuery = true      ,       countQuery =      " select count(*)" +      " from task a " +      " LEFT JOIN usert u" +      " ON a.user_id = u.user_id" +      " where  a.deleted=0  " +      " AND if(:taskName!='',a.task_name =:taskName,1=1)" +      " AND if(:startDate!='',a.task_date >=:startDate,1=1)" +      " AND if(:endDate!='',a.task_date <=:endDate,1=1)" +      " order by a.task_date desc")Page<Map<String,Object>> queryUserTaskPage(@Param("taskName") String taskName, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate, @Param("pageable") Pageable pageable);

    以上就是“SpringData JPA的常用语法有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

    --结束END--

    本文标题: SpringData JPA的常用语法有哪些

    本文链接: https://lsjlt.com/news/340508.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • SpringData JPA的常用语法有哪些
      今天小编给大家分享一下SpringData JPA的常用语法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前...
      99+
      2023-07-02
    • SpringData JPA的常用语法汇总
      目录前言1.方法方式方法说明例子2.注解方式注解说明例子多表联查,且多条件、分页查询怎么写?小结总结前言 SpringData JPA常用有两种写法,一个是用Jpa自带方法进行CRU...
      99+
      2024-04-02
    • SpringData JPA中@OneToMany和@ManyToOne的用法详解
      目录一. 假设需求场景二. 代码实现2.1 级联存储操作2.2 查询操作和toSting问题2.3 级联删除2.4 pom.xml一. 假设需求场景 在我们开发的过程中,经常出现两个...
      99+
      2024-04-02
    • JPA Specification常用查询有哪些
      这篇文章主要讲解了“JPA Specification常用查询有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JPA Specification常用查询有哪些”吧!JPA Specifi...
      99+
      2023-06-25
    • JPA中findBy语法规则有哪些
      小编给大家分享一下JPA中findBy语法规则有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JPA中所有findBy语法规则1、findBy findAll...
      99+
      2023-06-25
    • 常用的elasticsearch语法有哪些
      常用的elasticsearch语法包括:1. 查询语法:- match:通过指定字段和关键词进行全文检索- term:通过指定字段...
      99+
      2023-10-12
      elasticsearch
    • HANA常用语法有哪些
      HANA常用语法有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。SQL--1.查看当前日期 SELECT CURRE...
      99+
      2024-04-02
    • BeautifulSoup常用语法有哪些
      本篇内容主要讲解“BeautifulSoup常用语法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“BeautifulSoup常用语法有哪些”吧!解析库Be...
      99+
      2024-04-02
    • HTML5常用语法有哪些
      这篇文章主要为大家展示了“HTML5常用语法有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML5常用语法有哪些”这篇文章吧。HTML头部标记标记描述H...
      99+
      2024-04-02
    • 常用到的ES6语法有哪些
      这篇文章主要介绍了常用到的ES6语法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是ES6?  ECMAScript 6(以下简称...
      99+
      2024-04-02
    • HTML5中常用语法有哪些
      这篇文章给大家分享的是有关HTML5中常用语法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。HTML 5 常用语法一览(列举不支持的属性)HTML头部标记标记描述HTML5...
      99+
      2024-04-02
    • 常用的CSS缩写语法有哪些
      这篇文章主要介绍“常用的CSS缩写语法有哪些”,在日常操作中,相信很多人在常用的CSS缩写语法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”常用的CSS缩写语法有哪些”...
      99+
      2024-04-02
    • CSS语法的常用技巧有哪些
      这篇文章主要为大家展示了“CSS语法的常用技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS语法的常用技巧有哪些”这篇文章吧。盒模型content-...
      99+
      2024-04-02
    • Vue.js中有哪些常用的模板语法
      本篇文章给大家分享的是有关Vue.js中有哪些常用的模板语法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、文本渲染Vue支持动态渲染文本,...
      99+
      2024-04-02
    • Java常用语有哪些
      这期内容当中小编将会给大家带来有关Java常用语有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。不介绍Java 常用语,对Java 的总体介绍就是不完整的。尽管促使Java 诞生的源动力是可移植性和安...
      99+
      2023-06-03
    • 常用的SQL语句有哪些
      本篇内容介绍了“常用的SQL语句有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ~~~~~~~数据库...
      99+
      2024-04-02
    • mysql常用的语句有哪些
      本篇内容介绍了“mysql常用的语句有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mysqld 常规...
      99+
      2024-04-02
    • ElasticSearch的常用术语有哪些
      今天就跟大家聊聊有关 ElasticSearch的常用术语有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。这篇文章主要介绍 ElasticSea...
      99+
      2024-04-02
    • vue.js语法及常用指令有哪些
      这篇文章主要为大家展示了“vue.js语法及常用指令有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue.js语法及常用指令有哪些”这篇文章吧。Vue.j...
      99+
      2024-04-02
    • 常用dos命令及语法有哪些
      这篇文章给大家分享的是有关常用dos命令及语法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。常用dos命令及语法cd 改变当前目录,dir 列出 文件 和 文件夹名,dir /ad /b  指列出...
      99+
      2023-06-08
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作