引入依赖
1 | <dependency> |
配置
1 | spring: |
创建一个实体类
1 | //表示一个实体类 |
创建一个Dao接口(操作实体类类型,实体类中主键属性的类型)
1 | public interface UserDao extends JpaRepository<User,Long> { |
直接使用这个接口就有很多的常用方法了。(实际上是会生成一个jdk动态代理对象SimpleJpaRepositry)
基本的单表操作(CRUD)
1 |
|
其中的save方法,用来更新和新增数据,根据是由存在id来判断是新增还是修改,有id的就是修改,没有的就是新增。
自定义查询
Spring Data JPA 可以根据接口方法名来实现数据库操作,主要的语法是 findXXBy、readAXXBy、queryXXBy、countXXBy、getXXBy 后面跟属性名称,利用这个功能仅需要在定义的 Repository 中添加对应的方法名即可,使用时 Spring Boot 会自动帮我们实现.
1 | List<User> findByAge(int age); |
1 | ("user5") |
分页查询(page是从0开始的)
1 | Page<User> findByAge(int age,Pageable pageable); |
1 | ("user3") |
只要加一个PageRequest参数,就可以进行分页查询。
排序
只有排序,没有分页
1 | List<User> findByAge(int age, Sort sort); |
1 | ("user3") |
既有排序,又有分页,sort参数要加在PageRequest中
1 | Page<User> findByAge(int age, Pageable pageable); |
1 | ("user3") |
多条件查询
1 | public interface UserDao extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {} |
首先在dao接口上实现一个JpaSpecificationExecutor接口
1 | //使用equal:直接得到path对象(要比较的属性),然后进行比较即可 |
使用findAll方法,自定义Specification对象,拼接查询条件。
还可以加上分页和排序,方法与之前相同。
自定义sql和jqpl(使用@Query)
sql:面向表的
1 | select * from tb_user |
jqpl:面向对象的
1 | select user.id,user.name from User u |
使用@Query注解,就可以自定义sql(加上nativaQuery=true)或者jqpl语句进行查询
1 | //使用sql语句 |
使用@Query进行更新或删除
1 | (value = "update User u set u.name=:#{#user.name},u.age=:#{#user.age},u.dep_id=:#{#user.dep_id} where u.id = :id") |
1 | ("user/{id}") |
如果要进行更新/删除操作时,需要加个@Transactional注解,同时需要加上@modifying注解,默认开启的事务是可读的,开启之后就会关闭可读。