0. 源码下载
1. 表
1.1 表名和字段
person(personId,personName,personAddress,personTel)
orders(orderId,ordreNumber,orderPrice,pid)
1.2 SQL脚本(MySQL)
USE mybatis;
CREATE TABLE person
(
personId VARCHAR(36) PRIMARY KEY,
personName VARCHAR(64),
personAddress VARCHAR(128),
personTel VARCHAR(11)
);
-- order 在MySQL中是关键字
CREATE TABLE orders
(
orderId VARCHAR(36) PRIMARY KEY,
orderNumber VARCHAR(20),
orderPrice INT,
pid VARCHAR(36)
);
INSERT INTO person VALUES('001', 'Jack', 'Wuhan', '1234567');
INSERT INTO orders VALUES('O_00001', '00001', 100, '001');
INSERT INTO orders VALUES('O_00002', '00002', 200, '001');
SELECT p.*, o.*
FROM person p
JOIN orders o ON (p.personId=o.pid)
WHERE p.personId = '001'
SELECT o.*, p.*
FROM orders o
JOIN person p ON (p.personId=o.pid)
WHERE o.orderId = 'O_00001'
2. 实体
public class Person {
private String id;
private String name;
private String address;
private String tel;
// set get 已省略
}
public class Order {
private String id;
private String number;
private Integer price;
private Person person;
// set get 已省略
}
3. 总配置
同上一篇05-MyBatis_关联映射之一对多4. 映射文件
<mapper namespace="com.hehe.mybatis.domain.Person">
<resultMap type="Person" id="personMap">
<id column="personId" property="id"/>
<result column="personName" property="name"/>
<result column="personAddress" property="address"/>
<result column="personTel" property="tel"/>
</resultMap>
</mapper>
<mapper namespace="com.hehe.mybatis.domain.Order">
<resultMap type="Order" id="orderMap">
<id column="orderId" property="id"/>
<result column="orderNumber" property="number"/>
<result column="orderPrice" property="price"/>
<!-- 多对一 -->
<!--
private Person person;
-->
<association property="person" javaType="Person">
<id column="personId" property="id"/>
<result column="personName" property="name"/>
<result column="personAddress" property="address"/>
<result column="personTel" property="tel"/>
</association>
</resultMap>
<!-- 关联查询 -->
<select id="selectOrderById" parameterType="string" resultMap="orderMap">
SELECT o.*, p.*
FROM orders o
JOIN person p ON (p.personId=o.pid)
WHERE o.orderId = 'O_00001'
</select>
</mapper>
5. 测试
/*
<!-- 关联查询 -->
<select id="selectOrderById" parameterType="string" resultMap="orderMap">
SELECT o.*, p.*
FROM orders o
JOIN person p ON (p.personId=o.pid)
WHERE o.orderId = 'O_00001'
</select>
*/ @Test public void testSelectOrderById() throws Exception {
SqlSession session = sqlSessionFactory.openSession();
Order order = session.selectOne("com.hehe.mybatis.domain.Order.selectOrderById", "O_00001");
System.out.println(
order.getId() + "\t" +
order.getNumber() + "\t" +
order.getPrice() + "\t" +
order.getPerson().getId() + "\t" +
order.getPerson().getName() + "\t" +
order.getPerson().getAddress() + "\t" +
order.getPerson().getTel()
);
session.close();
}