一对多查询
实体类
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的对象时就不会进行处理,只有在你需要使用时才会处理