1. 程式人生 > >mybatis:延遲加載時不要在get/set方法上面添加final關鍵字(原創)

mybatis:延遲加載時不要在get/set方法上面添加final關鍵字(原創)

沒有 tle lan nco odin .com 延遲加載 apache 被調用

1.mybatis-config.xml:

技術分享圖片

<?xml version="1.0" encoding="UTF-8"?>    
<!DOCTYPE configuration     
  PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">    

<configuration>  
    <settings>  
        <setting name="lazyLoadingEnabled" value
="true"/> <setting name="aggressiveLazyLoading" value="false"/> </settings> </configuration>

以上配置發現延遲加載配置是有效的。

#全局啟用或禁用延遲加載。當禁用時,所有關聯對象都會即時加載。
mybatis.configuration.lazy-loading-enabled=true
#當啟用時,有延遲加載屬性的對象在被調用時將會完全加載任意屬性。否則,每種屬性將會按需要加載。
mybatis.configuration.aggressive-lazy-loading=false

這是我在springboot中的配置,發現沒有作用,請用文件方式的配置

2.Mapper文件配置

<mapper namespace="com.test.dao.base.DaoBaseUser">
    <resultMap id="BaseResultMap"
        type="com.test.entity.base.EntityBaseUser">
        <id column="userID" jdbcType="VARCHAR" property="userID" />
        <result column="orgID"
jdbcType="VARCHAR" property="orgID" /> <result column="postID" jdbcType="VARCHAR" property="postID" /> <!-- 關聯查詢:用戶對應的角色 --> <association property="roles" javaType="java.util.List" select="com.csget.dao.base.DaoBaseUser.selectRoles" column="userID"/> </resultMap> <select id="selectRoles" resultType="java.lang.String"> SELECT roleID FROM t_base_role_user_ref WHERE userID=#{userID} </select> <select id="selectByMobile" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from t_base_user where mobile=#{mobile} and isValid=‘1‘ </select> </mapper>

3.get/set方法

public class EntityBaseUser{

   //其它屬性省略
/**
   * 獲得:用戶的角色列表
   *
   * @return the roles
   */
  public final List<String> getRoles() {
    return roles;
  }

  /**
   * 設置:用戶的角色列表
   *
   * @param roles
   *          the roles to set
   */
  public final void setRoles(List<String> roles) {
    this.roles = roles;
  }
}

發現調用getRoles()方法並沒有觸發延遲加載查詢,當斷點調試的時候,鼠標放到EntityBaseUser的實例變量上,會立刻觸發延遲加載查詢,真是很奇怪。

最後懷疑:是不是get/set方法上面加了final導致的,果然去掉之後,發現一切正常了。

mybatis:延遲加載時不要在get/set方法上面添加final關鍵字(原創)