本实例使用顾客和订单的例子做说明: 一个顾客可以有多个订单, 一个订单只对应一个顾客

二. 例子:

1. 代码结构图:

2. 建表语句:

CREATE DATABASE test;  USE test;CREATE TABLE person(personId VARCHAR(36) PRIMARY KEY,personName VARCHAR(64),personAddress VARCHAR(128),personTel VARCHAR(11)
);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'

3. 顾客实体:

/*** 客户实体 */
public class Person {private String id;private String name;private String address;private String tel;private List<Order> orders;@Overridepublic String toString() {return "{id: " + id + ", name: " + name + ", address: " + address + ", tel: " + tel + "}";}
}

4. 订单实体:

/*** 订单实体*/
public class Order {private String id;private String number;private int price;private Person person; @Overridepublic String toString() {return "{id: " + id + ", number: " + number + ", price: " + price + "}";}}

5. 一对多实体配置: Person.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="com.zdp.domain.Person"><resultMap type="Person" id="personBean"><id column="personId" property="id"/><result column="personName" property="name"/><result column="personAddress" property="address"/><result column="personTel" property="tel"/><!-- 一对多的关系 --><!-- property: 指的是集合属性的值, ofType:指的是集合中元素的类型 --><collection property="orders" ofType="Order"><id column="orderId" property="id"/><result column="orderNumber" property="number"/><result column="orderPrice" property="price"/></collection></resultMap><!-- 根据id查询Person, 关联将Orders查询出来 --><select id="selectPersonById" parameterType="string" resultMap="personBean">select p.*, o.* from person p, orders o where p.personId  = o.pid and p.personId = #{id}</select></mapper>

6. 多对一实体配置:

<?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="com.zdp.domain.Order"><resultMap type="Order" id="orderBean"><id column="orderId" property="id"/><result column="orderNumber" property="number"/><result column="orderPrice" property="price"/><!-- 多对一的关系 --><!-- property: 指的是属性的值, javaType:指的是属性的类型--><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><!-- 根据id查询Order, 关联将Person查询出来 --><select id="selectOrderById" parameterType="string" resultMap="orderBean">select p.*, o.* from person p, orders o where p.personId  = o.pid and o.orderId = #{id}</select></mapper>

7. 总配置: sqlMapConfig.xml

<?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="com.zdp.domain.Person" alias="Person"/>  <typeAlias type="com.zdp.domain.Order" alias="Order"/>  </typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost/test" /><property name="username" value="root" /><property name="password" value="root" /></dataSource></environment></environments><mappers><!-- 映射文件的位置 --><mapper resource="com/zdp/domain/Person.xml" /><mapper resource="com/zdp/domain/Order.xml" /></mappers>
</configuration>

8. 测试文件:

/*** 测试一对多和多对一*/
public class MybatisTest {private SqlSessionFactory ssf; @Beforepublic void initSF() throws Exception {String resource = "sqlMapConfig.xml";InputStream inputStream = Resources.getResourceAsStream(resource);ssf = new SqlSessionFactoryBuilder().build(inputStream);}@Test//一对多关联查询public void selectPersonById()throws Exception{SqlSession session = ssf.openSession();Person person = session.selectOne("com.zdp.domain.Person.selectPersonById", "001");System.out.println(person.getOrders());}@Test//多对一关联查询public void selectOrderById()throws Exception{SqlSession session = ssf.openSession();Order order = session.selectOne("com.zdp.domain.Order.selectOrderById", "O_00001");System.out.println(order.getPerson().getName());}
}

mybatis关系映射之一对多和多对一相关推荐

  1. MyBatis 关系映射XML配置

    关系映射 在我看来这些实体类就没啥太大关联关系,不就是一个sql语句解决的问题,直接多表查询就完事,程序将它设置关联就好 xml里面配置也是配置了sql语句,下面给出几个关系的小毛驴(xml) 一对多 ...

  2. mybatis关系映射(1对1,1对多,多对多)

    1.映射(多)对一.(一)对一的关联关系          1).使用列的别名             ①.若不关联数据表,则可以得到关联对象的id属性             ②.若还希望得到关联对 ...

  3. mybatis 关系映射

    一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: 1 CREATE TABLE items ( 2 id INT NOT NULL AUTO_INCREMENT, 3 itemsname ...

  4. mysql 一对多映射_mybatis关系映射之一对多和多对一

    本实例使用用户和订单的例子做说明: 一个用户可以有多个订单, 一个订单只对应一个用户.(其中应用到注释) 1.代码的结构 2. 建表语句: CREATE DATABASE test; USE test ...

  5. Mybatis关系映射一对一的关系

    表结构: t_person表 个人表 t_idcard表 身份证表 身份证与个人一对一关联 实体映射类: @Data public class IdCard {private Integer id;p ...

  6. 三分钟带你了解mybatis关联映射(案例分析一对一,多对多)

    ------------------------------------------------原创不易,如若喜欢,请点一点赞吧!----------------------------------- ...

  7. Mybatis—— 使用注解实现一对一复杂关系映射及延迟加载

    @Results 注解 代替的是标签<resultMap> 该注解中可以使用单个@Result 注解,也可以使用@Result 集合 @Results({@Result(),@Result ...

  8. 【Mybatis高级映射】一对一映射、一对多映射、多对多映射

    前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...

  9. mybatis高级映射(一对一,一对多,多对多)

    http://www.cnblogs.com/selene/p/4627446.html 阿赫瓦里 生命对于某些人来说,一直都是美丽的,因为这些人的一生都在为某个梦想而奋斗!!! 博客园 首页 新随笔 ...

最新文章

  1. 适用于Windows和Linux的Yolo-v3和Yolo-v2(上)
  2. 基因组测序数据分析:测序技术
  3. 最大连续子序列和-动态规划
  4. python从入门到精通怎么样-Python 从入门到精通:一个月就够了
  5. c++状态模式state
  6. 翻版“永恒之蓝”入侵手机 信息安全再临大考
  7. golang编译工具LiteIDE的调试使用方法(F5)
  8. 大电流dcdc降压芯片20a_5V转1.8V稳压芯片,3.7V转1.8V稳压芯片
  9. python多重循环break_Python教程:跳出多层循环for、while
  10. 联想ghost重装系统_联想一键ghost重装系统步骤
  11. oracle中exists和in的比较
  12. (面试总结)您不清楚的18个非技术面试题---今天教你巧妙回答
  13. 黑苹果 - 图形卡 显示器 7MB
  14. 弘辽科技:复购率太低怎么办呢?
  15. java 双三次线性插值_双三次插值算法实现
  16. 如何正确学习软件工程
  17. 无线信道特性分析及建模仿真
  18. 最适合程序员转行的10大职业
  19. Axure-产品交互设计师的利器
  20. echart地图飞线图

热门文章

  1. vue项目中 集成plus
  2. 青少年CTF-弱口令实验室招新赛个人wp
  3. 如何使网站图标Icon显示在浏览器地址前面
  4. shell判断文件目录或文件是否存在
  5. [ahk]解析大智慧自选股blk文件中的股票代码
  6. 有哪些有效解决程序员中年危机的方法?
  7. bert 中文 代码 谷歌_ACL 2020 | 用BERT解决表格问答任务,谷歌提出弱监督表格解析器TaPas...
  8. jq获取页面中所有的a链接并执行下载功能
  9. 亚马逊、Lazada卖家如何做测评自养号和提升店铺流量
  10. 题目:以下选项中关于DOM和SAX的说法错误的是()