实际业务中,多表关联查询应用实例很多,怎么使用JPA进行多表查询,可以选择不同的方法优化。
记下在JPA中多表查询的有效使用方法。
使用关系映射
就是使用一对多,多对一,一对一这种关系进行关联映射,
一个一对多迭代Tree的例子:
1 |
|
平常使用这种方法最多了,因为方便,少写代码,但是平时不一定需要查询所有,而且在数据比较多的情况下,开销比较大,就得使用下面第二种方法。
使用JPQL多表查询
JPQL
全称Java Presistence Query Language
,Java持久化查询语言。和Hibernate的HQL语句差不多。
现在测试下,从A表和B表各取出一个字段吧。
创建一个业务实体DTO:
1 | import java.io.Serializable; |
这样可以使用业务实体类的构造函数就行绑定数据了。
Dao层查询数据库的JPQL语句:
1 |
|
使用join查询出两个表相关联的所有列。
单元测试:
1 |
|
数据有点多
1 | TestEntity{no='N57008', tel='null', num=null}, TestEntity{no='N33505', tel='null', num=null}, TestEntity{no='N88001', tel='null', num=null},省略... |
使用Map转换
JPA 提供查询结果的转换的方法,它提供一种使用SQL查询结果的列明作为键值,查询出来的Map结果转换成JSONArray
或者JSONObject
,再返回给客户端就可以了。
1 |
|
如果没有特殊要求的话也推荐使用这种,开发起来方便很多,如果不想直接返回数据,也可以将查询出来的LIst转换下,迭代取出MAP里的键值对,就是实体类的属性值,进行处理。
需要注意的是,在Hibernate3.2版本上才有这个方法,具体JPA哪个版本没仔细查。