mybatis的延迟加载、一级缓存、二级缓存

来源:互联网 发布:新手怎么样开淘宝店 编辑:程序博客网 时间:2024/05/31 18:46

1.一级缓存没什么可说的,默认开启。

2.二级缓存:

1.  mybatis配置文件配置: <setting name="cacheEnabled" value="true" />

2. public class Department implements Serializable,缓存类实现序列化接口 .

3. mapper映射文件添加<cache />.

详情请看:


3.延迟加载,这个我举例说明(一个部门有多个员工):

package com.cn.su.entity;import java.io.Serializable;import java.util.List;/** * 部门 * @author su * */@SuppressWarnings("serial")public class Department implements Serializable{    private Integer id;    private String dtName;    private String dtCreatetime;    private String dtBz;        private List<Employee> employeeList;public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getDtName() {        return dtName;    }    public void setDtName(String dtName) {        this.dtName = dtName == null ? null : dtName.trim();    }    public String getDtCreatetime() {        return dtCreatetime;    }    public void setDtCreatetime(String dtCreatetime) {        this.dtCreatetime = dtCreatetime == null ? null : dtCreatetime.trim();    }    public String getDtBz() {        return dtBz;    }    public void setDtBz(String dtBz) {        this.dtBz = dtBz == null ? null : dtBz.trim();    }public List<Employee> getEmployeeList() {return employeeList;}public void setEmployeeList(List<Employee> employeeList) {this.employeeList = employeeList;}@Overridepublic String toString() {return "Department [id=" + id + ", dtName=" + dtName+ ", dtCreatetime=" + dtCreatetime + ", dtBz=" +dtBz+"]";}}


package com.cn.su.entity;import java.io.Serializable;/** * 员工 * @author su * */@SuppressWarnings("serial")public class Employee implements Serializable{    private Integer id;    private String emSerialnumber;    private String emName;    private String emSex;    private Integer emAge;    private String emIdcard;    private String emBorn;    private String emNation;    private String emMarriage;    private String emVisage;    private String emAncestralhome;    private String emTel;    private String emAddress;    private String emAfterschool;    private String emSpeciality;    private String emCulture;    private String emStartime;    private Integer emDepartmentid;    private String emTypework;    private String emCreatime;    private String emCreatename;    private String emBz;        private Department department;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getEmSerialnumber() {        return emSerialnumber;    }    public void setEmSerialnumber(String emSerialnumber) {        this.emSerialnumber = emSerialnumber == null ? null : emSerialnumber.trim();    }    public String getEmName() {        return emName;    }    public void setEmName(String emName) {        this.emName = emName == null ? null : emName.trim();    }    public String getEmSex() {        return emSex;    }    public void setEmSex(String emSex) {        this.emSex = emSex == null ? null : emSex.trim();    }    public Integer getEmAge() {        return emAge;    }    public void setEmAge(Integer emAge) {        this.emAge = emAge;    }    public String getEmIdcard() {        return emIdcard;    }    public void setEmIdcard(String emIdcard) {        this.emIdcard = emIdcard == null ? null : emIdcard.trim();    }    public String getEmBorn() {        return emBorn;    }    public void setEmBorn(String emBorn) {        this.emBorn = emBorn == null ? null : emBorn.trim();    }    public String getEmNation() {        return emNation;    }    public void setEmNation(String emNation) {        this.emNation = emNation == null ? null : emNation.trim();    }    public String getEmMarriage() {        return emMarriage;    }    public void setEmMarriage(String emMarriage) {        this.emMarriage = emMarriage == null ? null : emMarriage.trim();    }    public String getEmVisage() {        return emVisage;    }    public void setEmVisage(String emVisage) {        this.emVisage = emVisage == null ? null : emVisage.trim();    }    public String getEmAncestralhome() {        return emAncestralhome;    }    public void setEmAncestralhome(String emAncestralhome) {        this.emAncestralhome = emAncestralhome == null ? null : emAncestralhome.trim();    }    public String getEmTel() {        return emTel;    }    public void setEmTel(String emTel) {        this.emTel = emTel == null ? null : emTel.trim();    }    public String getEmAddress() {        return emAddress;    }    public void setEmAddress(String emAddress) {        this.emAddress = emAddress == null ? null : emAddress.trim();    }    public String getEmAfterschool() {        return emAfterschool;    }    public void setEmAfterschool(String emAfterschool) {        this.emAfterschool = emAfterschool == null ? null : emAfterschool.trim();    }    public String getEmSpeciality() {        return emSpeciality;    }    public void setEmSpeciality(String emSpeciality) {        this.emSpeciality = emSpeciality == null ? null : emSpeciality.trim();    }    public String getEmCulture() {        return emCulture;    }    public void setEmCulture(String emCulture) {        this.emCulture = emCulture == null ? null : emCulture.trim();    }    public String getEmStartime() {        return emStartime;    }    public void setEmStartime(String emStartime) {        this.emStartime = emStartime == null ? null : emStartime.trim();    }    public Integer getEmDepartmentid() {        return emDepartmentid;    }    public void setEmDepartmentid(Integer emDepartmentid) {        this.emDepartmentid = emDepartmentid;    }    public String getEmTypework() {        return emTypework;    }    public void setEmTypework(String emTypework) {        this.emTypework = emTypework == null ? null : emTypework.trim();    }    public String getEmCreatime() {        return emCreatime;    }    public void setEmCreatime(String emCreatime) {        this.emCreatime = emCreatime == null ? null : emCreatime.trim();    }    public String getEmCreatename() {        return emCreatename;    }    public void setEmCreatename(String emCreatename) {        this.emCreatename = emCreatename == null ? null : emCreatename.trim();    }    public String getEmBz() {        return emBz;    }    public void setEmBz(String emBz) {        this.emBz = emBz == null ? null : emBz.trim();    }public Department getDepartment() {return department;}public void setDepartment(Department department) {this.department = department;}@Overridepublic String toString() {return "Employee [id=" + id + ", emSerialnumber=" + emSerialnumber+ ", emName=" + emName + ", emSex=" + emSex + ", emAge="+ emAge + ", emIdcard=" + emIdcard + ", emBorn=" + emBorn+ ", emNation=" + emNation + ", emMarriage=" + emMarriage+ ", emVisage=" + emVisage + ", emAncestralhome="+ emAncestralhome + ", emTel=" + emTel + ", emAddress="+ emAddress + ", emAfterschool=" + emAfterschool+ ", emSpeciality=" + emSpeciality + ", emCulture=" + emCulture+ ", emStartime=" + emStartime + ", emDepartmentid="+ emDepartmentid + ", emTypework=" + emTypework+ ", emCreatime=" + emCreatime + ", emCreatename="+ emCreatename + ", emBz=" + emBz + ", department="+ department.toString() + "]";}    }

  
mapper映射文件配置:

Department.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" ><mapper namespace="com.cn.su.dao.DepartmentMapper" >
<!-- 二级缓存配置 -->
  <cache eviction="FIFO" flushInterval="60000" size="512" readOnly=""></cache>
<!-- 下面是重点 -->  <resultMap id="BaseResultMap" type="com.cn.su.entity.Department" >    <id column="id" property="id" jdbcType="INTEGER" />    <result column="dt_name" property="dtName" jdbcType="VARCHAR" />    <result column="dt_createTime" property="dtCreatetime" jdbcType="VARCHAR" />    <result column="dt_bz" property="dtBz" jdbcType="VARCHAR" />
<!-- 1.这个是集合类型,一对多 2.嵌入select懒加载查询,用到的时候才会执行这个select语句,注意这里引用到了Employee.xml映射文件里的查询语句,只要写
对命名空间,我们是可以调用其他映射文件的操作语句的 -->    <collection property="employeeList" ofType="com.cn.su.entity.Employee" select="com.cn.su.dao.EmployeeMapper.selectByDepartNo" column="id">    </collection>  </resultMap>  <sql id="Base_Column_List" >    id, dt_name, dt_createTime, dt_bz  </sql>  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >    select     <include refid="Base_Column_List" />    from tb_department    where id = #{id,jdbcType=INTEGER}  </select>  <select id="selectAllDepartment" resultMap="BaseResultMap" parameterType="com.cn.su.entity.Department">  select * from tb_department  </select>    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >    delete from tb_department    where id = #{id,jdbcType=INTEGER}  </delete>  <insert id="insert" parameterType="com.cn.su.entity.Department" >    insert into tb_department (id, dt_name, dt_createTime,       dt_bz)    values (#{id,jdbcType=INTEGER}, #{dtName,jdbcType=VARCHAR}, #{dtCreatetime,jdbcType=VARCHAR},       #{dtBz,jdbcType=VARCHAR})  </insert>  <insert id="insertSelective" parameterType="com.cn.su.entity.Department" >    insert into tb_department    <trim prefix="(" suffix=")" suffixOverrides="," >      <if test="id != null" >        id,      </if>      <if test="dtName != null" >        dt_name,      </if>      <if test="dtCreatetime != null" >        dt_createTime,      </if>      <if test="dtBz != null" >        dt_bz,      </if>    </trim>    <trim prefix="values (" suffix=")" suffixOverrides="," >      <if test="id != null" >        #{id,jdbcType=INTEGER},      </if>      <if test="dtName != null" >        #{dtName,jdbcType=VARCHAR},      </if>      <if test="dtCreatetime != null" >        #{dtCreatetime,jdbcType=VARCHAR},      </if>      <if test="dtBz != null" >        #{dtBz,jdbcType=VARCHAR},      </if>    </trim>  </insert>  <update id="updateByPrimaryKeySelective" parameterType="com.cn.su.entity.Department" >    update tb_department    <set >      <if test="dtName != null" >        dt_name = #{dtName,jdbcType=VARCHAR},      </if>      <if test="dtCreatetime != null" >        dt_createTime = #{dtCreatetime,jdbcType=VARCHAR},      </if>      <if test="dtBz != null" >        dt_bz = #{dtBz,jdbcType=VARCHAR},      </if>    </set>    where id = #{id,jdbcType=INTEGER}  </update>  <update id="updateByPrimaryKey" parameterType="com.cn.su.entity.Department" >    update tb_department    set dt_name = #{dtName,jdbcType=VARCHAR},      dt_createTime = #{dtCreatetime,jdbcType=VARCHAR},      dt_bz = #{dtBz,jdbcType=VARCHAR}    where id = #{id,jdbcType=INTEGER}  </update></mapper>



Employee.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" ><mapper namespace="com.cn.su.dao.EmployeeMapper" ><select id="selectDepartmentById" parameterType="int" resultType="com.cn.su.entity.Department">select * from tb_department where id = #{id}</select>  <resultMap id="BaseResultMap" type="com.cn.su.entity.Employee" >    <id column="id" property="id" jdbcType="INTEGER" />    <result column="em_serialNumber" property="emSerialnumber" jdbcType="VARCHAR" />    <result column="em_name" property="emName" jdbcType="VARCHAR" />    <result column="em_sex" property="emSex" jdbcType="VARCHAR" />    <result column="em_age" property="emAge" jdbcType="INTEGER" />    <result column="em_IDCard" property="emIdcard" jdbcType="VARCHAR" />    <result column="em_born" property="emBorn" jdbcType="VARCHAR" />    <result column="em_nation" property="emNation" jdbcType="VARCHAR" />    <result column="em_marriage" property="emMarriage" jdbcType="VARCHAR" />    <result column="em_visage" property="emVisage" jdbcType="VARCHAR" />    <result column="em_ancestralHome" property="emAncestralhome" jdbcType="VARCHAR" />    <result column="em_tel" property="emTel" jdbcType="VARCHAR" />    <result column="em_address" property="emAddress" jdbcType="VARCHAR" />    <result column="em_afterSchool" property="emAfterschool" jdbcType="VARCHAR" />    <result column="em_speciality" property="emSpeciality" jdbcType="VARCHAR" />    <result column="em_culture" property="emCulture" jdbcType="VARCHAR" />    <result column="em_startime" property="emStartime" jdbcType="VARCHAR" />    <result column="em_departmentId" property="emDepartmentid" jdbcType="INTEGER" />    <result column="em_typeWork" property="emTypework" jdbcType="VARCHAR" />    <result column="em_creatime" property="emCreatime" jdbcType="VARCHAR" />    <result column="em_createName" property="emCreatename" jdbcType="VARCHAR" />    <result column="em_bz" property="emBz" jdbcType="VARCHAR" />    <association property="department" javaType="com.cn.su.entity.Department"     select="com.cn.su.dao.DepartmentMapper.selectByPrimaryKey" column="em_departmentId">    </association>  </resultMap>  <sql id="Base_Column_List" >    id, em_serialNumber, em_name, em_sex, em_age, em_IDCard, em_born, em_nation, em_marriage,     em_visage, em_ancestralHome, em_tel, em_address, em_afterSchool, em_speciality, em_culture,     em_startime, em_departmentId, em_typeWork, em_creatime, em_createName, em_bz  </sql>  <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >    select     <include refid="Base_Column_List" />    from tb_employee    where id = #{id,jdbcType=INTEGER}  </select>  <!-- 通过部门类型查询员工 -->  <select id="selectByDepartNo" parameterType="int" resultMap="BaseResultMap">  select     <include refid="Base_Column_List" />    from tb_employee    where em_departmentId = #{emDepartmentid}  </select>  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >    delete from tb_employee    where id = #{id,jdbcType=INTEGER}  </delete>  <insert id="insert" parameterType="com.cn.su.entity.Employee" >    insert into tb_employee (id, em_serialNumber, em_name,       em_sex, em_age, em_IDCard,       em_born, em_nation, em_marriage,       em_visage, em_ancestralHome, em_tel,       em_address, em_afterSchool, em_speciality,       em_culture, em_startime, em_departmentId,       em_typeWork, em_creatime, em_createName,       em_bz)    values (#{id,jdbcType=INTEGER}, #{emSerialnumber,jdbcType=VARCHAR}, #{emName,jdbcType=VARCHAR},       #{emSex,jdbcType=VARCHAR}, #{emAge,jdbcType=INTEGER}, #{emIdcard,jdbcType=VARCHAR},       #{emBorn,jdbcType=VARCHAR}, #{emNation,jdbcType=VARCHAR}, #{emMarriage,jdbcType=VARCHAR},       #{emVisage,jdbcType=VARCHAR}, #{emAncestralhome,jdbcType=VARCHAR}, #{emTel,jdbcType=VARCHAR},       #{emAddress,jdbcType=VARCHAR}, #{emAfterschool,jdbcType=VARCHAR}, #{emSpeciality,jdbcType=VARCHAR},       #{emCulture,jdbcType=VARCHAR}, #{emStartime,jdbcType=VARCHAR}, #{emDepartmentid,jdbcType=INTEGER},       #{emTypework,jdbcType=VARCHAR}, #{emCreatime,jdbcType=VARCHAR}, #{emCreatename,jdbcType=VARCHAR},       #{emBz,jdbcType=VARCHAR})  </insert>  <insert id="insertSelective" parameterType="com.cn.su.entity.Employee" >    insert into tb_employee    <trim prefix="(" suffix=")" suffixOverrides="," >      <if test="id != null" >        id,      </if>      <if test="emSerialnumber != null" >        em_serialNumber,      </if>      <if test="emName != null" >        em_name,      </if>      <if test="emSex != null" >        em_sex,      </if>      <if test="emAge != null" >        em_age,      </if>      <if test="emIdcard != null" >        em_IDCard,      </if>      <if test="emBorn != null" >        em_born,      </if>      <if test="emNation != null" >        em_nation,      </if>      <if test="emMarriage != null" >        em_marriage,      </if>      <if test="emVisage != null" >        em_visage,      </if>      <if test="emAncestralhome != null" >        em_ancestralHome,      </if>      <if test="emTel != null" >        em_tel,      </if>      <if test="emAddress != null" >        em_address,      </if>      <if test="emAfterschool != null" >        em_afterSchool,      </if>      <if test="emSpeciality != null" >        em_speciality,      </if>      <if test="emCulture != null" >        em_culture,      </if>      <if test="emStartime != null" >        em_startime,      </if>      <if test="emDepartmentid != null" >        em_departmentId,      </if>      <if test="emTypework != null" >        em_typeWork,      </if>      <if test="emCreatime != null" >        em_creatime,      </if>      <if test="emCreatename != null" >        em_createName,      </if>      <if test="emBz != null" >        em_bz,      </if>    </trim>    <trim prefix="values (" suffix=")" suffixOverrides="," >      <if test="id != null" >        #{id,jdbcType=INTEGER},      </if>      <if test="emSerialnumber != null" >        #{emSerialnumber,jdbcType=VARCHAR},      </if>      <if test="emName != null" >        #{emName,jdbcType=VARCHAR},      </if>      <if test="emSex != null" >        #{emSex,jdbcType=VARCHAR},      </if>      <if test="emAge != null" >        #{emAge,jdbcType=INTEGER},      </if>      <if test="emIdcard != null" >        #{emIdcard,jdbcType=VARCHAR},      </if>      <if test="emBorn != null" >        #{emBorn,jdbcType=VARCHAR},      </if>      <if test="emNation != null" >        #{emNation,jdbcType=VARCHAR},      </if>      <if test="emMarriage != null" >        #{emMarriage,jdbcType=VARCHAR},      </if>      <if test="emVisage != null" >        #{emVisage,jdbcType=VARCHAR},      </if>      <if test="emAncestralhome != null" >        #{emAncestralhome,jdbcType=VARCHAR},      </if>      <if test="emTel != null" >        #{emTel,jdbcType=VARCHAR},      </if>      <if test="emAddress != null" >        #{emAddress,jdbcType=VARCHAR},      </if>      <if test="emAfterschool != null" >        #{emAfterschool,jdbcType=VARCHAR},      </if>      <if test="emSpeciality != null" >        #{emSpeciality,jdbcType=VARCHAR},      </if>      <if test="emCulture != null" >        #{emCulture,jdbcType=VARCHAR},      </if>      <if test="emStartime != null" >        #{emStartime,jdbcType=VARCHAR},      </if>      <if test="emDepartmentid != null" >        #{emDepartmentid,jdbcType=INTEGER},      </if>      <if test="emTypework != null" >        #{emTypework,jdbcType=VARCHAR},      </if>      <if test="emCreatime != null" >        #{emCreatime,jdbcType=VARCHAR},      </if>      <if test="emCreatename != null" >        #{emCreatename,jdbcType=VARCHAR},      </if>      <if test="emBz != null" >        #{emBz,jdbcType=VARCHAR},      </if>    </trim>  </insert>  <update id="updateByPrimaryKeySelective" parameterType="com.cn.su.entity.Employee" >    update tb_employee    <set >      <if test="emSerialnumber != null" >        em_serialNumber = #{emSerialnumber,jdbcType=VARCHAR},      </if>      <if test="emName != null" >        em_name = #{emName,jdbcType=VARCHAR},      </if>      <if test="emSex != null" >        em_sex = #{emSex,jdbcType=VARCHAR},      </if>      <if test="emAge != null" >        em_age = #{emAge,jdbcType=INTEGER},      </if>      <if test="emIdcard != null" >        em_IDCard = #{emIdcard,jdbcType=VARCHAR},      </if>      <if test="emBorn != null" >        em_born = #{emBorn,jdbcType=VARCHAR},      </if>      <if test="emNation != null" >        em_nation = #{emNation,jdbcType=VARCHAR},      </if>      <if test="emMarriage != null" >        em_marriage = #{emMarriage,jdbcType=VARCHAR},      </if>      <if test="emVisage != null" >        em_visage = #{emVisage,jdbcType=VARCHAR},      </if>      <if test="emAncestralhome != null" >        em_ancestralHome = #{emAncestralhome,jdbcType=VARCHAR},      </if>      <if test="emTel != null" >        em_tel = #{emTel,jdbcType=VARCHAR},      </if>      <if test="emAddress != null" >        em_address = #{emAddress,jdbcType=VARCHAR},      </if>      <if test="emAfterschool != null" >        em_afterSchool = #{emAfterschool,jdbcType=VARCHAR},      </if>      <if test="emSpeciality != null" >        em_speciality = #{emSpeciality,jdbcType=VARCHAR},      </if>      <if test="emCulture != null" >        em_culture = #{emCulture,jdbcType=VARCHAR},      </if>      <if test="emStartime != null" >        em_startime = #{emStartime,jdbcType=VARCHAR},      </if>      <if test="emDepartmentid != null" >        em_departmentId = #{emDepartmentid,jdbcType=INTEGER},      </if>      <if test="emTypework != null" >        em_typeWork = #{emTypework,jdbcType=VARCHAR},      </if>      <if test="emCreatime != null" >        em_creatime = #{emCreatime,jdbcType=VARCHAR},      </if>      <if test="emCreatename != null" >        em_createName = #{emCreatename,jdbcType=VARCHAR},      </if>      <if test="emBz != null" >        em_bz = #{emBz,jdbcType=VARCHAR},      </if>    </set>    where id = #{id,jdbcType=INTEGER}  </update>  <update id="updateByPrimaryKey" parameterType="com.cn.su.entity.Employee" >    update tb_employee    set em_serialNumber = #{emSerialnumber,jdbcType=VARCHAR},      em_name = #{emName,jdbcType=VARCHAR},      em_sex = #{emSex,jdbcType=VARCHAR},      em_age = #{emAge,jdbcType=INTEGER},      em_IDCard = #{emIdcard,jdbcType=VARCHAR},      em_born = #{emBorn,jdbcType=VARCHAR},      em_nation = #{emNation,jdbcType=VARCHAR},      em_marriage = #{emMarriage,jdbcType=VARCHAR},      em_visage = #{emVisage,jdbcType=VARCHAR},      em_ancestralHome = #{emAncestralhome,jdbcType=VARCHAR},      em_tel = #{emTel,jdbcType=VARCHAR},      em_address = #{emAddress,jdbcType=VARCHAR},      em_afterSchool = #{emAfterschool,jdbcType=VARCHAR},      em_speciality = #{emSpeciality,jdbcType=VARCHAR},      em_culture = #{emCulture,jdbcType=VARCHAR},      em_startime = #{emStartime,jdbcType=VARCHAR},      em_departmentId = #{emDepartmentid,jdbcType=INTEGER},      em_typeWork = #{emTypework,jdbcType=VARCHAR},      em_creatime = #{emCreatime,jdbcType=VARCHAR},      em_createName = #{emCreatename,jdbcType=VARCHAR},      em_bz = #{emBz,jdbcType=VARCHAR}    where id = #{id,jdbcType=INTEGER}  </update></mapper>

测试效果:

public List<DepartmentVo> selectAllDepartment() {List<Department> departmentList = departmentMapper.selectAllDepartment();List<DepartmentVo> departmentVoList = new ArrayList<DepartmentVo>();for(int i=0;i<departmentList.size();i++){
//一直到这里都没有执行查询Employeeint sumPeople = caculateSumPeople(departmentList.get(i));DepartmentVo departmentVo = new DepartmentVo();departmentVo.setDepartment(departmentList.get(i));departmentVo.setSumPeople(sumPeople);departmentVoList.add(departmentVo);}return departmentVoList;}/** *  * @Title: caculateSumPeople * @Description: 统计每个部门的人数 * @param @return 参数 * @return int 返回类型 * @throws */private int caculateSumPeople(Department department){logger.info("执行前。。。。。。加载了查询语句吗?");//这里还没有执行查询employeeList<Employee> employeeList = department.getEmployeeList();logger.info("执行后。。。。。。现在加载了查询语句吗?");//这里才查询了for(Employee employee : employeeList){logger.info(employee.toString());}return employeeList.size();}
可以看出,懒加载目的是,当我们只需要用到Department主干内容时,它是不加载子级下的employee的,而需要用到某个departmentId下的employee时,才去查询它!这样节省了许多资源,减轻了访问数据的压力。


阅读全文
0 0