建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+谷歌浏览器 Firefox 30+ 火狐浏览器

一文解密MyBatis之BaseTypeHandler和TypeHandler用法

本文章发表于:2023-05-19

  MyBatis是一款优秀的ORM框架,其强大的映射功能在项目中得到了广泛的应用。在MyBatis的映射功能中,TypeHandler和BaseTypeHandler是比较重要的一部分。TypeHandler主要用来处理Java类型和JDBC类型之间的转换,而BaseTypeHandler则是TypeHandler的基础。那么如何使用MyBatis中的BaseTypeHandler和TypeHandler呢?接下来就让小编带大家一起来详细了解下吧!

BaseTypeHandler和TypeHandler用法

  一、BaseTypeHandler的使用


  1.1、BaseTypeHandler介绍


  BaseTypeHandler是TypeHandler的基类,其提供了一些基础的转换方法用于Java类型和JDBC类型之间的转换。


  BaseTypeHandler提供了getNullableResult()和setNonNullParameter()两个方法,分别是将JDBC类型转换为Java类型和将Java类型转换为JDBC类型。


  1.2、BaseTypeHandler的使用


  在MyBatis的映射文件中,我们可以通过继承BaseTypeHandler来自定义自己的TypeHandler。


  例如,我们可以定义一个将Java的Date类型转换为JDBC的Timestamp类型的TypeHandler:


  ```


  public class DateTypeHandler extends BaseTypeHandler<Date> {


  @Override


  public Date getNullableResult(ResultSet rs, String columnName) throws SQLException {


  Timestamp sqlTimestamp = rs.getTimestamp(columnName);


  if (sqlTimestamp != null) {


  return new Date(sqlTimestamp.getTime());


  }


  return null;


  }


  @Override


  public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException {


  ps.setTimestamp(i, new Timestamp(parameter.getTime()));


  }


  }


  ```


  我们可以在映射文件中使用该TypeHandler:


  ```


  <resultMap id="userResultMap" type="User">


  <result property="createTime" column="create_time" jdbcType="TIMESTAMP" typeHandler="com.example.DateTypeHandler"/>


  </resultMap>


  ```


  这样,当我们从数据库中查询到一个Timestamp类型的值时,MyBatis就会自动调用DateTypeHandler的getNullableResult()方法将该值转换为Date类型。


  同样的,当我们向数据库中插入一个Date类型的值时,MyBatis就会自动调用DateTypeHandler的setNonNullParameter()方法将该值转换为Timestamp类型。


  二、TypeHandler的使用


  2.1、TypeHandler介绍


  TypeHandler是用来处理Java类型和JDBC类型之间的转换的,它是MyBatis中比较重要的一部分。


  在MyBatis中,如果某个Java类型没有对应的JDBC类型,或者JDBC类型与Java类型之间的转换逻辑比较复杂,那么我们就需要自定义TypeHandler来完成转换。


  2.2、TypeHandler的使用


  同样的,在MyBatis的映射文件中,我们可以通过配置TypeHandler来使用自定义的TypeHandler。


  例如,我们可以定义一个将Java的String类型转换为JDBC的Integer类型的TypeHandler:


  ```


  public class StringTypeHandler implements TypeHandler<String> {


  @Override


  public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {


  if (parameter != null) {


  ps.setInt(i, Integer.valueOf(parameter));


  } else {


  ps.setNull(i, Types.INTEGER);


  }


  }


  @Override


  public String getResult(ResultSet rs, String columnName) throws SQLException {


  int value = rs.getInt(columnName);


  if (value != 0) {


  return String.valueOf(value);


  }


  return null;


  }


  @Override


  public String getResult(ResultSet rs, int columnIndex) throws SQLException {


  int value = rs.getInt(columnIndex);


  if (value != 0) {


  return String.valueOf(value);


  }


  return null;


  }


  @Override


  public String getResult(CallableStatement cs, int columnIndex) throws SQLException {


  int value = cs.getInt(columnIndex);


  if (value != 0) {


  return String.valueOf(value);


  }


  return null;


  }


  }


  ```


  我们可以在映射文件中使用该TypeHandler:


  ```


  <resultMap id="userResultMap" type="User">


  <result property="age" column="age" jdbcType="INTEGER" typeHandler="com.example.StringTypeHandler"/>


  </resultMap>


  ```


  这样,当我们从数据库中查询到一个Integer类型的值时,MyBatis就会自动调用StringTypeHandler的getResult()方法将该值转换为String类型。


  同样的,当我们向数据库中插入一个String类型的值时,MyBatis就会自动调用StringTypeHandler的setParameter()方法将该值转换为Integer类型。


  在MyBatis中,BaseTypeHandler和TypeHandler是用来处理Java类型和JDBC类型之间的转换的。BaseTypeHandler是TypeHandler的基类,提供了一些基础的转换方法,我们可以继承BaseTypeHandler来自定义自己的TypeHandler。


  TypeHandler则是用来处理Java类型和JDBC类型之间的复杂转换逻辑的,我们可以通过配置TypeHandler来使用自定义的TypeHandler。以上是关于MyBatis之BaseTypeHandler和TypeHandler用法的介绍,希望对大家有所帮助。

新闻中心 > 技术分享

一文解密MyBatis之BaseTypeHandler和TypeHandler用法

本文章发表于:2023-05-19 12:05:43

  MyBatis是一款优秀的ORM框架,其强大的映射功能在项目中得到了广泛的应用。在MyBatis的映射功能中,TypeHandler和BaseTypeHandler是比较重要的一部分。TypeHandler主要用来处理Java类型和JDBC类型之间的转换,而BaseTypeHandler则是TypeHandler的基础。那么如何使用MyBatis中的BaseTypeHandler和TypeHandler呢?接下来就让小编带大家一起来详细了解下吧!

BaseTypeHandler和TypeHandler用法

  一、BaseTypeHandler的使用


  1.1、BaseTypeHandler介绍


  BaseTypeHandler是TypeHandler的基类,其提供了一些基础的转换方法用于Java类型和JDBC类型之间的转换。


  BaseTypeHandler提供了getNullableResult()和setNonNullParameter()两个方法,分别是将JDBC类型转换为Java类型和将Java类型转换为JDBC类型。


  1.2、BaseTypeHandler的使用


  在MyBatis的映射文件中,我们可以通过继承BaseTypeHandler来自定义自己的TypeHandler。


  例如,我们可以定义一个将Java的Date类型转换为JDBC的Timestamp类型的TypeHandler:


  ```


  public class DateTypeHandler extends BaseTypeHandler<Date> {


  @Override


  public Date getNullableResult(ResultSet rs, String columnName) throws SQLException {


  Timestamp sqlTimestamp = rs.getTimestamp(columnName);


  if (sqlTimestamp != null) {


  return new Date(sqlTimestamp.getTime());


  }


  return null;


  }


  @Override


  public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException {


  ps.setTimestamp(i, new Timestamp(parameter.getTime()));


  }


  }


  ```


  我们可以在映射文件中使用该TypeHandler:


  ```


  <resultMap id="userResultMap" type="User">


  <result property="createTime" column="create_time" jdbcType="TIMESTAMP" typeHandler="com.example.DateTypeHandler"/>


  </resultMap>


  ```


  这样,当我们从数据库中查询到一个Timestamp类型的值时,MyBatis就会自动调用DateTypeHandler的getNullableResult()方法将该值转换为Date类型。


  同样的,当我们向数据库中插入一个Date类型的值时,MyBatis就会自动调用DateTypeHandler的setNonNullParameter()方法将该值转换为Timestamp类型。


  二、TypeHandler的使用


  2.1、TypeHandler介绍


  TypeHandler是用来处理Java类型和JDBC类型之间的转换的,它是MyBatis中比较重要的一部分。


  在MyBatis中,如果某个Java类型没有对应的JDBC类型,或者JDBC类型与Java类型之间的转换逻辑比较复杂,那么我们就需要自定义TypeHandler来完成转换。


  2.2、TypeHandler的使用


  同样的,在MyBatis的映射文件中,我们可以通过配置TypeHandler来使用自定义的TypeHandler。


  例如,我们可以定义一个将Java的String类型转换为JDBC的Integer类型的TypeHandler:


  ```


  public class StringTypeHandler implements TypeHandler<String> {


  @Override


  public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {


  if (parameter != null) {


  ps.setInt(i, Integer.valueOf(parameter));


  } else {


  ps.setNull(i, Types.INTEGER);


  }


  }


  @Override


  public String getResult(ResultSet rs, String columnName) throws SQLException {


  int value = rs.getInt(columnName);


  if (value != 0) {


  return String.valueOf(value);


  }


  return null;


  }


  @Override


  public String getResult(ResultSet rs, int columnIndex) throws SQLException {


  int value = rs.getInt(columnIndex);


  if (value != 0) {


  return String.valueOf(value);


  }


  return null;


  }


  @Override


  public String getResult(CallableStatement cs, int columnIndex) throws SQLException {


  int value = cs.getInt(columnIndex);


  if (value != 0) {


  return String.valueOf(value);


  }


  return null;


  }


  }


  ```


  我们可以在映射文件中使用该TypeHandler:


  ```


  <resultMap id="userResultMap" type="User">


  <result property="age" column="age" jdbcType="INTEGER" typeHandler="com.example.StringTypeHandler"/>


  </resultMap>


  ```


  这样,当我们从数据库中查询到一个Integer类型的值时,MyBatis就会自动调用StringTypeHandler的getResult()方法将该值转换为String类型。


  同样的,当我们向数据库中插入一个String类型的值时,MyBatis就会自动调用StringTypeHandler的setParameter()方法将该值转换为Integer类型。


  在MyBatis中,BaseTypeHandler和TypeHandler是用来处理Java类型和JDBC类型之间的转换的。BaseTypeHandler是TypeHandler的基类,提供了一些基础的转换方法,我们可以继承BaseTypeHandler来自定义自己的TypeHandler。


  TypeHandler则是用来处理Java类型和JDBC类型之间的复杂转换逻辑的,我们可以通过配置TypeHandler来使用自定义的TypeHandler。以上是关于MyBatis之BaseTypeHandler和TypeHandler用法的介绍,希望对大家有所帮助。

热门资讯

您对快快产品更新的整体评价是?

期待您提供更多的改进意见(选填)

提交成功~
提交失败~

售前咨询

售后咨询

  • 紧急电话:400-9188-010

等级保护报价计算器

今天已有1593位获取了等保预算

所在城市:
机房部署:
等保级别:
服务器数量:
是否已购安全产品:
手机号码:
手机验证码:
开始计算

稍后有等保顾问致电为您解读报价

拖动下列滑块完成拼图

您的等保预算报价0
  • 咨询费:
    0
  • 测评费:
    0
  • 定级费:
    0
  • 产品费:
    0
联系二维码

详情咨询等保专家

联系人:潘成豪

13055239889