文档章节

MyBatis 之 mapper.xml(三)

pradosoul
 pradosoul
发布于 2015/09/14 17:41
字数 579
阅读 113
收藏 8
  1. 一对多套一对多

    Items类:

public class Items {
	private int itemId;
	private String itemName;
	private Float itemPrice;
	private String itemDetail;
	public int getItemId() {
		return itemId;
	}
	public void setItemId(int itemId) {
		this.itemId = itemId;
	}
	public String getItemName() {
		return itemName;
	}
	public void setItemName(String itemName) {
		this.itemName = itemName;
	}
	public Float getItemPrice() {
		return itemPrice;
	}
	public void setItemPrice(Float itemPrice) {
		this.itemPrice = itemPrice;
	}
	public String getItemDetail() {
		return itemDetail;
	}
	public void setItemDetail(String itemDetail) {
		this.itemDetail = itemDetail;
	}
	@Override
	public String toString() {
		return "Items [itemId=" + itemId + ", itemName=" + itemName
				+ ", itemPrice=" + itemPrice + ", itemDetail=" + itemDetail
				+ "]";
	}
}

<!-- 一对多套一对多:用户以及用户的订单和订单明细信息 -->
<resultMap type="user" id="orderDetailInOrderInUserMap">
  <!-- 查询结果集的主键 -->
  <id property="userId" column="userId"/>
  <result property="username" column="username"/>
  <result property="sex" column="sex"/>
  <result property="birthday" column="birthday"/>
  	
  <collection property="orders" ofType="mybatis_b.model.Order">
  <!-- 一对多的时候,id 不能缺省 -->
      <id property="orderId" column="orderId"/>
      <result property="orderNumber" column="orderNumber"/>
      <!-- collect中再嵌套 collect -->
      <collection property="orderDetails" ofType="mybatis_b.model.OrderDetail">
          <id property="orderDetailId" column="orderDetailId"/>
  	  <result property="order_id" column="order_id"/>
          <result property="item_id" column="item_id"/>
  	  <result property="item_number" column="item_number"/>
          <result property="item_price" column="item_price"/>
      </collection>
  	  
  </collection>
</resultMap>
  
<!-- 一对多套一对多:用户以及用户的订单和订单明细信息 -->
<select id="findUserAndOrdersAndDetails" resultMap="orderDetailInOrderInUserMap">
  select users.userid, users.username, users.birthday, users.sex, orders.orderid, 
  orders.ordernumber, orderdetail.* from users, orders, orderdetail 
  where users.userid = orders.user_id and orders.orderid = orderdetail.order_id
</select>

        java代码调用:

//一对多套一对多:用户以及用户的订单和订单明细信息
@Test
public void testFindUserAndOrdersAndDetails() throws Exception {
	//获取SqlSession
	SqlSession sqlSession = sqlSessionFactory.openSession();
	//指定 mapper 接口的类型,MyBatis通过动态代理的方式实现mapper接口
	OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
		
	List<User> list = orderMapper.findUserAndOrdersAndDetails();
		
	System.out.println(list.size());
	Iterator<User> iterator = list.iterator();
	while (iterator.hasNext()) {
		User order = (User) iterator.next();
		System.out.println(order);
	}
}

        执行结果:

  1. 多对多(manyToMany)

<!-- 多对多:查询用户,用户下的订单和订单明细以及商品信息 -->
  <resultMap type="user" id="itemInOrderDetailInOrderInUserMap">
  	<!-- 查询结果集的主键 -->
  	<id property="userId" column="userId"/>
  	<result property="username" column="username"/>
  	<result property="sex" column="sex"/>
  	<result property="birthday" column="birthday"/>
  	
  	<collection property="orders" ofType="mybatis_b.model.Order">
  	  <!-- 一对多的时候,id 不能缺省 -->
  	  <id property="orderId" column="orderId"/>
  	  <result property="orderNumber" column="orderNumber"/>
  	  
  	  <collection property="orderDetails" ofType="mybatis_b.model.OrderDetail">
  	  	<id property="orderDetailId" column="orderDetailId"/>
  	  	<result property="order_id" column="order_id"/>
  		<result property="item_id" column="item_id"/>
  		<result property="item_number" column="item_number"/>
  		<result property="item_price" column="item_price"/>
  		<association property="item" javaType="mybatis_b.model.Items">
  		  <id property="itemId" column="itemId"/>
  		  <result property="itemName" column="itemName"/>
  		  <result property="itemPrice" column="itemPrice"/>
  		  <result property="itemDetail" column="itemDetail"/>
  		</association>
  	  </collection>
  	</collection>
  </resultMap>
  <!-- 多对多:查询用户,用户下的订单和订单明细以及商品信息 -->
<select id="findUserAndOrdersDetailsAndItems" resultMap="itemInOrderDetailInOrderInUserMap">
  select users.userid, users.username, users.birthday, users.sex, orders.orderid, 
  orders.ordernumber, orderdetail.*, items.itemname, items.itemprice, items.itemdetail 
  from users, orders, orderdetail, items where users.userid = orders.user_id
  and orders.orderid = orderdetail.order_id and items.itemid = orderdetail.item_id
</select>

        java代码调用同上,只需修改:

List<User> list = orderMapper.findUserAndOrdersDetailsAndItems();

        执行结果:

© 著作权归作者所有

共有 人打赏支持
pradosoul
粉丝 6
博文 40
码字总数 37445
作品 0
闵行
程序员
私信 提问
Mybatis 入门案例 2 ---- mapper 代理的方式

我们只需要编写DAO接口和mapper.xml文件即可,DAO接口实现对象由mybatis自动生成代理对象。 如: 一、为什么不使用原始的DAO方式开发呢? 1、dao的实现类中存在重复代码,整个mybatis操作的过...

故新
2017/11/07
0
0
MyBatis初探一

一、MyBatis介绍 mybatis(持久层框架3.2.6 or 3.2.7)简单执行流程 >1.SqlMapConfig.xml(全局配置文件),配置数据源,事务和运行环境等 >2.配置映射文件(编写SQL语句):mapper.xml... >3.SqlSes...

AAASSSSddd
2016/04/02
64
0
Spring+mybatis测试项目总结

1.项目目的 a.通过Spring+Mybatis实现通过web访问达成mySql的操作 b.理解Spring+Mybatis的配置 c.理解maven对项目的管理 2.配置文件 a.采用maven约定结构,src/main/java、src/main/resource...

飓风2000
2014/07/26
0
0
Mybatis 通用Crud-设计思路

更新日志 <!-- 2016-11-13更新 start --> 1 新增批量操作数据方法:批量插入,根据条件删除,根据条件更新指定的列名-字段值。 2 新增高级查询方法:可设置查询列,查询条件,排序,分页。 ...

LittleNewbie
2016/11/12
417
0
MyBatis开发dao方法

一 SqlSession使用范围 SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将SqlSessionFactoryBuilder当作一个工具类使用即可,不需要使用单例管理Sql...

Bbigbug
2017/11/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

毕业季,我的Linux求职之路

秋招终于告一段落了,本硕的七年求学之路也快画上了句号。回首求职的这一段日子,痛苦并快乐着。感谢所有陪伴着我走过这一段路程的同学,所有的辛酸都值得铭记。求职的过程中在网上看了很多的...

linux-tao
21分钟前
0
0
Mybatis动态语句,if test字符串不用进行null判断

描述:根据creator列进行过滤获取image表的数据。 代码如下: @Select("<script>" + " select * from image " + " <where>" + " <if test='isAllCreator != 1'> ......

Coder顾
40分钟前
0
0
写了2年python,知道 if __name__ == '__main__' 什么意思吗?

相信刚接触Python的你一定有过如此经历,把所有的代码都写在 if __name__ == '__main__'下,因为有人告诉你,这样比较符合 Pythonista 的代码风格。 殊不知这段代码的意义并不是一定要存在于...

上海小胖
49分钟前
4
0
zkong笔记18

这两天的主要工作: Elasticsearch初探 接受ESL的超管功能 ERP开源系统调研

莫在全
52分钟前
1
0
tpcc-mysql的安装和使用

# tpcc-mysql的安装和使用 前言 公司要做Mysql方面性能调优,大概浏览一下Mysql一些参数设置后,想开始尝试进行调整测试。但发现一个问题,测试缺乏标准。所以需要一些基准测试标准或者工具。...

紫暘
56分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部