zoukankan      html  css  js  c++  java
  • Spring Boot 入门系列(二十七)使用Spring Data JPA 自定义查询如此简单,完全不需要写SQL!

    前面讲了Spring Boot 整合Spring Boot JPA,实现JPA 的增、删、改、查的功能。JPA使用非常简单,只需继承JpaRepository ,无需任何数据访问层和sql语句即可实现完整的数据操作方法。JPA除了这些功能和优势之外,还有非常强大的查询的功能。以前复查的查询都需要拼接很多查询条件,JPA 有非常方便和优雅的方式来解决。接下来就聊一聊JPA 自定义查询,体验Spring Data JPA 的强大。

    Spring Data JPA 查询分为两种,一种是 Spring Data JPA 默认实现的预定义的方法,另一种是需要根据查询的情况定义查询条件。  

    一、预定义查询

    预定义方法就是我们上面看到的那些自带的方法,因为UserRepository继承了 JpaRepository 拥有了父类的这些JPA自带的方法。如下图所示:

    调用预定义方法:

    @RequestMapping("/test")
    public void test() {
        Users user = new Users();
        user.setId((long) 1);
    
        userRespository.findById((long) 1);
        userRespository.findAll();
        userRespository.delete(user);
        userRespository.deleteById((long) 1);
        userRespository.existsById((long) 1);
    }

    上面所有JpaRepository父类拥有的方法都可以直接调用 。

    二、自定义查询

    Spring Data JPA 支持根据实体的某个属性实现数据库操作,主要的语法是 findByXX、 readAByXX、queryByXX、 countByXX、 getByXX 后跟属性名称,利用这个功能仅需要在定义的 Repository 中添加对应的方法名即可,无需具体实现完整的方法,使用时 Spring Boot 会自动动帮我们实现对应的sql语句。

    1、属性查询

    根据姓名查询,示例如下:

    @Repository
    public interface UserRespository extends JpaRepository<Users, Long> {
        Users findByName(String name,String account);
    }

    上面的实例可以看到,我们可以在UserRepository 接口中进行接口声明。例如,如果想根据实体的 name和account 这两个属性来进行查询User的信息。那么直接在 UserRepository 中增加一个接口声明即可。

    2、组合条件查询

    JPA不仅支持单个属性查询,还能支持多个属性,根据And、or 等关键字组合查询:

      Users findByNameAndAccount(String name,String account);

    上面的例子,就是根据姓名和账号两个条件组合查询。这个是组合查询的例子,删除和统计也是类似的:deleteByXXXAndXXX、countByXXXAndXXX。可以根据查询的条件不断地添加和拼接, Spring Boot 都可以正确解析和执行。

    3、JPA关键字

    JPA的自定义查询除了And、or 关键字外,基本上SQL语法中的关键字,JPA都支持,比如:like,between 等。

    这个语句结构可以用下面的表来说明:

    三、自定义SQL语句

    上面介绍了JPA的很多条件查询的方法。但是,实际项目中,还是有些场景上面的查询条件无法满足。那么我们就可以通过 @Query 注解写hql 来实现。

    @Query("select u from Users u where u.name = :name1")
    List<UserDO> findByHql(@Param("name1") String name1);

    说明:

      1、@Query 注解,表示用执行hql语句。

      2、name1等参数对应定义的参数。

    上面是通过hql,如果hql 写着不习惯,也可以用本地 SQL 语句来完成查询:

    @Query(value = "select * from users where name = ?1",nativeQuery = true)
    List<User> findUserBySql(String name);

    上面示例中的 ?1 表示方法参数中的顺序,nativeQuery = true 表示执行原生sql语句。

    最后

    以上就把Spring Data JPA的查询功能介绍完了, JPA 简化了我们对数据库的操作,预定义很多常用的数据库方法,直接使用即可。另外 JPA 还有一个特点,就是不用关心数据库的表结构,需要更改的时候只需要修改对应 Model 的属性即可。


    作者:章为忠
    如有问题,可以微信:18618243664 联系我,非常感谢。

    关注我的微信公众号,获取相关的 源代码及视频资料

  • 相关阅读:
    sitemap.xml
    Java--调试--单步调试,断言,单元测试
    同时显示多个 Notification
    HttpURLConnection请求数据流的写入(write)和读取(read)
    Spring jdbc 对象Mapper的简单封装
    mongodb之java CRUD 简单操作
    第三章 AOP 基于@AspectJ的AOP
    从源码角度深入分析log4j配置文件使用
    log4j.properties文件配置--官方文档
    JS问题Uncaught ReferenceError:XXXX is not defined
  • 原文地址:https://www.cnblogs.com/zhangweizhong/p/13374143.html
Copyright © 2011-2022 走看看