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关键字后面,即在查询字段处加-注释会抛异常,保险起见,最好使用第一种注释
本文分享了MyBatis的使用心得,包括resultMap中id和result的区别,id可用于缓存和内嵌结果映射;resultMap字段映射时避免字段名重复;介绍了typeHandler在配置文件、Mapper文件的使用及相关文件;还提及mapper文件的三种注释方式及注意事项。

1629

被折叠的 条评论
为什么被折叠?



