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;
}
}