Springboot + MySQL+ JPA Ⅳ find自带方法详解

find是CRUD中的R,是使用得最多的方法,此篇先整理下自带的find方法(不需要在dao层写对应接口),后续会整理下拓展方法

一、getById(通过id进行单个查询(跟findById差不多,返回值类型不一样))

service层 

@Transactional
public User getById(Integer id){
    return userDao.getById(id);
}

control层

@GetMapping("/getById")
public User getById(Integer id){
    return userService.getById(id);
}

 对id为27的数据进行查询,测试成功!

 

后台执行了一行sql

 二、findAll(对所有数据进行查询)

service层

@Transactional
public List<User> findAll(){
    return userDao.findAll();
}

control层

/**
* 查询所有的数据
* @return 所有用户的列表
*/
@GetMapping("/findAll")
public List<User> findAll(){
    return userService.findAll();
}

对所有数据进行查询,测试成功! 

 后台进行了一行sql

 三、findAllSort(查询所有数据并进行对应参数排序)

service层

@Transactional
public List<User> findAllSort(Sort ascOrDesc){
    return userDao.findAll(ascOrDesc);
}

control层

/**
 * 查询所有数据并进行排序
 * @param sort 正序或者反序
 * @param para  需要排序的参数
 * @return
 */
@GetMapping("/findAllSort")
public List<User> findAllSort(String sort,String para){
	Sort ascOrDesc;
	if(sort.toLowerCase().equals("asc")){
		//ascOrDesc = Sort.by(Sort.Direction.ASC,para);
		ascOrDesc = JpaSort.unsafe(Sort.Direction.ASC,para);
	} else {
		ascOrDesc = Sort.by(Sort.Direction.DESC,para);
	}
	return userService.findAllSort(ascOrDesc);
}

 按照age进行正序排序,测试正常!

 后台进行了一行sql 

四、findAll(Example<S> example) (使用条件查询所有)(这个有点复杂还需要研究一下)

 service层

@Transactional
public <S extends User> List<S> findByIdExample(Example<S> example){
	return userDao.findAll(example);
}

control层

/**
 * 对数据进行模糊查询
 * @param name 需要查询的name
 * @return
 */
@GetMapping("/findByIdExample")
public List<User> findByIdExample(String name){
	User user = new User();
	user.setName(name);
	ExampleMatcher exampleMatcher = ExampleMatcher.matching()
			.withMatcher("name", ExampleMatcher.GenericPropertyMatchers.contains())
			.withMatcher("age", ExampleMatcher.GenericPropertyMatchers.exact())
			.withIgnoreCase(true);
	Example<User> example = Example.of(user,exampleMatcher);
	return userService.findByIdExample(example);
}

查询所有name为刘佳丽的数据,测试成功!

 

后台进行了一行sql

五、findAll(Pageable pageable) (用分页的方式获取所有数据)

service层

@Transactional
public Page<User> findAllPage(Pageable pageable){
	return userDao.findAll(pageable);
}

control层

/**
 * 对数据进行分页查询
 * @param page 页数 从0开始
 * @param size 页面大小(每页数据多少)
 * @param sort 排序
 * @param name 排序对象
 * @return
 */
@GetMapping("/findAllPage")
public Page<User> findAllPage(Integer page,Integer size,String sort,String name){
	Pageable pageable = PageRequest.of(page, size,
                      sort == "desc"? Sort.Direction.DESC : Sort.Direction.ASC, name);
	return userService.findAllPage(pageable);
}

pagerequest源码里面of后面有三种传参方式,page和size是必填的,后面的排序和排序参数选填

 网页测试成功!

出参如图: 

 

后台执行了两条jpql

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若博豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值