mybatis mapper檔案 使用心得
阿新 • • 發佈:2018-12-31
mybatis 使用心得
1. resultMap 中 id 和 result 的區別
id
和result
都是對映單列值到一個屬性或欄位的簡單資料型別。
唯一不同是。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
關鍵字後面,即在查詢欄位處加-
註釋會拋異常,保險起見,最好使用第一種註釋