您的位置:首页 > 其它

Mybatis基础学习(四)—关系映射

2016-07-04 19:35 344 查看

一、模型分析





user和orders

user---->orders

一个用户可以创建多个订单,一对多。

orders--->user

一个订单只由一个用户创建,一对一。

 

orders和orderdetail

orders--->orderdetail

一个订单可以包括多个订单明细,因为一个订单可以购买多个商品,每个商品的购买信息在orderdetail记录,一对多关系。

orderdetail---> orders

一个订单明细只能包括在一个订单中,一对一。

 

orderdetail和items

orderdetail--->itesms

一个订单明细只对应一个商品信息,一对一。

items---> orderdetail

一个商品可以包括在多个订单明细 ,一对多。

 

二、一对一查询

1.使用resultType

     复杂查询时,单表对应的po类已不能满足输出结果集的映射。所以要根据需求建立一个扩展类来作为resultType的类型。

 

User.java

public class User implements Serializable{

private int id;

private String username;// 用户姓名

private String sex;// 性别

private Date birthday;// 生日

private String address;// 地址

public User(){
}

public User(String username,String sex,Date birthday,String address){
this.username = username;
this.sex = sex;
this.birthday = birthday;
this.address = address;
}

//get、set.....
}


 

Orders.java

public class Orders implements Serializable{

private Integer id;

private Integer userId;

private String number;

private Date createtime;

private String note;

//get、set.....
}


 

我们要执行如下语句:





 

(1)编写PO类

public class OrdersExt extends Orders{

private String username;

private String sex;

private String address;

//get、set......
}


 

(2)编写mapper接口 

public interface OrdersMapper{

public List<OrdersExt> findOrderAndUser();
}


 

(3)编写映射文件





 

Test.java

@Test
public void testFindUsersByNameAndSex(){

SqlSession sqlSession = sqlSessionFactory.openSession();

OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class);

List<OrdersExt> list = mapper.findOrderAndUser();

for(OrdersExt orderExt : list){

System.out.println(orderExt);
}

sqlSession.close();
}


 

2.使用resultMap

(1)修改PO类,添加User对象





 

(2)编写mapper接口





 

(3)编写映射文件









 

一对一查询

resultType: 使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。

如果没有查询结果的特殊要求建议使用resultType。

resultMap: 需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的对象属性中。

resultMap可以实现延迟加载,resultType无法实现延迟加载。

 

三、一对多映射

(1)需求

     查询订单信息及订单明细和用户信息。

 

(2)Sql语句

确定主查询表: 订单表

确定关联查询表: 订单明细表、用户表

在一对一查询基础上添加订单明细关联表即可。





 

(3)修改PO类





 

(4)编写mapper接口





 

(5)编写mapper配置文件





collection: 定义一个一对多关系。

ofType: 指定该集合参数所映射的类型。

 

四、多对多

(1)需求

查询用户信息及用户购买的商品信息,要求将关联信息映射到主pojo的pojo属性中。

 

(2)Sql语句

查询主表: user

查询关联表: orders、orderdetail、items





 

(3)映射思路

将用户信息映射到user中。

在user类中添加订单列表属性List<Orders> orders,将用户创建的订单映射到orders。

在Orders中添加订单明细列表属性List<Orderdetail> detailList,将订单的明细映射到detailList。

在Orderdetail中添加Items属性,将订单明细所对应的商品映射到Items。

 

(4)修改PO类





 

(5)编写mapper接口





 

(6)编写mapper配置文件







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: