MyBatis 一对多关系映射
刚才演示了MyBatis一对一映射,接着我们看看用户对订单的一对多映射如何完成。
1 设计Pojo,建立关系
在User类添加List<Order>订单集合属性,用于关联用户的所有订单
package com.yiidian.domain;
import java.util.List;
/**
* 用户实体
* 一点教程网 - www.yiidian.com
*/
public class User {
private Integer id;
private String username;
private String password;
private List<Order> orders;
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2 编写Dao接口方法
在UserDao添加查询所有用户的方法
package com.yiidian.dao;
import com.yiidian.domain.User;
import java.util.List;
/**
* 用户Dao接口
* 一点教程网 - www.yiidian.com
*/
public interface UserDao {
/**
* 查询所有用户
*/
public List<User> findAllUsers();
}
3 编写Dao映射配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace: 用于指定该映射文件需要映射的Dao接口
-->
<mapper namespace="com.yiidian.dao.UserDao">
<!--一对多映射-->
<resultMap id="UserResultMap" type="com.yiidian.domain.User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
<!--关联查询用户的所有订单-->
<collection property="orders" column="id" ofType="com.yiidian.domain.Order">
<id property="id" column="oid"/>
<result property="orderno" column="orderno"/>
<result property="amount" column="amount"/>
</collection>
</resultMap>
<select id="findAllUsers" resultMap="UserResultMap">
SELECT
u.*,
o.id oid,
o.orderno orderno,
o.amount amount
FROM t_user u
LEFT JOIN t_order o
ON o.user_id = u.id
</select>
</mapper>
collection:一对多映射属性
- property:User类的orders集合属性名称
- column:外键字段名称
- ofType:orders集合里面的元素类型,就是Order类的全限定名
4 编写测试类
package com.yiidian.mybatis;
import com.yiidian.dao.OrderDao;
import com.yiidian.dao.UserDao;
import com.yiidian.domain.Order;
import com.yiidian.domain.User;
import com.yiidian.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
/**
* MyBatis测试类 - 一对多映射
* 一点教程网 - www.yiidian.com
*/
public class TestOne2Many {
/**
* 测试一对多映射
*/
@Test
public void testOrderDao(){
//1.获取SqlSession对象
SqlSession sqlSession = MyBatisUtils.getSession();
//2.创建Mapper代理对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
//3.调用方法
List<User> list = userDao.findAllUsers();
System.out.println(list);
//4.关闭连接
sqlSession.close();
}
}
5 运行测试类
使用dubug启动,查看User类的orders属性,成功封装了所有订单数据
热门文章
优秀文章