mybatis 一对多和多对一
一、表
二、实体
1.person
- package com.kerwin.mybatis.pojo;
- import java.util.List;
- public class Person {
- private int id;
- private String name;
- private List<Orders> orderList;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public List<Orders> getOrderList() {
- return orderList;
- }
- public void setOrderList(List<Orders> orderList) {
- this.orderList = orderList;
- }
- @Override
- public String toString() {
- return "Person [id=" + id + ", name=" + name + "]";
- }
- public Person() {
- super();
- // TODO Auto-generated constructor stub
- }
- public Person(int id, String name, List<Orders> orderList) {
- super();
- this.id = id;
- this.name = name;
- this.orderList = orderList;
- }
- }
2.order
- package com.kerwin.mybatis.pojo;
- public class Orders {
- private int id;
- private double price;
- private Person person;
- public Person getPerson() {
- return person;
- }
- public void setPerson(Person person) {
- this.person = person;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public double getPrice() {
- return price;
- }
- public void setPrice(double price) {
- this.price = price;
- }
- @Override
- public String toString() {
- return "Orders [id=" + id + ", price=" + price + "]";
- }
- public Orders() {
- super();
- // TODO Auto-generated constructor stub
- }
- }
三、映射mapper文件
1. PersonMapper.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.kerwin.mybatis.pojo.Person">
- <resultMap type="com.kerwin.mybatis.pojo.Person" id="personreSultMap">
- <id column="p_id" property="id"/>
- <result column="name" property="name"/>
- <collection property="orderList" ofType="com.kerwin.mybatis.pojo.Orders" column="pid">
- <id column="o_id" property="id"/>
- <result column="price" property="price"/>
- </collection>
- </resultMap>
- <select id="selectPersonFetchOrder" parameterType="int" resultMap="personreSultMap" >
- select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}
- </select>
- </mapper>
2. OrdersMapper.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.kerwin.mybatis.pojo.Orders">
- <resultMap type="com.kerwin.mybatis.pojo.Orders" id="OrdersResultMap">
- <id column="o_id" property="id"/>
- <result column="price" property="price"/>
- <association property="person" javaType="com.kerwin.mybatis.pojo.Person">
- <id column="p_id" property="id"/>
- <result column="name" property="name"/>
- </association>
- </resultMap>
- <select id="selectOrdersFetchPerson" resultMap="OrdersResultMap">
- select p.*,o.* from person p,orders o where o.pid=p.p_id and o.o_id=#{id}
- </select>
- </mapper>
3.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.kerwin.mybatis.pojo.Author" alias="Author"/>
- </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:3306/mybatis"/>
- <property name="username" value="root"/>
- <property name="password" value="root"/>
- </dataSource>
- </environment>
- </environments>
- <mappers>
- <mapper resource="com/kerwin/mybatis/pojo/AuthorMapper.xml"/>
- <mapper resource="com/kerwin/mybatis/pojo/PostMapper.xml"/>
- <mapper resource="com/kerwin/mybatis/pojo/PersonMapper.xml"/>
- <mapper resource="com/kerwin/mybatis/pojo/OrdersMapper.xml"/>
- </mappers>
- </configuration>
四。测试类
- /**
- *
- */
- package com.kerwin.mybatis.test;
- import java.io.InputStream;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
- import org.junit.BeforeClass;
- import org.junit.Test;
- import com.kerwin.mybatis.pojo.Orders;
- import com.kerwin.mybatis.pojo.Person;
- /**
- * @author Administrator
- *
- */
- public class PersonAndOrderTest {
- private static SqlSessionFactory sessionFactory;
- /**
- * @throws java.lang.Exception
- */
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
- InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
- sessionFactory = factoryBuilder.build(inputStream);
- }
- //一对多,查询person(一)级联查询订单order(多)
- @Test
- public void testSelectPersonFetchOrder() throws Exception {
- SqlSession session = sessionFactory.openSession();
- Person person = session.selectOne("com.kerwin.mybatis.pojo.Person.selectPersonFetchOrder", 1);
- System.out.println(person);
- System.out.println(person.getOrderList().size());
- for(Orders orders : person.getOrderList()){
- System.out.println(orders);
- }
- session.close();
- }
- //多对一,查询订单order(多)级联查询person(一)
- @Test
- public void testSelectOrdersFetchPerson() throws Exception{
- SqlSession session = sessionFactory.openSession();
- Orders orders = session.selectOne("com.kerwin.mybatis.pojo.Orders.selectOrdersFetchPerson", 1);
- System.out.println(orders);
- System.out.println(orders.getPerson());
- session.close();
- }
- }
五、测试结果
1.一对多,查询person(一)级联查询订单order(多)
2.多对一,查询订单order(多)级联查询person(一)
注意:两张表中的主键id字段名要唯一,例如不能都写id,不然的话,在一对多查询的时候就会出现:级联出来的订单项只有一条记录。我之前就是将两张表的主键id字段名都写为id,导致测试结果级联出来的多一直只有一条数据,具体如下:
mybatis 一对多和多对一的更多相关文章
- Java基础-SSM之mybatis一对多和多对一关系映射
Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建customers表: ...
- MyBatis一对多和多对多xml配置
MyBatis一对多和多对多xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...
- mybatis 一对多,多对一配置
一. 简介: 本实例使用顾客和订单的例子做说明: 一个顾客可以有多个订单, 一个订单只对应一个顾客 二. 例子: 1. 代码结构图: 2. 建表语句: CREATE DATABASE test; US ...
- mybatis 一对多和多对一 简单案例笔记
以案例说明(以下案例代码都敲过验证过) 多对一(多个学生对一个老师 即学生集合中都存一个老师对象) Mybatis多对一实现方式1: //定义Student 和 Teacher 实体 @Data p ...
- mybatis 一对多和多对一关联查询
首先 数据库量表之间字段关系(没有主外键) studentmajor表的id字段对应student表里major字段 两个实体类 package com.model; import java.uti ...
- mybatis一对多,多对一
假设两张表 person对order为一对多 实体类 person package com.kerwin.mybatis.pojo; import java.util.List; public cla ...
- Mybatis之关联关系(一对多、多对多)
目的: Mybatis关系映射之一对多 Mybatis关系映射之多对多 Mybatis关系映射之一对多 一对多 (订单对应多个订单项) 多对一 (订单项对应一个订单) 其是映射关系的基层思维是一样的 ...
- 六 mybatis高级映射(一对一,一对多,多对多)
1 订单商品数据模型 以订单商品数据为模型,来对mybaits高级关系映射进行学习.
- Mybatis(四) 高级映射,一对一,一对多,多对多映射
天气甚好,怎能不学习? 一.单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细解析过这单向和双向是啥意思,在这里,在重复一遍,就拿一对多这种 ...
随机推荐
- JNI动态库生成、编译、查看相关简易资料
有一篇好博文,大家可以看下http://www.cnblogs.com/zhangweia/archive/2010/09/16/1828176.html,我这里是参考其做的另外一个javah -cl ...
- iOS 集成阿里百川最新版(3.1.1.96) 实现淘宝授权登录以及调用淘宝客户端商品详情页
公司最近要做第三方登录,由于是做导购项目,必不可少的有淘宝的授权登录.本来就是一个授权登录,没什么大不了的.但淘宝的无线开放业务——阿里百川更新的最新版本3.1.1.96,开发文档不是不详细,是很 ...
- ng-model ng-show
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 高通Quick Charge高速充电原理分析
1 QC 2.0 1.1 高通Quick Charge 2.0 高速充电原理分析 高通的QC2.0高速充电须要手机端和充电器都要支持才行. 当将充电器端通过数据线连到手机上时,充电器默认的是将D+和D ...
- JSF -> 导航(Navigation)
在使用jsf框架时,肯定会用到faces-config.xml. 而其中就会出现很多的Navigation项. 其实这些Navigation就是一些页面跳转的东西. 以下内容来自http://blog ...
- 【BZOJ3124】[Sdoi2013]直径 树形DP(不用结论)
[BZOJ3124][Sdoi2013]直径 Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节 ...
- QL 获取当前日期,年、月、日、周、时、分、秒
?select GETDATE() as '当前日期', DateName(year,GetDate()) as '年', DateName(month,GetDate()) as '月', Date ...
- Linux 装JDK
1.查看当前系统有没有装jdk java -version 2.看看有没有安装包 rpm -qa | grep java 3.卸载OpenJDK $>rpm -e --nodeps tzdata ...
- 数组中binarySearch 中小小的误区! 用的时候大家要注意点
- Python: names, values, assignment and mutability
推荐先看视频(youtube) Ned Batchelder - Facts and Myths about Python names and values - PyCon 2015 Change v ...