Mybatis的一对多,多对一以及延迟加载

来源:互联网 发布:智汇诚网络 编辑:程序博客网 时间:2024/05/01 22:13

一对多查询

实体类

package com.zucc.model;import java.util.List;public class District{    private Integer did;    private String dname;        private List<Street> streets;    public Integer getDid() {        return did;    }    public void setDid(Integer did) {        this.did = did;    }    public String getDname() {        return dname;    }    public void setDname(String dname) {        this.dname = dname;    }<span style="white-space:pre"></span>public List<Street> getStreets() {<span style="white-space:pre"></span>return streets;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>public void setStreets(List<Street> streets) {<span style="white-space:pre"></span>this.streets = streets;<span style="white-space:pre"></span>}    }

配置文件

<resultMap type="com.zucc.model.District" id="districtResultMap">          <id column="did" property="id"/>          <result column="dname" property="name"/>          <collection property="streets" ofType="cn.wd.entity.Street" column="district_id">              <id column="sid" property="id"/>              <result column="sname" property="name"/>          </collection>  </resultMap>  <select id="findAllDistrictById" parameterType="int" resultMap="districtResultMap" >          select d.*,s.* from district d,street s where s.district_id=d.did and d.did=#{id}     </select>


多对一

实体类

package com.zucc.model;public class Street {    private Integer sid;    private String sname;    private Integer disId;        private District district;    public Integer getSid() {        return sid;    }    public void setSid(Integer sid) {        this.sid = sid;    }    public String getSname() {        return sname;    }    public void setSname(String sname) {        this.sname = sname;    }    public Integer getDisId() {        return disId;    }    public void setDisId(Integer disId) {        this.disId = disId;    }public District getDistrict() {return district;}public void setDistrict(District district) {this.district = district;}        }

配置文件

<resultMap type="com.zucc.model.Street" id="StreetResultMap">          <id column="sid" property="sid"/>          <result column="sname" property="sname"/>          <association property="district" javaType="com.zucc.model.District">              <id column="did" property="did"/>              <result column="dname" property="dname"/>          </association>      </resultMap>  <select id="findStreetById" parameterType="int" resultMap="StreetResultMap">          select d.*,s.* from district d,street s where d.did=s.district_id and s.sid=#{id}       </select>  

总结:

在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。

使用association和collection完成一对一和一对多高级映射。

association:将关联查询信息映射到一个pojo对象中。

collection:将关联映射信息映射到一个集合中。


延迟加载

延迟加载(Lazy Load)实现的功能很好理解,就是在数据与对象进行Mapping操作时,只有当真正使用该对象时,才进行Mapping操作,以减少不必要的数据库查询开销,从而提升了程序的效率。

首先进行配置

<!-- 全局配置参数,需要时再设置 --><settings><!-- 打开延迟加载的开关 --><setting name="lazyLoadingEnabled" value="true" /><!-- 将积极加载改为消极加载即按需加载 --><setting name="aggressiveLazyLoading" value="false" /></settings>
在Street的配置文件中修改
<resultMap type="com.zucc.model.Street" id="StreetResultMapLazyLoadingMap">          <id column="sid" property="id"/>          <result column="sname" property="name"/>          <association property="district" javaType="com.zucc.model.District"        select="cn.wd.dao.DistrictMapper.findAllDistrictById" column="district_id">          </association>  </resultMap>  <select id="selectStreetLazyLoading" parameterType="int" resultMap="StreetResultMapLazyLoadingMap">    <span style="white-space:pre"></span>select * from street where sid=#{id}    </select>
这样一来,当你不需要使用District的对象时就不会进行处理,只有在你需要使用时才会处理










0 0
原创粉丝点击