1.沿用之前的两张表
明显,一个User可以有多个orders

2需求
根据user.name='王五’查orders
3.在数据库中写出来
SELECT u.`username` u_name, o.id o_id
FROM
orders o,USER u
WHERE
o.`user_id`=u.`id`
AND
u.`username`='王五';
4.创建两个model user_2 ,orders(和前面不一样)
(1)user(将orders包装进来)
public class User_2 {
private int id;
private String name;
private String address;
private List<Orders> ordersList;
public List<Orders> getOrdersList() {
return ordersList;
}
public void setOrdersList(List<Orders> ordersList) {
this.ordersList = ordersList;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User_2{" +
"id=" + id +
", name='" + name + '\'' +
", address='" + address + '\'' +
", ordersList=" + ordersList +
'}';
}
}
2.orders
public class Orders {
private int id;
private int user_id;
private Date createtime;
private String number;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
@Override
public String toString() {
return "Orders{" +
"id=" + id +
", user_id=" + user_id +
", createtime=" + createtime +
", number='" + number + '\'' +
'}';
}
}
5.映射接口(主要是对collection标签的认识)
public User_2 find_4(String name);
6.映射配置
<resultMap id="re_5" type="mybatis.model.User_2">
<result column="u_name" property="name"></result>
<collection property="ordersList" ofType="mybatis.model.Orders">
<result column="o_id" property="id"></result>
</collection>
</resultMap>
<select id="find_4" parameterType="String" resultMap="re_5">
SELECT u.`username` u_name, o.id o_id
FROM
orders o,USER u
WHERE
o.`user_id`=u.`id`
AND
u.`username`=#{name};
</select>
7.test
public class test11 {
@Test
public void test1() throws IOException {
//加载配置文件
InputStream stream = Resources.getResourceAsStream("mybatis/mapper/SqlMapConfig.xml");
//加载xml到工厂创造者
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(stream);
//利用build创造会话类
SqlSession sqlSession = build.openSession();
//调用sqlsession实现sql语句
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User_2 user = mapper.find_4("王五");
String name = user.getName();
List<Orders> ordersList = user.getOrdersList();
System.out.println("用户名是"+name);
for(Orders o :ordersList){
int id = o.getId();
System.out.println("他的订单号有 "+id);
};
//提交事务
sqlSession.commit();
//关闭会话
sqlSession.close();
}
}
8.结果
用户名是王五
他的订单号有 3
他的订单号有 4
9.感想
(1)这里我就深切的感受到包装设计的好处了
本文详细介绍了在MyBatis中如何实现一对多的关系映射,通过实例展示了从User表根据名称查询对应的Orders,涉及到Model设计、映射接口配置及测试过程,强调了数据包装设计的重要性。
1162

被折叠的 条评论
为什么被折叠?



