1. 程式人生 > >mybatis mapper檔案 使用心得

mybatis mapper檔案 使用心得

mybatis 使用心得

1. resultMap 中 id 和 result 的區別

idresult都是對映單列值到一個屬性或欄位的簡單資料型別。
唯一不同是。id是作為唯一標識的,當和其他物件例項對比的時候,這個id可以應用到快取和內嵌的結果對映。

2. resultMap 中欄位的對映

resultMap中最好不要有兩個column屬性值相等的欄位,因為在MyBatis進行查詢對映的時候,查詢出來的每一個屬性都是放在一個對應的Map裡面的,其中鍵是屬性名,值則是其對應的值。所以如果欄位名重複的話,只會對映其中一個。

3. typeHandler 的使用

I. 在 application.properties 檔案中配置handler路徑:

mybatis.type-handlers-package: cn.itpower.pms.common.mybatis.handler.*

II. Mapper 檔案中的使用:

<resultMap id="AiParamInputDTOMap" type="cn.itpower.pms.modules.plan.DTO.AiParamInputDTO"> <result column="request_param_value" jdbcType="VARCHAR" property="paramValue" javaType="string" typeHandler="cn.itpower.pms.common.mybatis.handler.JsonTypeHandler"/> </resultMap>

III. typeHandler 檔案

public class JsonTypeHandler<T extends Object> extends BaseTypeHandler<T> {
   private Class<T> clazz;

   public JsonTypeHandler(Class<T> clazz) {
       if (clazz == null) {
           throw new IllegalArgumentException("Type argument cannot be null");
       }
       this.clazz = clazz;
   }

   /**
    * 儲存資料的時候的處理,將物件轉為JSON字串
    * @param ps
    * @param i
    * @param parameter
    * @param jdbcType
    * @throws SQLException
    */
   @Override
   public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
       ps.setString(i, this.toJson(parameter));
   }

   /**
    * 獲取物件時候的處理,將欄位裡的JSON串轉為java物件
    * @param rs
    * @param columnName
    * @return
    * @throws SQLException
    */
   @Override
   public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
       return this.toObject(rs.getString(columnName), clazz);
   }

   @Override
   public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
       return this.toObject(rs.getString(columnIndex), clazz);
   }

   @Override
   public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
       return this.toObject(cs.getString(columnIndex), clazz);
   }

   private String toJson(T object) {
       return  JSON.toJSONString(object);
   }

   private T toObject(String content, Class<?> clazz) {
       if (content != null && !content.isEmpty()) {
           return (T)JSON.parseObject(content, clazz);
       } else {
           return null;
       }
   }
}

4. mapper檔案中的註釋

1. XML/HTML的標準註釋:<!-- 註釋內容 -->
2. Java語言中的多行註釋:/* 註釋內容 */
3. SQL中的特殊的註釋符號:-

注意:第三種方式在部分IDE中只能新增到sql語句from關鍵字後面,即在查詢欄位處加 -註釋會拋異常,保險起見,最好使用第一種註釋