mybatis 枚举typeHandler
2024-08-26 13:10:45
枚举typeHandler
在绝大多数情况下,typeHandler因为枚举而使用,MyBatis已经定义了两个类作为枚举类型的支持,这两个类分别是:
•EnumOrdinalTypeHandler。
•EnumTypeHandler。
因为它们的作用不大,所以在大部分情况下,我们都不用它们,不过我们还是要稍微了解一下它们的用法。
EnumOrdinalTypeHandler
EnumOrdinalTypeHandler是按MyBatis根据枚举数组下标索引的方式进行匹配的,也是枚举类型的默认转换类,它要求数据库返回一个整数作为其下标,它会根据下标找到对应的枚举类型
EnumTypeHandler
EnumTypeHandler会把使用的名称转化为对应的枚举,比如它会根据数据库返回的字符串“MALE”,进行Enum.val-ueOf(SexEnum.class,"MALE");转换
自定义枚举typeHandler
代码清单4-23:SexEnumTypeHandler
package com.xc.util.typehandler; import com.xc.enumerate.SexEnum;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler; import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; @MappedTypes(SexEnum.class)
@MappedJdbcTypes(JdbcType.INTEGER)
public class SexEnumTypeHandler implements TypeHandler<SexEnum> { @Override
public void setParameter(PreparedStatement ps, int i, SexEnum parameter, JdbcType jdbcType) throws SQLException {
ps.setInt(i, parameter.getId());
} @Override
public SexEnum getResult(ResultSet rs, String columnName) throws SQLException {
int id = rs.getInt(columnName);
return SexEnum.getSexById(id);
} @Override
public SexEnum getResult(ResultSet rs, int columnIndex) throws SQLException {
int id = rs.getInt(columnIndex);
return SexEnum.getSexById(id);
} @Override
public SexEnum getResult(CallableStatement cs, int columnIndex) throws SQLException {
int id = cs.getInt(columnIndex);
return SexEnum.getSexById(id);
}
}
package com.xc.enumerate; public enum SexEnum { MALE(1, "男"), FEMALE(0, "女");
private int id;
private String name; SexEnum(int id, String name) {
this.id = id;
this.name = name;
} public static SexEnum getSexById(int id) {
for (SexEnum sex : SexEnum.values()) {
if (sex.getId() == id) {
return sex;
}
}
return null;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} }
最新文章
- android 利用Handler触发另一个activity方法
- Framer – 将视觉搞转换为更真实的动态原型
- 错误记录,找不到sqlite dll
- ASP.NET相关技术整理
- Java基础知识强化之集合框架笔记75:哈希表
- C#_ajax_demo
- Linux Kernel ‘drivers/staging/wlags49_h2/wl_priv.c’本地缓冲区溢出漏洞
- Java equals 和 hashcode 方法
- CSDN专家吐槽实录
- XJOI1424解压字符串
- php+ajax+jq
- CSS3 基础知识[转载minsong的博客]
- Python 中的单例模式
- Python实现工厂模式
- XamarinSQLite教程在Xamarin.Android项目中使用数据库
- selector的小箭头去除
- MongoDB入门 和nodejs操作
- 【代码审计】LaySNS_v2.2.0 System.php页面存在代码执行漏洞分析.
- Python面试题之装饰器漫谈
- FreeOpcUa compile