枚举如何在MyBatis中使用

  介绍

这篇文章给大家介绍枚举如何在MyBatis中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

具体方法如下:

 & lt; typeHandlers>
  & lt; typeHandler处理程序=皁rg.apache.ibatis.type.EnumOrdinalTypeHandler"将javaType=癱om.example.entity.enums.ComputerState"/比;
  & lt;/typeHandlers> 

以上的两种转换器都不能满足我们的需求,所以看起来要自己编写一个转换器了。


MyBatis提供了<代码> org.apache.ibatis.type.BaseTypeHandler>

<强> 1。定义接口

我们需要一个接口来确定某部分枚举类的行为。如下:

公共接口BaseCodeEnum {
  int getCode ();
  }

该接口只有一个返回编码的方法,返回值将被存入数据库。

<强> 2。改造枚举

就拿上面的ComputerState来实现BaseCodeEnum接口:

公共类CodeEnumUtil {
  
  公共静态& lt; E Enum<延伸,# 63;比;,BaseCodeEnum>均得到E (ClassenumClass, int代码){
  E [] enumConstants=enumClass.getEnumConstants ();
  (E E: enumConstants) {
  如果(e.getCode()==代码)
  返回e;
  }
  返回null;
  }
  }

<>强4。自定义类型转换器

准备工作做的差不多了,是时候开始编写转换器了。

<代码> BaseTypeHandler一共需要实现4个方法:

    <李> <代码>空白setNonNullParameter (PreparedStatement ps, int i T参数,JdbcType JdbcType)
      ,用于定义设置参数时,该如何把Java类型的参数转换为对应的数据库类型 <李> <代码> T getNullableResult (ResultSet rs,字符串columnName)
      ,用于定义通过字段名称获取字段数据时,如何把数据库类型转换为对应的Java类型 <李> <代码> T getNullableResult (ResultSet rs, int columnIndex)
      ,用于定义通过字段索引获取字段数据时,如何把数据库类型转换为对应的Java类型 <李> <代码> T getNullableResult (CallableStatement cs, int columnIndex)
      ,用定义调用存储过程后,如何把数据库类型转换为对应的Java类型
      李,

我是这样实现的:

公共类CodeEnumTypeHandler扩展BaseTypeHandler{
  
  私人Class类型;
  
  公共CodeEnumTypeHandler (Class类型){
  如果(type==null) {
  把新IllegalArgumentException(“不能null"类型参数);
  }
  这一点。类型=类型;
  }
  
  @Override
  公共空间setNonNullParameter (PreparedStatement ps, int i, BaseCodeEnum参数,JdbcType JdbcType)
  抛出SQLException {
  ps.setInt(我,parameter.getCode ());
  }
  
  @Override
  公共E getNullableResult (ResultSet rs、字符串columnName) throws SQLException {
  int i=rs.getInt (columnName);
  如果(rs.wasNull ()) {
  返回null;
  其他}{
  尝试{
  CodeEnumUtil返回。均得到(类型、我);
  }捕捉(例外的前女友){
  把新的IllegalArgumentException(“不能把“;+我+“;“;+ type.getSimpleName () +“;由序数价值!”
  例);
  }
  }
  }
  
  @Override
  公共E getNullableResult (ResultSet rs, int columnIndex) throws SQLException {
  int i=rs.getInt (columnIndex);
  如果(rs.wasNull ()) {
  返回null;
  其他}{
  尝试{
  CodeEnumUtil返回。均得到(类型、我);
  }捕捉(例外的前女友){
  把新的IllegalArgumentException(“不能把“;+我+“;“;+ type.getSimpleName () +“;由序数价值!”
  例);
  }
  }
  }
  
  @Override
  公共E getNullableResult (CallableStatement cs, int columnIndex) throws SQLException {
  int i=cs.getInt (columnIndex);
  如果(cs.wasNull ()) {
  返回null;
  其他}{
  尝试{
  CodeEnumUtil返回。均得到(类型、我);
  }捕捉(例外的前女友){
  把新的IllegalArgumentException(“不能把“;+我+“;“;+ type.getSimpleName () +“;由序数价值!”
  例);
  }
  }
  }
  }

枚举如何在MyBatis中使用