06-MyBatis_关联映射之多对一

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();
	}




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值