这里自定义的实体是没有在数据映射的实体。可以返回聚合函数的值。(个人理解可以。。。。。。)
实体类。(这里本人使用的是idea)
repository类(这里不是 使用的继承jpa中的 的方式。而是使用的entitymanager)。代码中有详细的注释。
ok。就这样就可以了。个人测试似乎在oracle数据库 不行。可能是sql查询结果不太一样
可以在特定的场合使用。
自定义类
这里是repository中的写法
在java开发中,用jpa框架做连表查询时(需要返回两张表的各自部分字段),在返回对象的过程中感觉比较棘手,一直没有一个好的解决方案,网上也有各种版本的方法,下面的方法本人感觉最方便使用
先看项目结构,为了简化,没有引入rvice层,直接使用controller调用dao层
pom.xml配置
我们现在需要联查ur和address表,address表中的ur_id是和ur表中id是做关联查询
附上urdaorepository.java的代码
此处我们自定义了uradressdto来接收两张表返回的数据,注意:此时创建的是一个interface,并且里面的字段是用get的形式创建的接收参数
最后,启动项目,调用/test接口
curl http://localhost:13333/test
看console里打印结果
hibernate: lect “title” as common, u.id as id, u.name as name, a.id as addressid, a.address as addressname from ur u, a2020疫情开学第一课观后感50字ddress a where u.id = a.ur_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: lect “title” as common, u.id as id, u.name as name, a.id as addressid, a.address as addressname from ur u, address a where u.id = a.ur_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: lect “title” as common, u.id as id, u.name as name, a.id as addressid, a.address as addressname from ur u, address a where u.id = a.ur_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: lect ur0_.id as id1_1_, ur0_.name as name2_1_ from ur ur0_
2020-02-23 13:14:33.305 info 2816 — [io-13333-exec-3] com.lss.jpa.web.testcontroller : urlist:[ur(id=1, name=zhangsan ), ur(id=2, name=lisi), ur(id=3, name=wangwu), ur(id=4, name=zhaoliu)]
我们可以拷到输出的sql和联查出来的数据结果,都被dto完美接收
特别注意,接收的dto一定要是interface,里面的参数要写成get形式的方法体,这样jpa在查询到数据后,会自动映射到interface里,通过调用get的方法体相当于调用了参数值,这样就会把数据取出来
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.初学素描com。
本文发布于:2023-04-05 20:39:21,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/7d2d563c5c60585b91f7204000c1d9b7.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:springboot jpa 实现返回结果自定义查询.doc
本文 PDF 下载地址:springboot jpa 实现返回结果自定义查询.pdf
留言与评论(共有 0 条评论) |