spring-data-jdbc&spring boot整合

spring-data-jdbc


一.简介


spring旗下产品,简化spring-data-jpa功能与配置,底层实现为spring-jdbc

优点:

  • 能够在spring boot开箱即用
  • 通过函数名即可默认实现查询语句
  • 内置分页查询默认实现
  • 避免了spring-jdbc在service层直接写sql语句的问题

例如

List<User> findByUserNameAndUserSex(String userName, Integer userSex);

通过添加该函数即可直接调用,达到批量查询的效果,等同于以下Sql语句:

select * from user where user_name = ? and user_sex = ?

二.配置


   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-jdbc</artifactId>            
   </dependency>
   <dependency>
       <groupId>org.projectlombok</groupId>
       <artifactId>lombok</artifactId>
       <optional>true</optional>
   </dependency>

spring-boot-starter-data-jdbc:spring-data-jdbc核心依赖

lombok:通过注解消除模板代码,需要IDE安装lombok插件

三.使用


1.PO类

@Data
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(value = {"id"})
@Table("user")
public class User implements Serializable {
 @Id
 Long Id;
 String userName;
 String userSex;
 String addressId;
}
@Data
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(value = {"id"})
@Table("address")
public class Address implements Serializable {
 @Id
 Long Id;
 String addressName;
}

@Data:lombok注解,提供get、set、toString等函数

@AllArgsConstructor:lombok注解,提供全参构造函数

@JsonInclude(JsonInclude.Include.NON_NULL):序列化时排除null属性

@JsonIgnoreProperties(value = {“id”}):序列化时排除主键属性 Id

@Table(“user”):映射DB的表名

@Id:主键,只能存在一个

2.Repository类

public interface UserRepository extends PagingAndSortingRepository<User, Long> {

}

3.SeviceImpl类中通过@Autowire注入

@Autowire 
UserRepository userRepository

userRepository由于继承了PagingAndSortingRepository,PagingAndSortingRepository继承了CrudRepository可以使用以下默认实现方法:

PagingAndSortingRepository源码:

public interface CrudRepository<T, ID> extends Repository<T, ID> {
   <S extends T> S save(S var1);

   <S extends T> Iterable<S> saveAll(Iterable<S> var1);

   Optional<T> findById(ID var1);

   boolean existsById(ID var1);

   Iterable<T> findAll();

   Iterable<T> findAllById(Iterable<ID> var1);

   long count();

   void deleteById(ID var1);

   void delete(T var1);

   void deleteAll(Iterable<? extends T> var1);

   void deleteAll();
}
methodPurpose
save按T的主键更新,如参数T的主键为空则插入
saveAll保存多个T
findById通过主键进行查找,返回T
existsById通过主键进行查找,判断是否存在
findAll查询全部记录
findAllById通过主键List进行查找,返回Iterable
count查询全部记录条目数
deleteById过主键进行删除
delete过T的主键进行删除
deleteAll通过主键List进行批量删除
deleteAll删除全部记录

CrudRepository源码:

public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
   Iterable<T> findAll(Sort var1);

   Page<T> findAll(Pageable var1);
}
methodPurpose
findAll通过传入Sort.by(“列名”),按指定列进行排序返回Iterable,具体参考Sort类
findAll通过传入PageRequest.of(0, 10, Sort.by(“列名”)),返回第1页10条分页数据

4.插入

①通过userRepository.save(T),T的主键保持为null进行插入

②通过在UserRepository接口中加入method,@Query中写入sql语句

   @Modifying
   @Query("insert into user(user_name) values(:userName)")
   int insert(@Param("userName") String userName);

使用UserRepository.insert(userName插入

5.更新

①通过userRepository.save(T)按主键更新

②通过在UserRepository接口中加入method,@Query中写入sql语句

   @Modifying
   @Query("update user set user_sex = '男' where user_name = :userName")
   int updateByUserName(@Param("userName") String userName);

使用UserRepository.updateByUserName(userName)更新

6.删除

①通过userRepository.delete(T)按主键删除

②通过在UserRepository接口中加入method,@Query中写入sql语句

   @Modifying
   @Query("delete from user where user_name = :userName")
   int deleteByUserName(@Param("userName") String userName);

使用UserRepository.deleteByUserName(userName)删除

7.查询

①通过@Query自定义查询,查询不需要@Modifying注解,示范略

②通过语法规则,不需要@Query手动写查询,语法见下图

在这里插入图片描述

8.联表查询

通过@Query自定义查询,返回的实体类需要包含查询的所有属性

需注意insert、update、delete必须要有@Modifying注解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值