mybatis-mapper的复杂映射

来源:互联网 发布:南京大学网络教育2017 编辑:程序博客网 时间:2024/06/04 21:35
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 mapperPUBLIC "-//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:指定查询劣种的唯一表示,订单信息中的唯一标示如果由多个列组成,则配置多个idcolumn:订单信息的唯一标示列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.pricefrom orders,users,orderdetail,itemswhere 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;}}






原创粉丝点击