一. 简介:

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

二. 例子:

1. 代码结构图:

2. 建表语句:

  1. CREATE DATABASE test;
  2. USE test;
  3. CREATE TABLE person(
  4. personId VARCHAR(36) PRIMARY KEY,
  5. personName VARCHAR(64),
  6. personAddress VARCHAR(128),
  7. personTel VARCHAR(11)
  8. );
  9. CREATE TABLE orders(
  10. orderId VARCHAR(36) PRIMARY KEY,
  11. orderNumber VARCHAR(20),
  12. orderPrice INT,
  13. pid VARCHAR(36)
  14. );
  15. INSERT INTO person VALUES('001', 'Jack', 'Wuhan', '1234567');
  16. INSERT INTO orders VALUES('O_00001', '00001', 100, '001');
  17. INSERT INTO orders VALUES('O_00002', '00002', 200, '001');
  18. SELECT p.*, o.*
  19. FROM person p
  20. JOIN orders o ON (p.personId=o.pid)
  21. WHERE p.personId = '001'

3. 顾客实体:

  1. /**
  2. * 客户实体
  3. */
  4. public class Person {
  5. private String id;
  6. private String name;
  7. private String address;
  8. private String tel;
  9. private List<Order> orders;
  10. @Override
  11. public String toString() {
  12. return "{id: " + id + ", name: " + name + ", address: " + address + ", tel: " + tel + "}";
  13. }
  14. }

4. 订单实体:

  1. /**
  2. * 订单实体
  3. */
  4. public class Order {
  5. private String id;
  6. private String number;
  7. private int price;
  8. private Person person;
  9. @Override
  10. public String toString() {
  11. return "{id: " + id + ", number: " + number + ", price: " + price + "}";
  12. }
  13. }

5. 一对多实体配置: Person.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.zdp.domain.Person">
  6. <resultMap type="Person" id="personBean">
  7. <id column="personId" property="id"/>
  8. <result column="personName" property="name"/>
  9. <result column="personAddress" property="address"/>
  10. <result column="personTel" property="tel"/>
  11. <!-- 一对多的关系 -->
  12. <!-- property: 指的是集合属性的值, ofType:指的是集合中元素的类型 -->
  13. <collection property="orders" ofType="Order">
  14. <id column="orderId" property="id"/>
  15. <result column="orderNumber" property="number"/>
  16. <result column="orderPrice" property="price"/>
  17. </collection>
  18. </resultMap>
  19. <!-- 根据id查询Person, 关联将Orders查询出来 -->
  20. <select id="selectPersonById" parameterType="string" resultMap="personBean">
  21. select p.*, o.* from person p, orders o where p.personId  = o.pid and p.personId = #{id}
  22. </select>
  23. </mapper>

6. 多对一实体配置:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.zdp.domain.Order">
  6. <resultMap type="Order" id="orderBean">
  7. <id column="orderId" property="id"/>
  8. <result column="orderNumber" property="number"/>
  9. <result column="orderPrice" property="price"/>
  10. <!-- 多对一的关系 -->
  11. <!-- property: 指的是属性的值, javaType:指的是属性的类型-->
  12. <association property="person" javaType="Person">
  13. <id column="personId" property="id"/>
  14. <result column="personName" property="name"/>
  15. <result column="personAddress" property="address"/>
  16. <result column="personTel" property="tel"/>
  17. </association>
  18. </resultMap>
  19. <!-- 根据id查询Order, 关联将Person查询出来 -->
  20. <select id="selectOrderById" parameterType="string" resultMap="orderBean">
  21. select p.*, o.* from person p, orders o where p.personId  = o.pid and o.orderId = #{id}
  22. </select>
  23. </mapper>

7. 总配置: sqlMapConfig.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <typeAliases>
  7. <typeAlias type="com.zdp.domain.Person" alias="Person"/>
  8. <typeAlias type="com.zdp.domain.Order" alias="Order"/>
  9. </typeAliases>
  10. <environments default="development">
  11. <environment id="development">
  12. <transactionManager type="JDBC" />
  13. <dataSource type="POOLED">
  14. <property name="driver" value="com.mysql.jdbc.Driver" />
  15. <property name="url" value="jdbc:mysql://localhost/test" />
  16. <property name="username" value="root" />
  17. <property name="password" value="root" />
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <mappers>
  22. <!-- 映射文件的位置 -->
  23. <mapper resource="com/zdp/domain/Person.xml" />
  24. <mapper resource="com/zdp/domain/Order.xml" />
  25. </mappers>
  26. </configuration>

8. 测试文件:

  1. /**
  2. * 测试一对多和多对一
  3. */
  4. public class MybatisTest {
  5. private SqlSessionFactory ssf;
  6. @Before
  7. public void initSF() throws Exception {
  8. String resource = "sqlMapConfig.xml";
  9. InputStream inputStream = Resources.getResourceAsStream(resource);
  10. ssf = new SqlSessionFactoryBuilder().build(inputStream);
  11. }
  12. @Test//一对多关联查询
  13. public void selectPersonById()throws Exception{
  14. SqlSession session = ssf.openSession();
  15. Person person = session.selectOne("com.zdp.domain.Person.selectPersonById", "001");
  16. System.out.println(person.getOrders());
  17. }
  18. @Test//多对一关联查询
  19. public void selectOrderById()throws Exception{
  20. SqlSession session = ssf.openSession();
  21. Order order = session.selectOne("com.zdp.domain.Order.selectOrderById", "O_00001");
  22. System.out.println(order.getPerson().getName());
  23. }
  24. }

转自:http://blog.csdn.net/jkxiaoxing/article/details/52199386

mybatis 一对多,多对一配置的更多相关文章

  1. mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置

    n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...

  2. mybatis一对多 多对一 多对多

    https://blog.csdn.net/AdminGuan/article/details/98952484   Mybatis的Mapper该如何编写多对一? 很简单,就是在resultMap标 ...

  3. EntityFrameworkCore 一对一 && 一对多 && 多对多配置

    基本数据结构 表设计如下: 入学记录 public class AdmissionRecord { [Key] public long Id { get; set; } public DateTime ...

  4. Mybatis 一对多 简单映射配置

    只需在一对多的 “一” Model中定义一个list集合: public class SelectQuestion{ // 主键ID private Integer id; private Strin ...

  5. MyBatis 一对多,多对一关联查询的时候Mapper的顺序

    要先写association,然后写collection:这是由DTD决定的: <resultMap ...> <association ...> </associati ...

  6. Mybatis一对多/多对多查询时只查出了一条数据

    问题描述: 如果三表(包括了关系表)级联查询,主表和明细表的主键都是id的话,明细表的多条数据只能查询出来第一条/最后一条数据. 三个表,权限表(Permission),权限组表(Permission ...

  7. Mybatis 一对多 多对1

    http://blog.csdn.net/z69183787/article/details/46833565 http://blog.csdn.net/rain097790/article/deta ...

  8. Mybatis一对多或多对多只能查出一条数据解决策略

    原文:https://blog.csdn.net/ren814/article/details/81742242 <resultMap id="menuModelMap" t ...

  9. MyBatis一对多和多对多xml配置

    MyBatis一对多和多对多xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...

  10. JAVA日记之mybatis-3一对一,一对多,多对多xml与注解配置

    1.Mybatis多表查询1.1 一对一查询1.1.1 一对一查询的模型用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的 ...

随机推荐

  1. SpringBoot监控中心

    1.什么是SpringBoot监控中心? 2.为什么要使用SpringBoot监控中心?

  2. Hello 2019题解

    Hello 2019题解 题解 CF1097A [Gennady and a Card Game] map大法好qwq 枚举每一个的第\(1,2\)位判是否与给定的重复即可 # include < ...

  3. vue学习--vue项目端口不固定,无法指定问题

    写于20190819 前面是自己解决的思路,后面是解决方法以及需要记住的一些更改 package.json 之前只知道vue项目是基于node.js,对node.js了解不是很深入,项目的开始文件是p ...

  4. Wireshark过滤命令总结

    1.表达式1 (tcp.flags.reset == )&&(tcp.seq == ) 2.表达式2 (tcp.flags.syn == )&&(tcp.analysi ...

  5. LeetCode 560. 和为K的子数组(Subarray Sum Equals K)

    题目描述 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1,1] ...

  6. jQuery中ajax如何返回值到上层函数

    jQuery中ajax如何返回值到上层函数 一.总结 一句话总结: ajax的同步操作即可,设置 async: false, 二.jquery的同步操作 var can_submit=true; $. ...

  7. sql data compare

    https://documentation.red-gate.com/sdc14 About SQL Data Compare With SQL Data Compare, you can compa ...

  8. oracle的表分区

    (1.) 表空间及分区表的概念 表空间: 是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间.   分区表: 当表中的数据量不断增大,查询数据的速度就 ...

  9. javaScript(拼写树形)+ajax请求,去后台查找数据

    第一步:页面加载完成时,利用jquery中的一函数,调用js方法,js方法,发送ajax请求,去后台查找父类权限集合,响应回来json格式的数据,对数据进行操作,往页面上添加内容 //页面初始化加载菜 ...

  10. 关于浏览器请求PHP一次请求执行了两次

    测试同学今天又双叒反馈了一个Bug 继上次解决了重复请求的问题之后,本来就以为可以万事大吉了,没想到我还是太年轻了,测试同学说,不行啊,老哥,你这个我点击了一次创建居然创建出来两条数据!!并且查看日志 ...