当前位置:   article > 正文

springboot中JPA的各种排序方式+分页+关键字查询_jpa控制表的顺序

jpa控制表的顺序

1、非原生语句排序,在Dao接口Repositorie中编写非原生SQL语句

/**
 * 用户管理的Dao接口
 */
public interface UserRepositories extends JpaRepository<User, Integer>,JpaSpecificationExecutor<User>{

	/**
	 * 查询全部,倒序
	 * @return
	 */
	@Query(value = "select u from User u order by u.user_id desc")
	List<User> findAllUser();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2、SQL语句排序,在Dao接口Repositorie中编写原生SQL语句

/**
 * 用户管理的Dao接口
 */
public interface UserRepositories extends JpaRepository<User, Integer>,JpaSpecificationExecutor<User>{

	/**
	 * 查询全部,顺序
	 * @return
	 */
	@Query(value = "select * from user order by user_id asc",nativeQuery = true)
	List<User> findAllUser();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3、使用JPA接口进行分页排序PageRequest(如果需要排序的字段有_下划线,使用第4种方案)

controller层

	/**
	 * 查询全部,分页+多字段查询+倒序
	 */
	@RequestMapping(value = "/findAll", produces = "application/json;charset=UTF-8")
	public Result findAll(Integer pageNumber,String condition){
		//默认第一页
		if (pageNumber == null || pageNumber == 0) pageNumber = 1;
		
        Page<User> users = userService.getAll(condition,pageNumber,10, Sort.Direction.DESC,"id");
		
		Map<String, Object> map = new HashMap<>();
		map.put("totalCount", users.getTotalElements());//总数量
		map.put("users", users.getContent());	//数据
		
		return new Result(0, "success", map);
	}
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

service层

	/**
	 * 查询全部用户数据,分页+关键字查询+排序
	 * @param condition 关键字
	 * @param pageNo	 当前页码
	 * @param pageSize	每页条数
	 * @param dir	排列顺序
	 * @param str	排列字段
	 * @return
	 */
	public Page<User> getAll(String condition,int pageNo, int pageSize, Sort.Direction dir, String str) {
		PageRequest request = buildPageRequest(pageNo, pageSize, dir, str);
		//分页查询
		return  userRepositories.findAll((root, criteriaQuery, criteriaBuilder) -> {
			List<Predicate> predicates = new ArrayList<Predicate>();
			// 关键字查询  --模糊查询
			if (condition != null && !"".equals(condition)) { 
				Expression<String> concat1 = criteriaBuilder.concat(root.get("name"),root.get("phone"));
				Expression<String> concat2 = criteriaBuilder.concat(root.get("user_name"),root.get("station"));
				predicates.add(criteriaBuilder.like(criteriaBuilder.concat(concat1,concat2), "%"+condition+"%"));
//				predicates.add(criteriaBuilder.like(criteriaBuilder.concat(root.get("name"),root.get("phone")), "%"+condition+"%"));

			}

			return criteriaQuery.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
		},request);
	}

	/**
	 * 构建PageRequest对象
	 * @param num	当前页码
	 * @param size	每页条数
	 * @param asc	排列顺序
	 * @param string	排列字段
	 * @return PageRequest 分页对象
	 */
	private PageRequest buildPageRequest(int num, int size, Sort.Direction asc,
			String string) {
		return new PageRequest(num-1, size,asc,string);
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

dao层,注意继承JpaSpecificationExecutor接口

/**
 * 用户管理的Dao接口
 */
public interface UserRepositories extends JpaRepository<User, Integer>,JpaSpecificationExecutor<User>{

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4、使用JPA接口进行分页PageRequest,使用criteriaQuery.orderBy方法进行排序(可解决PageRequest中无法使用_下划线问题)

controller层

	/**
	 * 查询全部,分页+多字段查询+倒序
	 */
	@RequestMapping(value = "/findAll", produces = "application/json;charset=UTF-8")
	public Result findAll(Integer pageNumber,String condition){
		//默认第一页
		if (pageNumber == null || pageNumber == 0) pageNumber = 1;
		
        Page<User> users = userService.getAll(condition,pageNumber,10);
		
		Map<String, Object> map = new HashMap<>();
		map.put("totalCount", users.getTotalElements());//总数量
		map.put("users", users.getContent());	//数据
		
		return new Result(0, "success", map);
	}
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

service层

	/**
	 * 查询全部用户数据,分页+关键字查询+排序
	 * @param condition 关键字
	 * @param pageNo	 当前页码
	 * @param pageSize	每页条数
	 * @param dir	排列顺序
	 * @param str	排列字段
	 * @return
	 */
	public Page<User> getAll(String condition,int pageNo, int pageSize) {
		PageRequest request = buildPageRequest(pageNo, pageSize);
		//分页查询
		return  userRepositories.findAll((root, criteriaQuery, criteriaBuilder) -> {
			List<Predicate> predicates = new ArrayList<Predicate>();
			// 关键字查询  --模糊查询
			if (condition != null && !"".equals(condition)) { 
				Expression<String> concat1 = criteriaBuilder.concat(root.get("name"),root.get("phone"));
				Expression<String> concat2 = criteriaBuilder.concat(root.get("user_name"),root.get("station"));
				predicates.add(criteriaBuilder.like(criteriaBuilder.concat(concat1,concat2), "%"+condition+"%"));
//				predicates.add(criteriaBuilder.like(criteriaBuilder.concat(root.get("name"),root.get("phone")), "%"+condition+"%"));

			}
			//排序
			criteriaQuery.orderBy(criteriaBuilder.desc(root.get("user_id")));

			return criteriaQuery.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
		},request);
	}

	/**
	 * 构建PageRequest对象
	 * @param num	当前页码
	 * @param size	每页条数
	 * @param asc	排列顺序
	 * @param string	排列字段
	 * @return PageRequest 分页对象
	 */
	private PageRequest buildPageRequest(int num, int size) {
		return new PageRequest(num-1, size);
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

dao层,注意继承JpaSpecificationExecutor接口

/**
 * 用户管理的Dao接口
 */
public interface UserRepositories extends JpaRepository<User, Integer>,JpaSpecificationExecutor<User>{

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/355610
推荐阅读
相关标签
  

闽ICP备14008679号