添加依赖
添加jar包
<dependency> |
添加配置文件
server: |
创建 表
create table `t_user` ( |
创建dao
public interface UserDao extends JpaRepository<User, Integer> { |
继承JpaRepository,JpaRepository定义了一些增删改查的方法。
根据方法名来自动生成SQL,主要的语法是findXXBy,readAXXBy,queryXXBy,countXXBy, getXXBy后面跟属性名称:User findByUserName(String userName);
也使用一些加一些关键字And、 OrUser findByUserNameOrEmail(String username, String email);
修改、删除、统计也是类似语法
Long deleteById(Long id);
Long countByUserName(String userName)
基本上SQL体系中的关键词都可以使用,例如:LIKE、 IgnoreCase、 OrderBy。List<User> findByEmailLike(String email);
User findByUserNameIgnoreCase(String userName);
List<User> findByUserNameOrderByEmailDesc(String email);
创建controller
|
启动项目
访问 localhost:8080/save/lisi 查看数据库:
localhost:8080/save/1 查看页面:
此时,jpa搭建成功。
自定义SQL查询
Spring data 支持大部分的根据名称定义的查询,对于自定义查询,spring data 也是支持的,在方法的上面增加@Query
,修改删除,需要增加@Modifying
,也可以根据需要增加@Transactional
"select u from User u where u.real_name = ?1") ( |
分页查询
编写 带pageable参数的查询,一般放到最后一个参数
Page<User> findAll(Pageable pageable);
编写controller"/findAll") (
public Page<User> findAll(@RequestParam() int page, int size){
//排序方式 和字段 可以多個字段排序
Sort sort = new Sort(Sort.Direction.DESC, "id");
Pageable p = (Pageable) new PageRequest(page, size, sort);
Page<User> all = userDao.findAll(p);
return all;
}
多表查询
和hibernate的hql多表查询差别不大,有两种方式,一种是hibernate的级联查询,一种是将查询结果映射到一个结果类中。
首先需要定义一个结果集的接口类。
public interface HotelSummary { |
查询的方法返回类型设置为新创建的接口
"select h.city as city, h.name as name, avg(r.rating) as averageRating " ( |
"select h.name as name, avg(r.rating) as averageRating " ( |
使用
Page<HotelSummary> hotels = this.hotelRepository.findByCity(new PageRequest(0, 10, Direction.ASC, "name")); |
在运行中 spring会将产生一个代理类来接受结果,用getxxx的方式来获取。
源码地址:戳这里