文档章节

Mbatis高级映射

 小小小施爷
发布于 2017/09/11 10:27
字数 894
阅读 42
收藏 1

1 一对一映射

使用resultMap映射的方式:

一对一resultMap

								<!-- 一对一映射 -->
<!-- 订单关联查询的resultMap 
	将整个结果映射到com.shi.POJO的Orders中
-->
<resultMap type="com.shi.POJO.Orders" id="ordersUserResultMap">
 <!-- 配置映射的订单信息 -->
	<!-- id:指定查询列中的唯一标识,订单信息中的唯一标识,如果有多个列组成唯一标识,配置多个id 
		column:指定查询列中的唯一标识,如果有多个列组成唯一标识,配置多个id
		property:订单信息的唯一标识 ,列所映射到orders中哪个属性
	-->
	<id column="id" property="id"/>
	<result column="user_id" property="user_id"/>
	<result column="number" property="number"/>
	<result column="createtime" property="createtime"/>
	<result column="note" property="note"/>
 <!-- 配置映射的关联的用户信息 -->
 	<!-- association:用于映射关联查询单个对象的信息
 	propety: 要将关联查选的用户信息映射到Orders中哪个属性 -->
 	<association property="user" javaType="com.shi.POJO.User">
 		<!-- id :关联查询用户的唯一标识
 		column:指定唯一标识用户信息的列
 		property:映射到user的哪个属性	-->
 		<id column="user_id" property="id"/>
 		<result column="username" property="username"/>
 		<result column="birthday" property="birthday"/>
 		<result column="sex" property="sex"/>
 		<result column="address" property="address"/>
 	</association>
</resultMap>

<select id="findOrderCastomResultMap" resultMap="ordersUserResultMap">
	SELECT orders.*,user.username,user.sex,user.birthday FROM orders,USER WHERE
	orders.user_id=user.id
</select>

对resultType 和 resultMap 的总结:

输入图片说明

2 一对多映射

使用resultMap实现一对多映射:

						<!-- ================一对多映射================ -->
	
	<!-- 一对多映射查询  查询订单 ,用户信息 及订单明细表 
	 -->
	 <!-- rusultMap配置      注意:如果上面有重复的东西 可以使用  extends="" -->
	 <resultMap type="com.shi.POJO.Orders" id="OrdersAndOrderDetailResultMap" >
<!-- 订单信息 -->
	 	<id column="id" property="id"/>
	 	<result column="user_id" property="user_id"/>
	 	<result column="number" property="number"/>
	 	<result column="createtime" property="createtime"/>
	 	<result column="note" property="note"/>
<!-- 用户信息 -->
	 	<association property="user" javaType="com.shi.POJO.User">
	 		<id column="user_id" property="id"/>
	 		<result column="username" property="username"/>
	 		<result column="birthday" property="birthday"/>
	 		<result column="sex" property="sex"/>
	 		<result column="address" property="address"/>
	 	</association>
<!-- 订单明细信息 -->
	 	<!-- 
	 		一个订单关联查询出来了多条明细,所以要使用collection进行映射
	 		collection:对查询到多条记录映射到集合对象中去
	 		property:将关联查询到的多条记录映射到该orderdetailList属性中去
	 		ofType:指定映射到list集合属性中pojo的类型
	 	 -->
	 	 <collection property="orderdetailList" ofType="com.shi.POJO.Orderdetail">
	 	 	<!-- id:订单明细表的唯一标识
	 	 	property:要将订单明细的唯一标识映射到com.shi.POJO.Orderdetail 的哪个属性 -->
	 	 	<id column="orderdetail_id" property="id"/>
	 	 	<result column="items_id" property="items_id"/>
	 	 	<result column="orders_id" property="orders_id"/>
	 	 	<result column="items_num" property="items_num"/>
	 	 </collection>
	 	
	 </resultMap>	 
	 <!-- sql语句 -->
	<select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
		SELECT
			orders.*,
			user.username,
			user.sex,
			user.address,
			orderdetail.id orderdetail_id, <!-- 注意:这里需要collection中的id  所以 不能和上面属性冲突 -->
			orderdetail.items_id,
			orderdetail.orders_id,
			orderdetail.items_num
		FROM
			orders,
			USER,
			orderdetail
		WHERE 
			orders.user_id=user.id AND orderdetail.orders_id=orders.id
	</select>

对resultType 和 resultMap的总结:(一对多建议使用 resultMap

输入图片说明

3 多对多查询

映射思路:

输入图片说明

	
							<!-- =================多对多查询=============== -->
		<!-- 现在执行多对多查询  查询用户信息和商品信息 进行关联-->
	<!-- resultMap映射 -->
		<resultMap type="com.shi.POJO.User" id="UserAndItemsReusltMap">
			<!-- 对用户信息进行映射 -->
			<id column="user_id" property="id"/>
			<result column="username" property="username"/>
			<result column="birthday" property="birthday"/>
			<result column="sex" property="sex"/>
			<result column="address" property="address"/>
			
			<!-- 对订单进行映射   ######一对多映射######-->
			<collection property="orders" ofType="com.shi.POJO.Orders">
				<id column="id" property="id"/>
				<result column="user_id" property="user_id"/>
				<result column="number" property="number"/>
				<result column="createtime" property="createtime"/>
				<result column="note" property="note"/>
				
				<!-- 对订单细节进行映射 ######一对多映射######-->
				<collection property="orderdetailList" ofType="com.shi.POJO.Orderdetail">
					<id column="" property=""/>
					<result column="orderdetail_id" property="id"/>
					<result column="orders_id" property="orders_id"/>
					<result column="items_id" property="items_id"/>
					<result column="items_num" property="items_num"/>
					
					<!-- 对商品表进行映射  ######一对一映射###### -->
					<association property="items" javaType="com.shi.POJO.Items">
						<id column="items_id" property="id"/>
						<result column="items_name" property="name"/>
						<result column="items_price" property="price"/>
					</association>
				</collection>
			</collection>
		</resultMap>
	<!-- sql语句 -->
	<select id="findUserAndItemsReusltMap" resultMap="UserAndItemsReusltMap">
		SELECT 
			orders.*,
			user.username,
			user.sex,
			user.address,
			orderdetail.id orderdetail_id,
			orderdetail.items_id,
			orderdetail.orders_id,
			orderdetail.items_num,
			items.name items_name,
			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>

总结:

输入图片说明

© 著作权归作者所有

共有 人打赏支持
上一篇: mybatis的延迟加载
下一篇: 数据库模型分析
粉丝 4
博文 135
码字总数 96189
作品 0
合肥
私信 提问
Mybatis: sql中if 判断的坑

“原创精选,转载注明出处,三克油” 前言 Mbatis 的script标签可以支持很多动态SQL查询、在使用if test判断的时候、会有一些意向不到的坑 正文 我们一般在Mbatis中做update更新时、都会加上...

一朝一夕
2016/11/24
0
0
mybatis拦截器能否跳过sql的db执行逻辑

业务中需要使用sql语句语法,但是最终不会在db上去执行,需要执行其它的特殊逻辑。但是想使用mbatis的那套sql接口方式来管理sql语句。 所有是否可以通过拦截器在拿到完整的sql语句之后跳过默...

yinshuang100
2015/08/23
290
1
Mybatis Plus 2.0 Beta 发布,支持 ActiveRecord

Mybatis-Plus是一款MyBatis的增强 crud 工具包,简化 增 删 改 查 操作。启动加载 XML 配置时注入单表 SQL 操作 ,为简化开发工作、提高生产率而生。Mybatis-Plus 启动注入非拦截实现、性能更...

青苗
2016/11/07
3.3K
22
spring和mbatis的配置问题

我用的是eclipse spring版本是3.2.4 mybatis3.2.2 8.1的操作系统 这我的是spring的配置文件

Jian~
2015/02/02
644
4
Windows 防火墙上也有端口映射功能

Windows 防火墙上也有端口映射功能 端口映射可以在路由器上设置,可以在代理服务器上设置,其实 Windows Server 2003/XP/2000 的防火墙上也有端口映射功能。      假如要进行端口映射的计...

心心
2012/12/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

技术工坊|如何开发一款以太坊钱包(深圳)

【好消息!】HiBlock区块链技术工坊已经成功举办了26期,其中北京1期,西安1期,成都2期,上海22期。经常有社区的小伙伴问定期举办技术工坊的除了上海以外,其他城市有没有?现在区块链技术工...

HiBlock
昨天
1
0
Redis 梳理笔记

安装 安装gccyum install gcc-c++下载传输到服务器上解压tar -xzvf *.tar.gzcd redis-3.2.9编译make安装 make PREFIX=/usr/local/redis install将配置文件拷贝出来cp redis...

晨猫
昨天
0
0
PyCharm flask 'Debug mode off' 调试模式关闭的解决方法

flask的几种debug模式的方法 # 1.app.run 传参debug=trueapp.run(debug=True) #2 设置app的配置app = Flask(__name__)app.config['DEBUG'] = True #3 配置文件方式# config.py中添加d...

yimingkeji
昨天
1
0
聊聊storm TridentWindowManager的pendingTriggers

序 本文主要研究一下storm TridentWindowManager的pendingTriggers TridentBoltExecutor.finishBatch storm-core-1.2.2-sources.jar!/org/apache/storm/trident/topology/TridentBoltExecut......

go4it
昨天
1
0
java实现多线程两种基本方式

我们在开发当中经常会使用到多线程,这里我们来写两个小案例通过最基本的两种方式继承Thread类或实现Runnable接口来实现一个多线程。 继承Thread类 我们可以通过继承Thread类,并重写run()方...

王子城
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部