mybatis高级结果映射学习之一对一映射(六)
2017-01-25 10:35
525 查看
Mybatis结果映射有两种方式,使用resultMap更加方便,如果有当对象嵌套对象时,需要使用resultMap进行映射。比如:查询订单列表,点击列表中的查看订单明细就是使用resultMap进行的结果映射。
明确每张表中关键字段
明确数据库表与表之间的外键关系
明确业务中表与表的关系
主信息:orders
从信息 :user
orders.
orders.
orders.
user.
user.
FROM
orders,
USER
WHERE orders.
需要创建一个类OrdersExt 继承实现 Orders 并添加 用户字段信息。并生成 get set 方法。
这样 OrdersExt 即包含和能访问 基类属性的 get set 方法。
1.数据模型分析
明确每张表储存信息明确每张表中关键字段
明确数据库表与表之间的外键关系
明确业务中表与表的关系
数据库:
CREATE TABLE USER( id INT(5) NOT NULL AUTO_INCREMENT , NAME VARCHAR(255) , sex VARCHAR(1) , PRIMARY KEY (id) ) CREATE TABLE orders( id INT(5) NOT NULL AUTO_INCREMENT , userId INT(5) , number INT(5), createtime DATE , note VARCHAR(255) , PRIMARY KEY (id) )
2.一对一映射
查询订单信息,关联查询用户信息。主信息:orders
从信息 :user
1.SQL
SELECTorders.
id,
orders.
user_id,
orders.
number,
user.
username,
user.
sex
FROM
orders,
USER
WHERE orders.
user_id= user.
id
2.使用ResultType
使用resultType来进行一对一结果映射,查询出的列的个数和映射的属性的个数要一致。而且映射的属性要存在与一个大的对象中,它是一种平铺式的映射,即数据库查询出多少条记录,则映射成多少个对象。pojo:
基类 Orders orders中有各种私有属性及其他的get set 方法。package com.mybatis.po; import java.util.Date; import java.util.List; public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; public void setDetailList(List<Orderdetail> detailList) { this.detailList = detailList; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number == null ? null : number.trim(); } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public String getNote() { return note; } public void setNote(String note) { this.note = note == null ? null : note.trim(); } }
需要创建一个类OrdersExt 继承实现 Orders 并添加 用户字段信息。并生成 get set 方法。
public class OrdersExt extends Orders { private int id ; private String name ; //使用resultMap private User user ; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Integer getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
这样 OrdersExt 即包含和能访问 基类属性的 get set 方法。
映射文件:
<select id="findOrdersAndUser" resultType="com.mybatis.po.OrderExt"> SELECT orders.'id', orders.'user_id', orders.'number', user.`username`, user.`sex`, FROM orders, user WHERE orders.`user_id`=user.`id` </select>
Mapper 接口
public interface OrdersMapper{ //一对一之resultType public List< OrdersExt> findOrdersAndUser() ; }
测试代码
@Test public void testFindOrdersAndUser() { SqlSession sqlSession = sqlSessionFactory.openSession() ; OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class) ; List<OrdersExt> listExt= mapper.findOrdersAndUser() ; }
使用resultMap
使用resultMap来进行一对一结果映射,它是将关联对象添加到主信息的对象中,具体说是对象嵌套对象的一种映射方式。pojo类修改
在 扩展类OrdersExt 中增加 private User user ; 并提供get 和 set方法。//使用resultMap private User user ; public User getUser() { return user; } public void setUser(User user) { this.user = user; }
映射文件
<resultMap type="com.mybatis.po.OrdersExt" id="OrdersAndUserRstMap"> <id column="id" property="id" /> <result column="userId" property="userId"/> <result column="note" property="note"/> <!-- association :一对一关联映射 --> <!-- property: 关联信息查询的结果将要映射的扩展类中的对象属性名称--> <association property="user" javaType="com.mybatis.po.User"> <!-- 这里将order中的userId 映射到User 的id ,其实就是 user表中id的值,只不过userid与user.id 是一样的 --> <id column="userId" property="id"/> <result column="sex" property="sex"/> <result column="username" property="name" /> </association> </resultMap> <select id="findOrdersAndUserRstMap" resultMap="OrdersAndUserRstMap"> orders.`id`, orders.`userId`, orders.`number`, orders.`note`, user.`id`, user.`name` username, user.`sex`, FROM orders, USER WHERE orders.`userId` = user.`id` </select>
Mapper接口
public List<OrdersExt> findOrdersAndUserRstMap();
测试代码
@Test public void testFindOrdersAndUser() { SqlSession sqlSession = sqlSessionFactory.openSession() ; OrdersMapper mapper = sqlSession.getMapper(OrdersMapper.class) ; List<OrdersExt> listExt= mapper.findOrdersAndUserRstMap() ; }
相关文章推荐
- 框架学习系列 mybatis 第十八篇 高级结果一对一结果映射之resultMap的使用
- mybatis学习之高级映射中的一对一查询
- java之路 myBatis重新学习(三)高级结果映射
- mybatis-高级结果映射之一对一(多种方式, 有没提到的你找我)
- 【MyBatis学习08】高级映射之一对一查询
- 【MyBatis学习08】高级映射之一对一查询
- 【MyBatis学习08】高级映射之一对一查询
- Mybatis高级结果映射一对一或一对多
- 个人学习历程之菜鸟初体验mybatis高级映射一对一查询
- 框架学习系列 mybatis 第十七篇 高级结果映射一
- 【MyBatis学习08】高级映射之一对一查询
- Mybatis学习(07)-高级映射之一对一查询
- 【MyBatis学习08】高级映射之一对一查询
- mybatis学习高级映射一对一之resultMap映射
- mybatis--高级结果映射之一对一、一对多、多对多
- (八)mybatis学习之高级映射(一对一、一对多、多对多)
- Mybatis学习总结(六)——高级映射(一对一,一对多,多对多)
- MyBatis学习四:高级映射
- MyBatis 入门到精通(三) 高级结果映射
- Mybatis 高级结果映射 ResultMap Association Collection