zoukankan      html  css  js  c++  java
  • spring boot访问数据库

    1. Spring JAP 基本使用说明:

    Spring boot 访问数据库基本上都是通过Spring JPA封装的Bean作为API的,Spring JPA 将访问数据库通过封装,只要你的类实现了JPARepository这个接口,它里面对外公开了一部分接口,可以供你实现部分功能。如图:

    它里面提供了可以传Id进行单个查询,也可以提供类进行匹配查询等。

    由于JPARepository实现了,PagingAndSortingRepository,这个接口是用来实现分页用的,这个接口又实现了CrudRepository 这个增删改查的这个接口,在这个接口里面,有下面的对外接口:

    所以当你实现了JPARespository接口之后,就可以对基本的增删改查进行处理了。

    如上图调用所示。

    2. Spring JPA 特殊用法:

    当你看了上面的例子之后,你发现只是基本的一些操作,但是如果你想通过用户名查询怎么查询呢?

    所以JPA还提供了一种方法叫自定义方法:如

    这种方法JPA框架也会自动解析成根据传入的参数name 去User表中查找,具体框架的解析说法如下:

    架在进行方法名解析时,会先把方法名多余的前缀截取掉,比如 find、findBy、read、readBy、get、getBy,然后对剩下部分进行解析。并且如果方法的最后一个参数是 Sort 或者 Pageable 类型,也会提取相关的信息,以便按规则进行排序或者分页查询。

    在创建查询时,我们通过在方法名中使用属性名称来表达,比如 findByUserAddressZip ()。框架在解析该方法时,首先剔除 findBy,然后对剩下的属性进行解析,详细规则如下(此处假设该方法针对的域对象为 AccountInfo 类型):

    • 先判断 userAddressZip (根据 POJO 规范,首字母变为小写,下同)是否为 AccountInfo 的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,继续第二步;
    • 从右往左截取第一个大写字母开头的字符串(此处为 Zip),然后检查剩下的字符串是否为 AccountInfo 的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,则重复第二步,继续从右往左截取;最后假设 user 为 AccountInfo 的一个属性;
    • 接着处理剩下部分( AddressZip ),先判断 user 所对应的类型是否有 addressZip 属性,如果有,则表示该方法最终是根据 "AccountInfo.user.addressZip" 的取值进行查询;否则继续按照步骤 2 的规则从右往左截取,最终表示根据 "AccountInfo.user.address.zip" 的值进行查询。

    在查询时,通常需要同时根据多个属性进行查询,且查询的条件也格式各样(大于某个值、在某个范围等等),Spring Data JPA 为此提供了一些表达条件查询的关键字,大致如下:

    • And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd);
    • Or --- 等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr);
    • Between --- 等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min);
    • LessThan --- 等价于 SQL 中的 "<",比如 findBySalaryLessThan(int max);
    • GreaterThan --- 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min);
    • IsNull --- 等价于 SQL 中的 "is null",比如 findByUsernameIsNull();
    • IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull();
    • NotNull --- 与 IsNotNull 等价;
    • Like --- 等价于 SQL 中的 "like",比如 findByUsernameLike(String user);
    • NotLike --- 等价于 SQL 中的 "not like",比如 findByUsernameNotLike(String user);
    • OrderBy --- 等价于 SQL 中的 "order by",比如 findByUsernameOrderBySalaryAsc(String user);
    • Not --- 等价于 SQL 中的 "! =",比如 findByUsernameNot(String user);
    • In --- 等价于 SQL 中的 "in",比如 findByUsernameIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数;
    • NotIn --- 等价于 SQL 中的 "not in",比如 findByUsernameNotIn(Collection<String> userList) ,方法的参数可以是 Collection 类型,也可以是数组或者不定长参数。

    3. 使用@Query 注解

    @Query 注解类似于mybatis 中的写Sql 语句。

    同时也可以传入分页的参数,参数可以用?1,?2,?3 分别代表占位符。

    完了。

    
    
    
    
  • 相关阅读:
    Pyhon基础过滤字符串中的字母数字特殊符号
    [编程题] 斐波那契数列
    左旋转字符串(Java)-循环Index方式
    [编程题]字符流中第一个不重复的字符
    6525. 【2020.4.1模拟】Valleys
    6515. 【GDOI2020模拟03.28】数一数(one)
    6516. 【GDOI2020模拟03.28】数二数(two)
    6508. 【GDOI2020模拟03.11】我的朋友们
    6494. 【GDOI2020模拟03.08】勘探
    6491. 【GDOI2020模拟03.04】铺路
  • 原文地址:https://www.cnblogs.com/baoyi/p/SpringBootData_JPA.html
Copyright © 2011-2022 走看看