MyBatis中一对多关联查询

案例:查询所有用户信息及用户关联的订单信息。

用户信息和订单信息为一对多关系。

sql语句:

SELECT

u.id,

u.username,

u.birthday,

u.sex,

u.address,

o.id oid,

o.number,

扫描二维码关注公众号,回复: 3311868 查看本文章

o.createtime,

o.note

FROM

`user` u

LEFT JOIN `order` o ON u.id = o.user_id

 1.修改POJO类:

在User类中加入List<Order> orders属性,如下图:

2.mapperxml

在UserMapper.xml添加sql,如下:

<resultMap type="user" id="userOrderResultMap">

<id property="id" column="id" />

<result property="username" column="username" />

<result property="birthday" column="birthday" />

<result property="sex" column="sex" />

<result property="address" column="address" />

 

<!-- 配置一对多的关系 -->

<collection property="orders" javaType="list" ofType="order">

<!-- 配置主键,是关联Order的唯一标识 -->

<id property="id" column="oid" />

<result property="number" column="number" />

<result property="createtime" column="createtime" />

<result property="note" column="note" />

</collection>

</resultMap>

 

<!-- 一对多关联,查询订单同时查询该用户下的订单 -->

<select id="queryUserOrder" resultMap="userOrderResultMap">

SELECT

u.id,

u.username,

u.birthday,

u.sex,

u.address,

o.id oid,

o.number,

o.createtime,

o.note

FROM

`user` u

LEFT JOIN `order` o ON u.id = o.user_id

</select>

3.mapper接口:

编写UserMapper接口,如下图:

4.测试方法:

@Test

public void testQueryUserOrder() {

// mybatis和spring整合,整合之后,交给spring管理

SqlSession sqlSession = this.sqlSessionFactory.openSession();

// 创建Mapper接口的动态代理对象,整合之后,交给spring管理

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

 

// 使用userMapper执行根据条件查询用户

List<User> list = userMapper.queryUserOrder();

 

for (User u : list) {

System.out.println(u);

}

 

// mybatis和spring整合,整合之后,交给spring管理

sqlSession.close();

}

5.测试效果如下:

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/A_jungle/article/details/82425378
今日推荐