项目代码
http://pan.baidu.com/s/1c01BLvi
下面演示Mybatis的一对一关联映射, ResultType 与ResultMap 两种形式
整体的配置文件
<?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>
<!-- 加载属性文件 -->
<properties resource="db.properties"></properties>
<!--
<settings></settings>
-->
<typeAliases>
<!--
<typeAlias type="cn.itcast.mybatis.po.User" alias="user"/>
-->
<!-- 批量定义别名 -->
<package name="cn.itcast.mybatis.po"/>
</typeAliases>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sqlmap/User.xml"/>
<!--
<mapper resource="mapper/UserMapper.xml"/>
-->
<!--
<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
-->
<package name="cn.itcast.mybatis.mapper"/>
</mappers>
</configuration>
Mybatis的一对一关联映射ResultType形式
Mapper.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.mybatis.mapper.UserCustomMapper">
<select id="findOrderUser" resultType="OrdersCustom">
SELECT o.*, u.username, u.sex, u.address
FROM user AS u, orders AS o
WHERE o.user_id = u.id
</select>
</mapper>
Mapper.java
package cn.itcast.mybatis.mapper;
import java.util.List;
import cn.itcast.mybatis.po.Orders;
import cn.itcast.mybatis.po.OrdersCustom;
public interface UserCustomMapper {
// 根据订单查询用户信息
// 主表:Orders
// 从表:User
List<OrdersCustom> findOrderUser() throws Exception;
// 利用ResultMap进行关联映射
List<Orders> findOrderUserResultMap() throws Exception;
}
UserCustom.java(利用扩展类)
package cn.itcast.mybatis.po;
public class OrdersCustom extends Orders {
/*
* SELECT o.*, u.username, u.sex, u.address FROM user AS u, orders AS o
* WHERE o.user_id = u.id
*/
private String username;
private String sex;
private String address;
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 String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "OrdersCustom [username=" + username + ", sex=" + sex
+ ", address=" + address + ", toString()=" + super.toString()
+ "]";
}
}
Orders.java
package cn.itcast.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;
//用户信息
private User user;
//订单明细
private List<Orderdetail> orderdetails;
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();
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Orderdetail> getOrderdetails() {
return orderdetails;
}
public void setOrderdetails(List<Orderdetail> orderdetails) {
this.orderdetails = orderdetails;
}
@Override
public String toString() {
return "Orders [id=" + id + ", userId=" + userId + ", number=" + number
+ ", createtime=" + createtime + ", note=" + note + ", user="
+ user + ", orderdetails=" + orderdetails + "]";
}
}
Mybatis的一对一关联映射ResultMap形式
Mapper.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.mybatis.mapper.UserCustomMapper">
<resultMap type="Orders" id="OrdersUserResultMap">
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<!-- 配置映射的关联的用户信息 -->
<!-- association: 用于映射关联查询单个对象的信息 -->
<!-- property: 要将关联查询用户信息映射到Orders中的那个属性 -->
<association property="user" javaType="User">
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
</association>
</resultMap>
<select id="findOrderUserResultMap" resultMap="OrdersUserResultMap">
SELECT o.*, u.username, u.sex, u.address
FROM user AS u, orders AS o
WHERE o.user_id = u.id
</select>
</mapper>
Mapper.java
package cn.itcast.mybatis.mapper;
import java.util.List;
import cn.itcast.mybatis.po.Orders;
import cn.itcast.mybatis.po.OrdersCustom;
public interface UserCustomMapper {
// 根据订单查询用户信息
// 主表:Orders
// 从表:User
List<OrdersCustom> findOrderUser() throws Exception;
// 利用ResultMap进行关联映射
List<Orders> findOrderUserResultMap() throws Exception;
}
Orders.java
package cn.itcast.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;
//用户信息
private User user;
//订单明细
private List<Orderdetail> orderdetails;
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();
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<Orderdetail> getOrderdetails() {
return orderdetails;
}
public void setOrderdetails(List<Orderdetail> orderdetails) {
this.orderdetails = orderdetails;
}
@Override
public String toString() {
return "Orders [id=" + id + ", userId=" + userId + ", number=" + number
+ ", createtime=" + createtime + ", note=" + note + ", user="
+ user + ", orderdetails=" + orderdetails + "]";
}
}
测试类
package cn.itcast.mybatis.mapper;
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 cn.itcast.mybatis.po.Orders;
import cn.itcast.mybatis.po.OrdersCustom;
public class UserCustomMapperTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
String resource = null;
InputStream inputStream = null;
try {
// 读取Mybatis配置信息
resource = "SqlMapConfig.xml";
inputStream = Resources.getResourceAsStream(resource);
// 根据Mybatis配置信息,创建会话工厂
this.sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void testFindOrderUser() {
SqlSession sqlSession = null;
try {
sqlSession = sqlSessionFactory.openSession();
UserCustomMapper userCustomMapper = sqlSession
.getMapper(UserCustomMapper.class);
List<OrdersCustom> ordersCustomsList = userCustomMapper
.findOrderUser();
for (OrdersCustom tmp : ordersCustomsList) {
System.out.println(tmp);
}
} catch (Exception e) {
sqlSession.close();
}
}
@Test
public void testFindOrderUserResultMap() {
SqlSession sqlSession = null;
try {
sqlSession = sqlSessionFactory.openSession();
UserCustomMapper userCustomMapper = sqlSession
.getMapper(UserCustomMapper.class);
List<Orders> list = userCustomMapper.findOrderUserResultMap();
for (Orders tmp : list) {
System.out.println(tmp);
}
} catch (Exception e) {
sqlSession.close();
}
}
}