六 mybatis高级映射(一对一,一对多,多对多)
1 订单商品数据模型
以订单商品数据为模型,来对mybaits高级关系映射进行学习。
aaarticlea/png;base64,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" alt="" />
aaarticlea/png;base64,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" alt="" />
1.1 数据模型分析思路
1、每张表记录的数据内容
分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程。
2、每张表重要的字段设置
非空字段、外键字段
3、数据库级别表与表之间的关系
外键关系
4、表与表之间的业务关系
在分析表与表之间的业务关系时一定要建立 在某个业务意义基础上去分析。
1.2 数据模型分析
用户表user:
记录了购买商品的用户信息
订单表:orders
记录了用户所创建的订单(购买商品的订单)
订单明细表:orderdetail:
记录了订单的详细信息即购买商品的信息
商品表:items
记录了商品信息
表与表之间的业务关系:
在分析表与表之间的业务关系时需要建立 在某个业务意义基础上去分析。
先分析数据级别之间有关系的表之间的业务关系:
usre和orders:
user---->orders:一个用户可以创建多个订单,一对多
orders--->user:一个订单只由一个用户创建,一对一
orders和orderdetail:
orders---》orderdetail:一个订单可以包括 多个订单明细,因为一个订单可以购买多个商品,每个商品的购买信息在orderdetail记录,一对多关系
orderdetail--> orders:一个订单明细只能包括在一个订单中,一对一
orderdetail和itesm:
orderdetail---》itesms:一个订单明细只对应一个商品信息,一对一
items--> orderdetail:一个商品可以包括在多个订单明细 ,一对多
再分析数据库级别没有关系的表之间是否有业务关系:
orders和items:
orders和items之间可以通过orderdetail表建立 关系。
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> <!-- 加载属性文件 -->
<properties resource="db.properties">
<!--properties中还可以配置一些属性名和属性值 -->
<!-- <property name="jdbc.driver" value=""/> -->
</properties> <!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制由mybatis-->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis管理-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 加载 映射文件 -->
<mappers> <!--通过resource方法一次加载一个映射文件 -->
<!-- <mapper resource="mapper/UserMapper.xml"/> --> <!-- 通过mapper接口加载单个 映射文件
遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
上边规范的前提是:使用的是mapper代理方法
-->
<!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> --> <!-- 批量加载mapper
指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
上边规范的前提是:使用的是mapper代理方法
-->
<package name="cn.itcast.mapper"/> </mappers> </configuration>
1 一对一查询
1.1 需求
查询订单信息,关联查询创建订单的用户信息
1.2 resultType
1.2.1 sql语句
确定查询的主表:订单表
确定查询的关联表:用户表
关联查询使用内链接?还是外链接?
由于orders表中有一个外键(user_id),通过外键关联查询用户表只能查询出一条记录,可以使用内链接。
select
orders.*,
user.username,
user.sex,
user.address
from
orders,
user
where orders.user_id=user.id
1.2.2 创建pojo
将上边sql查询的结果映射到pojo中,pojo中必须包括所有查询列名。
原始的Orders.java不能映射全部字段,需要新创建的pojo。
创建 一个pojo继承包括查询字段较多的po类。
//通过此类映射订单和用户查询结果,让此类继承包括 字段较多的pojo类
public class OrdersCustom extends Orders { //添加用戶属性
/* user.username,
user.sex,
user.address */ private String username; private String sex; private String address;
1.2.3 mapper.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="cn.itcast.mapper.OrdersMapperCustom">
<select id="findOrdersUser" resultType="cn.itcast.po.OrdersCustom">
select
orders.*,
user.username,
user.sex,
user.address
from
orders,
user
where orders.user_id=user.id
</select> </mapper>
1.2.4 mapper.java
public interface OrdersMapperCustom { //查询订单管理查询的用户信息
public List<OrdersCustom> findOrdersUser() throws Exception; }
1.3 resultMap
1.3.1 sql语句
同resultType实现的sql
1.3.2 使用resultMap映射的思路
使用resultMap将查询结果中的订单信息映射到Orders对象中,在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中。
1.3.3 需要Orders类中添加user属性
public class Orders {
private Integer id;
private Integer userId;
private String number;
private Date createtime;
private String note; private User user;
1.3.4 mapper.xml
1.3.4.1 定义resultMap
<!-- 订单查询关联用户的resultMap
将整个查询的结果映射到cn.itcast.mybatis.po.Orders中
-->
<resultMap type="cn.itcast.po.Orders" id="OrdersUserResultMap">
<!-- 配置映射的订单信息 -->
<!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id
column:订单信息的唯 一标识 列
property:订单信息的唯 一标识 列所映射到Orders中哪个属性
-->
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/> <!-- 配置映射的关联的用户信息 -->
<!-- association:用于映射关联查询单个对象的信息
property:要将关联查询的用户信息映射到Orders中哪个属性
-->
<association property="user" javaType="cn.itcast.po.User">
<!-- id:关联查询用户的唯 一标识
column:指定唯 一标识用户信息的列
javaType:映射到user的哪个属性
-->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/> </association>
</resultMap>
1.3.4.2 statement定义
<!-- 查询订单关联查询用户信息,使用resultmap -->
<select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap">
SELECT
orders.*,
USER.username,
USER.sex,
USER.address
FROM
orders,
USER
WHERE orders.user_id = user.id
</select>
1.3.5 mapper.java
//查询订单关联查询用户使用resultMap
public List<Orders> findOrdersUserResultMap()throws Exception;
1.4 resultType和resultMap实现一对一查询小结
实现一对一查询:
resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。
如果没有查询结果的特殊要求建议使用resultType。
resultMap:需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的属性中。
resultMap可以实现延迟加载,resultType无法实现延迟加载。
2 一对多查询
2.1 需求
查询订单及订单明细的信息。
2.2 sql语句
确定主查询表:订单表
确定关联查询表:订单明细表
在一对一查询基础上添加订单明细表关联即可。
select
orders.*,
user.username,
user.sex,
user.address ,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id
from
orders,
user,
orderdetail
where orders.user_id=user.id and orders.id=orderdetail.orders_id
2.3 分析
使用resultType将上边的 查询结果映射到pojo中,订单信息的就是重复。
要求:
对orders映射不能出现重复记录。
在orders.java类中添加List<orderDetail> orderDetails属性。
最终会将订单信息映射到orders中,订单所对应的订单明细映射到orders中的orderDetails属性中。
aaarticlea/png;base64,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" alt="" />
映射成的orders记录数为两条(orders信息不重复)
每个orders中的orderDetails属性存储了该 订单所对应的订单明细。
2.4 在orders中添加list订单明细属性
public class Orders {
private Integer id;
private Integer userId;
private String number;
private Date createtime;
private String note; //用户信息
private User user; //订单明细
private List<Orderdetail> orderdetails;
2.5 mapper.xml
<select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
SELECT
orders.*,
USER.username,
USER.sex,
USER.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id
FROM
orders,
USER,
orderdetail
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
</select>
2.6 resultMap定义
<!-- 订单及订单明细的resultMap
使用extends继承,不用在中配置订单信息和用户信息的映射
-->
<resultMap type="cn.itcast.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
<!-- 订单信息 -->
<!-- 用户信息 -->
<!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 --> <!-- 订单明细信息
一个订单关联查询出了多条明细,要使用collection进行映射
collection:对关联查询到多条记录映射到集合对象中
property:将关联查询到多条记录映射到cn.itcast.po.Orders哪个属性
ofType:指定映射到list集合属性中pojo的类型
-->
<collection property="orderdetails" ofType="cn.itcast.po.Orderdetail">
<!-- id:订单明细唯 一标识
property:要将订单明细的唯 一标识 映射到cn.itcast.po.Orderdetail的哪个属性
-->
<id column="orderdetail_id" property="id"/>
<result column="items_id" property="itemsId"/>
<result column="items_num" property="itemsNum"/>
<result column="orders_id" property="ordersId"/>
</collection> </resultMap>
2.7 mapper.java
//查询订单(关联用户)及订单明细
public List<Orders> findOrdersAndOrderDetailResultMap() throws Exception;
2.8 小结
mybatis使用resultMap的collection对关联查询的多条记录映射到一个list集合属性中。
使用resultType实现:
将订单明细映射到orders中的orderdetails中,需要自己处理,使用双重循环遍历,去掉重复记录,将订单明细放在orderdetails中。
3 多对多查询
3.1 需求
查询用户及用户购买商品信息。
3.2 sql语句
查询主表是:用户表
关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:
orders、orderdetail、items
select
orders.*,
user.username,
user.sex,
user.address ,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id,
items.name items_name,
items.detail items_detail,
items.price items_price
from
orders,
user,
orderdetail,
items
where orders.user_id=user.id and orders.id=orderdetail.orders_id and orderdetail.items_id = items.id
3.3 映射思路
将用户信息映射到user中。
在user类中添加订单列表属性List<Orders> orderslist,将用户创建的订单映射到orderslist
在Orders中添加订单明细列表属性List<OrderDetail>orderdetials,将订单的明细映射到orderdetials
在OrderDetail中添加Items属性,将订单明细所对应的商品映射到Items
3.4 mapper.xml
<!-- 查询用户及购买的商品信息,使用resultmap -->
<select id="findUserAndItemsResultMap" resultMap="UserAndItemsResultMap">
SELECT
orders.*,
USER.username,
USER.sex,
USER.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id,
items.name items_name,
items.detail items_detail,
items.price items_price
FROM
orders,
USER,
orderdetail,
items
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id
</select>
3.5 resultMap定义
<!-- 查询用户及购买的商品 -->
<resultMap type="cn.itcast.po.User" id="UserAndItemsResultMap">
<!-- 用户信息 -->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/> <!-- 订单信息
一个用户对应多个订单,使用collection映射
-->
<collection property="ordersList" ofType="cn.itcast.po.Orders">
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/> <!-- 订单明细
一个订单包括 多个明细
-->
<collection property="orderdetails" ofType="cn.itcast.po.Orderdetail">
<id column="orderdetail_id" property="id"/>
<result column="items_id" property="itemsId"/>
<result column="items_num" property="itemsNum"/>
<result column="orders_id" property="ordersId"/> <!-- 商品信息
一个订单明细对应一个商品
-->
<association property="items" javaType="cn.itcast.po.Items">
<id column="items_id" property="id"/>
<result column="items_name" property="name"/>
<result column="items_detail" property="detail"/>
<result column="items_price" property="price"/>
</association> </collection>
</collection>
</resultMap>
3.6 mapper.java
//查询用户购买商品信息
public List<User> findUserAndItemsResultMap()throws Exception;
3.7 多对多查询总结
将查询用户购买的商品信息明细清单,(用户名、用户地址、购买商品名称、购买商品时间、购买商品数量)
针对上边的需求就使用resultType将查询到的记录映射到一个扩展的pojo中,很简单实现明细清单的功能。
一对多是多对多的特例,如下需求:
查询用户购买的商品信息,用户和商品的关系是多对多关系。
需求1:
查询字段:用户账号、用户名称、用户性别、商品名称、商品价格(最常见)
企业开发中常见明细列表,用户购买商品明细列表,
使用resultType将上边查询列映射到pojo输出。
需求2:
查询字段:用户账号、用户名称、购买商品数量、商品明细(鼠标移上显示明细)
使用resultMap将用户购买的商品明细列表映射到user对象中。
总结:
使用resultMap是针对那些对查询结果映射有特殊要求的功能,,比如特殊要求映射成list中包括 多个list。
4 resultMap总结
resultType:
作用:
将查询结果按照sql列名pojo属性名一致性映射到pojo中。
场合:
常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页面时,此时可直接使用resultType将每一条记录映射到pojo中,在前端页面遍历list(list中是pojo)即可。
resultMap:
使用association和collection完成一对一和一对多高级映射(对结果有特殊的映射要求)。
association:
作用:
将关联查询信息映射到一个pojo对象中。
场合:
为了方便查询关联信息可以使用association将关联订单信息映射为用户对象的pojo属性中,比如:查询订单及关联用户信息。
使用resultType无法将查询结果映射到pojo对象的pojo属性中,根据对结果集查询遍历的需要选择使用resultType还是resultMap。
collection:
作用:
将关联查询信息映射到一个list集合中。
场合:
为了方便查询遍历关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块及模块下的菜单,可使用collection将模块映射到模块list中,将菜单列表映射到模块对象的菜单list属性中,这样的作的目的也是方便对查询结果集进行遍历查询。
如果使用resultType无法将查询结果映射到list集合中。
项目源码:
链接:http://pan.baidu.com/s/1pL8iokz 密码:j331
六 mybatis高级映射(一对一,一对多,多对多)的更多相关文章
- Mybatis学习总结(六)——高级映射(一对一,一对多,多对多)
一.订单商品数据模型 1.数据库执行脚本 创建数据库表代码: /*Table structure for table `t_user` */ CREATE TABLE t_user ( id INT ...
- MyBatis的关联关系 一对一 一对多 多对多
一对一示例 一个妻子对应一个丈夫 数据库表设计时 在妻子表中添加一个丈夫主键的作为外键 1 对应的JavaBean代码虽然在数据库里只有一方配置的外键,但是这个一对一是双向的关系. Husband实体 ...
- mybatis高级映射(一对一,一对多)
mybatis高级映射 一对一关联映射 需求:查询订单信息,关联查询用户信息(一个订单对应一个用户) (1)通过resultType实现 sql语句: select orders.* , USER.u ...
- 【Mybatis高级映射】一对一映射、一对多映射、多对多映射
前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...
- mybatis 一对一 一对多 多对多
一对一 一对多 多对多
- mybatis 高级映射和spring整合之高级映射(4)
mybatis 高级映射和spring整合之高级映射 ----------------学习结构-------------------- 0.0 对订单商品数据模型进行分析 1.0 高级映射 1.1 一 ...
- JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用
下面把项目中的用户类中有个:一对一 一对多 多对多的注解对应关系列取出来用于学习 说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...
- mybatis 高级映射和spring整合之逆向工程(7)
mybatis 高级映射和spring整合之逆向工程(7) 4.0 逆向工程 4.1 mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行 ...
- mybatis 高级映射和spring整合之与Spring整合(6)
mybatis 高级映射和spring整合之mybatis与Spring整合 3.0 mybatis和spring整合(掌握) 3.1 整合思路 需求spring通过单例方式管理SqlSessionF ...
随机推荐
- poj 3225 线段树+位运算
略复杂的一道题,首先要处理开闭区间问题,扩大两倍即可,注意输入最后要\n,初始化不能随便memset 采用线段树,对线段区间进行0,1标记表示该区间是否包含在s内U T S ← S ∪ T 即将[l, ...
- Android快捷键
Android快捷键ALT+/ :在布局文件中,提示输入的内容Shift + Ctrl + / :注释Shift + Ctrl + \ :解除注释
- 【HTML5】video视频
当前,video 元素支持三种视频格式: 格式 IE Firefox Opera Chrome Safari Ogg No 3.5+ 10.5+ 5.0+ No MPEG 4 9.0+ No No 5 ...
- PHP 读取逐条数据库记录,以及提交下拉菜单选项
<?php $db_host=localhost; //MYSQL服务器名$db_user=root; //MYSQL用户名$db_pass="******"; //MYSQ ...
- 用indexOf判断设备
通过userAgent去判断,先判断是否为移动端,可以判断是iOS终端和Android终端,也可以具体到应用进行判断微信,微博,qq访问. <!DOCTYPE html> <html ...
- BZOJ2610 : [Poi2003]Monkeys
考虑离线,将删边操作倒过来变成加边,等价于询问每个点什么时候与1连通 使用并查集维护,每次合并时如果有一边是1所在连通块,就把另一边的所有点的答案更新 #include<cstdio> # ...
- 修改setInterval作用域
Hello,今天和大家分享如何修改setInterval作用域. 0.引子 最近在做一个项目的时候需要开发一个图片轮播显示的组件,在实现过程中遇到了关于setInterval作用域的问题. Slide ...
- TYVJ P1020 寻找质因数
做题记录:2016-08-08 描述 给出N个数字,试求质因数最大的数字. 输入格式 第一行,一个整数N,表示数字个数.接下来N行,每行一个整数A_i,表示给出的数字. 输出格式 一个整数,表示质因数 ...
- 【COGS】147. [USACO Jan08] 架设电话线(二分+spfa)
http://cojs.tk/cogs/problem/problem.php?pid=147 学到新姿势了orz 这题求的是一条1-n的路径的最大路径最小. 当然是在k以外的. 我们可以转换一下. ...
- mysql 截取指定的两个字符串之间的内容(locate,substring)
如需转帖,请写明出处 http://blog.csdn.net/slimboy123/archive/2009/07/30/4394782.aspx 今天我同事在用mysql的时候,需要对一个字符串中 ...