SpringBoot JPA实践之@Query查询之接口结果集
JPAadmin 发布于:2020-05-01 22:07:26
阅读:loading
前面几篇文章中已经飞起来了多种场景的案例了,有个细节没有提到,@Query注解查询返回的结果集仍然必须是Entity类,但是通常情况更多的复杂查询将查询的是一个自定义对象(Dto):自定义Javabean,而JPA是支持查询返回自定义对象的,但它返回的对象类型必须是接口类型,其接口的具体实现被JPA代理实现(本站有类似的代理接口实现类的实现),匹配规则接口中的函数名称 = get + 数据库字段名即可,如果某个字段需要二次加工,则使用JDK8中接口的默认方法解决。
/**
* 查询返回接口类型
*
* @author chendd
* @date 2020/5/2 20:44
*/
public interface UserQueryInterfaceResultRepository extends BaseRepository<User, String> {
@Query(value = "select name , email , concat(concat(name , '_'),email) as remark " +
"from user where name = ?" , nativeQuery = true)
List<UserDto> queryUsersByName(String name);
}
/**
* 测试查询返回自定义接口类型
*
* @author chendd
* @date 2020/5/2 20:50
*/
public class UserQueryInterfaceResultTest extends ApplicationTest {
@Resource
private UserQueryInterfaceResultRepository repository;
@Test
public void testQueryInterfaceResult() {
List<UserDto> dataList = repository.queryUsersByName("chendd");
for (UserDto user : dataList) {
String remark = user.getRemark();
String defaultRemark = user.getDefaultRemark();
Assert.assertEquals(remark , defaultRemark);
}
}
}
该数据对象为interface类型,不是普通的class定义。
特别说明
(1)结果集interface无法定义geter/seter等方法,若存在需要二次处理的参数值,则需要配合使用jdk8的default函数的方式实现;
(2)该interface中的方法声明等于“get” + 查询字段的名称;
点赞
发表评论
当前回复:作者
评论列表
留言区
- SpringBoot JPA实践之框架搭建
- SpringBoot JPA实践之BaseRepository
- SpringBoot JPA实践之自动生成Entity
- SpringBoot JPA实践之API介绍
- SpringBoot JPA实践之方法属性名查询
- SpringBoot JPA实践之Example对象查询
- SpringBoot JPA实践之Named查询
- SpringBoot JPA实践之@Query查询之参数传参方式
- SpringBoot JPA实践之@Query查询之动态查询条件
- SpringBoot JPA实践之@Query查询之分页实现
- SpringBoot JPA实践之EntityManage查询返回自定义DTO
- SpringBoot JPA实践之EntityManage查询返回自定义DTO的代理实现
- SpringBoot JPA实践之Specification查询分页
- SpringBoot JPA实践之表达式自定义属性与方法
- SpringBoot JPA实践之小技巧汇总