springboot jpa 实现返回结果自定义查询
jpa 返回结果自定义查询
这里自定义的实体是没有在数据映射的实体。可以返回聚合函数的值。(个人理解可以。。。。。。)
第一种方法
实体类。(这里本人使用的是idea)
repository类(这里不是 使用的继承jpa中的 的方式。而是使用的entitymanager)。代码中有详细的注释。
ok。就这样就可以了。个人测试似乎在oracle数据库 不行。可能是sql查询结果不太一样
第二种方法
可以在特定的场合使用。
自定义类
这里是repository中的写法
使用jpa两张表联查返回自定义实体
在java开发中,用jpa框架做连表查询时(需要返回两张表的各自部分字段),在返回对象的过程中感觉比较棘手,一直没有一个好的解决方案,网上也有各种版本的方法,下面的方法本人感觉最方便使用
1、创建一个springboot空白项目,引入pom依赖
先看项目结构,为了简化,没有引入service层,直接使用controller调用dao层
pom.xml配置
2、application.yml配置文件
3、数据库(有两张表user/address)
我们现在需要联查user和address表,address表中的user_id是和user表中id是做关联查询
4、user.java 和 address.java
5、userdaorepository.java 和 addressdaorepository.java
附上userdaorepository.java的代码
6、useraddressdto.java代码
此处我们自定义了useradressdto来接收两张表返回的数据,注意:此时创建的是一个interface,并且里面的字段是用get的形式创建的接收参数
7、testcontroller.java
最后,启动项目,调用/test接口
curl http://localhost:13333/test
看console里打印结果
hibernate: select "title" as common, u.id as id, u.name as name, a.id as addressid, a.address as addressname from user u, address a where u.id = a.user_id
2020-02-23 13:14:33.293 info 2816 --- [io-13333-exec-3] com.lss.jpa.web.testcontroller : result: id:1, name:zhangsan , addressid:1, addressname:beijing, common:title
2020-02-23 13:14:33.293 info 2816 --- [io-13333-exec-3] com.lss.jpa.web.testcontroller : result: id:2, name:lisi, addressid:2, addressname:tianjin, common:title
hibernate: select "title" as common, u.id as id, u.name as name, a.id as addressid, a.address as addressname from user u, address a where u.id = a.user_id and u.id=1
2020-02-23 13:14:33.296 info 2816 --- [io-13333-exec-3] com.lss.jpa.web.testcontroller : result: id:1, name:zhangsan , addressid:1, addressname:beijing, common:title
hibernate: select "title" as common, u.id as id, u.name as name, a.id as addressid, a.address as addressname from user u, address a where u.id = a.user_id and u.id=1
2020-02-23 13:14:33.299 info 2816 --- [io-13333-exec-3] com.lss.jpa.web.testcontroller : map:org.springframework.data.jpa.repository.query.abstractjpaquery$tupleconverter$tuplebackedmap@72cce81
hibernate: select user0_.id as id1_1_, user0_.name as name2_1_ from user user0_
2020-02-23 13:14:33.305 info 2816 --- [io-13333-exec-3] com.lss.jpa.web.testcontroller : userlist:[user(id=1, name=zhangsan ), user(id=2, name=lisi), user(id=3, name=wangwu), user(id=4, name=zhaoliu)]
我们可以拷到输出的sql和联查出来的数据结果,都被dto完美接收
特别注意,接收的dto一定要是interface,里面的参数要写成get形式的方法体,这样jpa在查询到数据后,会自动映射到interface里,通过调用get的方法体相当于调用了参数值,这样就会把数据取出来
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
下一篇: hadoop 详解如何实现数据排序
推荐阅读
-
springboot jpa 实现返回结果自定义查询
-
SpringBoot JPA实现查询多值
-
SpringBoot+mybatis实现:查询一定范围内的值(可任意选择大于或小于、与或,自定义逻辑查询)
-
Python Sqlite3以字典形式返回查询结果的实现方法
-
Python Sqlite3以字典形式返回查询结果的实现方法
-
SpringBoot JPA(实现查询多值)
-
JPA自定义对象接收查询结果集操作
-
SpringBoot中干掉Whitelabel Error Page返回自定义内容的实现
-
Spring Data JPA实现查询结果返回map或自定义的实体类
-
SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法