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
关键字后面,即在查询字段处加-
注释会抛异常,保险起见,最好使用第一种注释