springboot在实际开发中如何实现多表查询?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot在实际开发中如何实现多表查询?相关的知识,希望对你有一定的参考价值。
不用回答怎么去查,我就想知道,如果用mybatis,是用xml的mapper还是,注解,注解是查了两次数据库吗,大神是用什么方式查的。
首先我们先创建两个数据库表,分别是user用户表和account账户表user表:
account表:
然后创建实体类
**第一种通过创建子类的方式查询
需求:查询所有的用户基础信息以及其所属的账户中的金额
1.创建想要得到多表查询数据的实体类(子类)
2.创建对应的Dao以及Service及实现类
3.xml中写实现查询的sql语句
4.编写控制器并访问资源路径
访问资源路径:
**第二种通过建立实体类关系方式查询
需求:查询所有账户及其所属用户的所有基础用户信息
这种方式也是目前为止最为常用的一种方式,许多教学教程上也都采用了这种方式,那么我们一起来看看。
首先这种方式不需要向第一种方式那样创建一个子类用来封装查询的结果集,但从表实体应该包含一个主表实体的对象引用
只需要在Account实体类中增加一个user属性即可,并生成对应的getter和setter方法。 参考技术A 用mapper方式就可以,不需要用注解。
举例:
Order//Order class
|--int id
|--int userId
|--date createTime
|--User user
User //User information
|--int id
|--String name
|--String address
|--List<Order> orderList //All orders for this user
|--List<OrderItem> orderItemList//Details of the order
OrderItem //Order details
|--int id
|--orderId //Order id
|--int goodsId //Commodity id
|--int number //Purchase quantity
|--goods goods
goods //Commodity object
|--id
|--name
|--price
mapper的写法:
<!-- Get user order and product details -->
<!-- Order -->
<resultMap type="Order" id="findUserAndOrderDetail">
<id column="id" property="id"/>
<result column="createTime" property="createTime"/>
<!-- User user -->
<association property="user" javaType="User">
<id column="userId" property="id"/><!-- Foreign key mapping -->
<result column="name" property="name"/>
<result column="address" property="address"/>
</association>
<!-- List<Order> orderItemList -->
<collection property="orderItemList" ofType="OrderItem">
<id column="orderId" property="id"/><!-- Foreign key mapping -->
<result column="number" property="number"/>
<result column="note" property="note"/>
<!-- goods -->
<association property="goods" javaType="goods">
<id column="goodsId" property="id"/><!-- Foreign key mapping -->
<result column="goodsName" property="name"/>
<result column="price" property="price"/>
</association>
</collection>
</resultMap>
<select id="findByName" resultMap="findUserAndOrderDetail">
select order.*,
user.name,user.address
orderItem.number
goods.name goodsName,goods.price
from user,order,orderItem,goods
where user.id=order.userId and order.id = orderItem.orderId and goods.id = orderItem.goodsId
</select>追问
嗯嗯,知道,可是我就是不想用xml
追答采纳吧,老兄,别无选择
参考技术B类似这样,不需要查询两次,查一次就可以了:
以上是关于springboot在实际开发中如何实现多表查询?的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot12 QueryDSL02之利用QueryDSL实现多表关联查询