您的位置:首页 > 其它

06-MyBatis_关联映射之多对一

2013-10-19 22:32 267 查看

0. 源码下载

MyBatis_关联映射之多对一_src.zip

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();
	}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: