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

猜你喜欢

转载自blog.csdn.net/qq_34997906/article/details/82190838
今日推荐