需求:查询订单信息,关联查询用户信息 , 订单与用户是一对一
在一对一结果映射时,使用resultType更加简单方便,如果有特殊要求(对象嵌套对象)时,需要使用resultMap进行映射,比如:查询订单列表,然后在点击列表中的查看订单明细按钮,这个时候就需要使用resultMap进行结果映射。而resultType更适应于查询明细信息,比如,查询订单明细列表。
resultType
1创建扩展类 OrderExt
package cn.itcast.po;
import java.util.Date;
public class User {
private int id;
private String username;
private String sex;
private Date birthday;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "\nUser [id=" + id + ", username=" + username + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address + "]";
}
}
package cn.itcast.po;
import java.util.Date;
public class Orders {
private Integer id;
private Integer userId;
private String number;
private Date createtime;
private String note;
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();
}
}
package cn.itcast.po;
public class OrderExt extends Orders {
private String username;
private String sex;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
2映射文件 OrdersMapper.xml
<?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">
<mapper namespace="cn.itcast.mapper.OrdersMapper">
<!-- 一对一映射之 resultType -->
<select id="findOrderAndUser" resultType="cn.itcast.po.OrderExt">
select
orders.id, orders.user_id, orders.number, user.username, user.sex
from orders , user
where orders.user_id = user.id
</select>
<!-- 一对一之 resultMap -->
<resultMap type="cn.itcast.po.OrderExt" id="OrderAndUserRstMap">
<!-- 订单信息 -->
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<!-- 用户信息一对一 property:关联信息查询结果将要映射的扩展类中的对象属性名称-->
<association property="user" javaType="cn.itcast.po.User">
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
</association>
</resultMap>
<select id="findOrderAndUserRstMap" resultMap="OrderAndUserRstMap">
select
orders.id, orders.user_id, orders.number, user.username, user.sex
from orders , user
where orders.user_id = user.id
</select>
</mapper>
3OrdersMapper接口 OrdersMapper.java
package cn.itcast.mapper;
import java.util.List;
import cn.itcast.po.OrderExt;
public interface OrdersMapper {
public List<OrderExt> findOrderAndUser();
public List<OrderExt> findOrderAndUserRstMap();
}
package cn.itcast.mapper;
import java.util.List;
import cn.itcast.po.OrderExt;
public interface OrdersMapper {
public List<OrderExt> findOrderAndUser();
public List<OrderExt> findOrderAndUserRstMap();
}
4加载映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="cn.itcast.po.User" alias="user"/>
</typeAliases>
<!-- 配置mybatis的环境信息 -->
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/zn"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<!-- 注册指定包下的所有映射文件 -->
<package name="cn.itcast.mapper"/>
</mappers>
</configuration>
5测试 OrdersMapperTest
package cn.itcast.mapper;
import static org.junit.Assert.*;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import org.omg.CORBA.PUBLIC_MEMBER;
import cn.itcast.po.OrderExt;
public class OrdersMapperTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
//读取配置文件
String resource ="SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindOrderAndUser() {
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);
List<OrderExt> list = ordersMapper.findOrderAndUser();
sqlSession.close();
}
@Test
public void testFindOrderAndUserRstMap() {
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);
List<OrderExt> list = ordersMapper.findOrderAndUserRstMap();
sqlSession.close();
}
}
resultMap
1修改扩展类 OrderExt
2映射文件 OrdersMapper.xml
3OrdersMapper接口 OrdersMapper.java