mybatis-mapper的复杂映射

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中还可以配置一些属性名和属性值 -->
		<!-- properties name="jdbc.driver" value="" -->
	</properties>
	<settings>
		<!-- 打开延迟加载的开关 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<!-- 将积极加载改为消极加载,即按需加载 -->
		<setting name="aggressiveLazyLoading" value="false"/>
		<!-- 开启二级缓存 -->
		<setting name="cacheEnabled" value="true"/>
	</settings>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/>
			<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>
		<mapper resource="mapper/mapper.xml"/>
	</mappers>
</configuration>
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">

<!-- namesoace命名空间,作用就是对sql进行分类管理,理解sql隔离 
注意:使用mapper代理方法开发,namespace有特殊重要的作用
-->
<mapper namespace="com.itcast.mybatis.mapper.new_po_mapper">
	<!-- 开启本mapper的namespace下的二级缓存 -->
	<cache/>
	

	<resultMap id="OrderUserResultMap" type="com.itcast.mybatis.po.orders">
		<!-- 配置映射的订单信息 -->
		<!-- id:指定查询劣种的唯一表示,订单信息中的唯一标示如果由多个列组成,则配置多个id
			column:订单信息的唯一标示列
			property:订单信息的唯一标示列所映射到哪个属性中
		 -->
		<id column="id" property="id"/>
		<result column="users_id" property="users_id"/>
		<result column="number" property="number"/>
		<result column="createtime" property="createtime"/>
		<result column="note" property="note"/>
		<!-- 配置映射的关联用户信息 -->
		<!-- association:用于映射管轮查询单个对象的信息
			property:要将关联查询的用户信息映射到Orders中哪个属性
		 -->
		<association property="user" javaType="com.itcast.mybatis.po.users">
			<!-- 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>
	
	
	<!-- 订单几订单明细的resultMap
		使用extends继承,不用在配置订单信息和用户信息的映射
	 -->
	<resultMap id="OrdersAndOrderDetailResultMap" type="com.itcast.mybatis.po.orders" extends="OrderUserResultMap">

		
		<!-- 订单明细信息
		一个订单关联查询出了多条明细,要使用collection进行映射
		 collection:对关联查询到的多条记录映射到集合对象中
		 property:将关联插叙到多条记录映射到com.itcast.mybatis.po.orders中的哪个属性
		 ofType:指定映射到集合属性中pojo的类型
		 -->
		 <collection property="Orderdetail" ofType="com.itcast.mybatis.po.orderdetail">
		 	<!-- id:订单明细唯一标识 -->
		 	<id column="orderdetail_id" property="id"/>
		 	<result column="items_id" property="items_id"/>
		 	<result column="items_num" property="items_num"/>
		 	<result column="orders_id" property="orders_id"/>
		 </collection>
	</resultMap>
	
	<!-- 查询用户及购买的商品 -->
	<resultMap id="UserAndItemsResultMap" type="com.itcast.mybatis.po.users">
		<id column="users_id" property="id"/>
		<result column="username" property="username"/>
		<result column="sex" property="sex"/>
		<result column="address" property="address"/>
		
		<!-- 订单信息
		一个用户对应多个订单,使用collection映射
		 -->
		 <collection property="ordersList" ofType="com.itcast.mybatis.po.orders">
		 	<id column="id" property="id"/>
		 	<result column="users_id" property="users_id"/>
		 	<result column="number" property="number"/>
		 	<result column="createtime" property="createtime"/>
		 	<result column="note" property="note"/>
		 	
		 	<!-- 订单明细
		 	一个订单包括多个明细
		 	 -->
		 	 <collection property="Orderdetail" ofType="com.itcast.mybatis.po.orderdetail">
		 	 	<id column="orderdetail_id" property="id"/>
		 	 	<result column="items_id" property="items_id"/>
		 	 	<result column="items_num" property="items_num"/>
		 	 	<result column="orders_id" property="orders_id"/>
		 	 
		 	 	<!-- 商品信息
		 	 	一个订单明细对应一个商品
		 	 	 -->
		 	 	 <association property="Items" javaType="com.itcast.mybatis.po.items">
		 	 	 	<id column="items_id" property="id"/>
		 	 	 	<result column="name" property="name"/>
		 	 	 	<result column="detail" property="detail"/>
		 	 	 	<result column="price" property="price"/>
		 	 	 </association>
		 	 </collection>
		 </collection>
		 
	</resultMap>
	
	
	
	<select id="find_all" resultMap="UserAndItemsResultMap">
					select orders.*,users.username,users.sex,users.address,orderdetail.id  orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id
				,items.name,items.detail,items.price
		from orders,users,orderdetail,items
		where orders.users_id=users.id and orderdetail.orders_id=orders.id and items_id=items.id
	</select>
	
	
	
	<!-- 延迟加载的resultMap -->
	<resultMap type="com.itcast.mybatis.po.orders" id="findOrdersuserLazyLoading">
		<!-- 对订单信息进行映射配置 -->
		<id column="id" property="id"/>
		<result column="users_id" property="users_id"/>
		<result column="number" property="number"/>
		<result column="createtime" property="createtime"/>
		<result column="note" property="note"/>
		<!-- 对用户信息进行延迟加载 
		select:指定延迟加载所需要执行的statement的id(是根据user_id查询用户信息的statement)
		column:订单信息中关联用户信息查询的列,是user_id
		关联查询的sql理解为:
		select orders.*,
		(select username from users where orders.users_id=users.id) username,
		(select sex from users where orders.users_id=users.id)sex 
		from orders
		
		-->
		<association property="user" javaType="com.itcast.mybatis.po.users" select="findUserById" column="users_id">
			<!-- 实现对用户信息进行延迟加载 -->
			
		</association>
		
	</resultMap>
	
	
	<!-- 查询订单关联查询用户,用户信息需要延迟加载 -->
	<select id="findOrdersuserLazyLoading" resultMap="findOrdersuserLazyLoading">
		select * from orders
	</select>
	
	<select id="findUserById" parameterType="int" resultType="com.itcast.mybatis.po.users">
		select * from users where id=#{id}
	</select>
</mapper>
orders.java
package com.itcast.mybatis.po;

import java.util.Date;
import java.util.List;

public class orders {
	private int id;
	private int users_id;
	private String number;
	private Date createtime;
	private String note;
	
	//用户信息
	private users user; 
	
	//订单明细
	private List<orderdetail> Orderdetail;
	
	
	public List<orderdetail> getOrderdetail() {
		return Orderdetail;
	}
	public void setOrderdetail(List<orderdetail> orderdetail) {
		Orderdetail = orderdetail;
	}
	public users getUser() {
		return user;
	}
	public void setUser(users user) {
		this.user = user;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getUsers_id() {
		return users_id;
	}
	public void setUsers_id(int users_id) {
		this.users_id = users_id;
	}
	public String getNumber() {
		return number;
	}
	public void setNumber(String number) {
		this.number = number;
	}
	public Date getCreatetime() {
		return createtime;
	}
	public void setCreatetime(Date createtime) {
		this.createtime = createtime;
	}
	public String getNote() {
		return note;
	}
	public void setNote(String note) {
		this.note = note;
	}
}
users.java
package com.itcast.mybatis.po;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

public class users implements Serializable {
private int id;
private String username;
private Date birthday;
private String sex;
private String address;

//用户创建的订单列表
private List<orders> ordersList;

public List<orders> getOrdersList() {
	return ordersList;
}
public void setOrdersList(List<orders> ordersList) {
	this.ordersList = ordersList;
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getUsername() {
	return username;
}
public void setUsername(String username) {
	this.username = username;
}
public Date getBirthday() {
	return birthday;
}
public void setBirthday(Date birthday) {
	this.birthday = birthday;
}
public String getSex() {
	return sex;
}
public void setSex(String sex) {
	this.sex = sex;
}
public String getAddress() {
	return address;
}
public void setAddress(String address) {
	this.address = address;
}
}
items.java
package com.itcast.mybatis.po;

import java.util.Date;

public class items {
	private int id;
	private String name;
	private float price;
	private String detail;
	private String pic;
	private Date createtiome;
	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 float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
	public String getDetail() {
		return detail;
	}
	public void setDetail(String detail) {
		this.detail = detail;
	}
	public String getPic() {
		return pic;
	}
	public void setPic(String pic) {
		this.pic = pic;
	}
	public Date getCreatetiome() {
		return createtiome;
	}
	public void setCreatetiome(Date createtiome) {
		this.createtiome = createtiome;
	}
}
orderdetail.java
package com.itcast.mybatis.po;

public class orderdetail {
	private int id;
	private int orders_id;
	private int items_id;
	private int items_num;
	
	//明细所对应的商品信息
	private items Items;
	
	
	
	public items getItems() {
		return Items;
	}
	public void setItems(items items) {
		Items = items;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getOrders_id() {
		return orders_id;
	}
	public void setOrders_id(int orders_id) {
		this.orders_id = orders_id;
	}
	public int getItems_id() {
		return items_id;
	}
	public void setItems_id(int items_id) {
		this.items_id = items_id;
	}
	public int getItems_num() {
		return items_num;
	}
	public void setItems_num(int items_num) {
		this.items_num = items_num;
	}
}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值