mybatis枚举类型处理器
1. 定义枚举值的接口
public abstract interface ValuedEnum {
int getValue();
}
所有要被mybatis处理的枚举类继承该接口
2. 定义枚举类型,并实现ValuedEnum接口
public enum Gender implements ValuedEnum {
UNKNOWN("保密", 0),
MAIL("男", 1),
FAMAIL("女", 2);
private String name;
private int value;
Gender(String name, int value) {
this.name = name;
this.value = value;
}
public String getName() {
return name;
}
@Override
public int getValue() {
return this.value;
}
}
3. 继承mybatis的BaseTypeHandler抽象类
@MappedTypes(value = { Gender.class })
public class ValuedEnumTypeHandler<E extends Enum<E>> extends BaseTypeHandler<E> {
private final Map<Integer, E> map = new HashMap<>();
public ValuedEnumTypeHandler(Class<E> type) {
if (Objects.isNull(type)) {
throw new IllegalArgumentException("Type argument cannot be null");
}
E[] enums = type.getEnumConstants();
if (Objects.isNull(enums)) {
throw new IllegalArgumentException(type.getSimpleName() + " does not represent an enum type.");
}
for (E e : enums) {
ValuedEnum valuedEnum = (ValuedEnum) e;
map.put(valuedEnum.getValue(), e);
}
}
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int i, E e, JdbcType jdbcType) throws SQLException {
ValuedEnum valuedEnum = (ValuedEnum) e;
preparedStatement.setInt(i, valuedEnum.getValue());
}
@Override
public E getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
int i = resultSet.getInt(columnName);
if (resultSet.wasNull()) {
return null;
} else {
return map.get(i);
}
}
@Override
public E getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException {
int i = resultSet.getInt(columnIndex);
if (resultSet.wasNull()) {
return null;
} else {
return map.get(i);
}
}
@Override
public E getNullableResult(CallableStatement callableStatement, int columnIndex) throws SQLException {
int i = callableStatement.getInt(columnIndex);
if (callableStatement.wasNull()) {
return null;
} else {
return map.get(i);
}
}
}
@MappedTypes注解表示ValuedEnumTypeHandler要处理的枚举类型
4. 在mybatis的配置文件中配置ValuedEnumTypeHandler
<typeHandlers>
<typeHandler handler="com.example.ValuedEnumTypeHandler"/>
</typeHandlers>
mybatis枚举类型处理器的更多相关文章
- MyBatis 示例-类型处理器
MyBatis 提供了很多默认类型处理器,参考官网地址:链接,除了官网提供的类型处理器,我们也可以自定义类型处理器. 具体做法为:实现 org.apache.ibatis.type.TypeHandl ...
- mybatis 枚举类型使用
一.首先定义接口,提供获取数据库存取的值得方法,如下: public interface BaseEnum { int getCode(); } 二.定义mybatis的typeHandler扩展类, ...
- Mybatis的类型处理器
Mybatis在预处理语句(PreparedStatement)中设置一个参数时,会用默认的typeHandler进行处理. 这句话是什么意思呢,当你想用姓名查询一个人的信息时 <select ...
- MyBatis从入门到精通(十四):在MyBatis中使用类型处理器
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解在MyBatis中如何 ...
- mybatis由浅入深day01_6SqlMapConfig.xml(6.2settings全局参数配置_6.3typeAliases(类型别名)_6.4typeHandlers(类型处理器)_6.5mappers(映射配置))
6 SqlMapConfig.xml mybatis的全局配置文件SqlMapConfig.xml,配置内容和顺序如下: properties(属性) settings(全局配置参数) typeAli ...
- Mybatis 枚举类处理
目录 类型处理器(TypeHandler) 内置的枚举处理器 EnumTypeHandler源码 自定义枚举类处理 通用枚举处理器 Git 类型处理器(TypeHandler) 无论是 MyBatis ...
- Mybatis中使用自定义的类型处理器处理枚举enum类型
知识点:在使用Mybatis的框架中,使用自定义的类型处理器处理枚举enum类型 应用:利用枚举类,处理字段有限,可以用状态码,代替的字段,本实例,给员工状态字段设置了一个枚举类 状态码,直接赋值给对 ...
- 浩哥解析MyBatis源码(九)——Type类型模块之类型处理器注册器(TypeHandlerRegistry)
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6709157.html 1.回顾 上一篇研究的是类型别名注册器TypeAliasRegist ...
- MyBatis源码解析(九)——Type类型模块之类型处理器注册器(TypeHandlerRegistry)
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6709157.html 1.回顾 上一篇研究的是类型别名注册器TypeAliasRegist ...
随机推荐
- Mysql 5.7 账户过期重启
关闭mysql 重启mysql57
- java中读取配置文件内容,如读取.properties文件
http://blog.csdn.net/u012255097/article/details/53122760
- NET full stack framework
NFX UNISTACK 介绍 学习.NET Core和ASP.NET Core,偶然搜索到NFX UNISTACK,现翻译一下Readme,工程/原文:https://github.com/aumc ...
- Linux unzip用法
1.把文件解压到当前目录下 unzip test.zip 2.如果要把文件解压到指定的目录下,需要用到-d参数. unzip -d /temp test.zip 3.解压的时候,有时候不想覆盖已经存在 ...
- sqlserver 数据库 的数据库个数统计 表个数统计 表的数据量统计(转载)
http://www.cnblogs.com/qinche/archive/2012/08/09/app.html 由于今天要监控数据,急需统计实例中1有多少库2库里有多少表3每个表有多少数据 --将 ...
- Android 下的 SQLite 操作封装 —— DatabaseUtil
看到别人写的代码不错,对自己目前的开发很有用,所以转载一下,希望也能帮助到其他人: 1.DatabaseUtil.java(封装的类) package com.dbexample; import an ...
- springboot集成shiro实现身份认证
github地址:https://github.com/peterowang/shiro pom文件 <dependencies> <dependency> <group ...
- VueJs $watch()方法总结!!
最近公司用vue框架写交互,之前没怎么写过,但是很多数据双向绑定的东东跟angular很像!所以上手很快!哈哈 今天就碰到一个vue的问题啊!!产品需求是,datetimepick时间选择器一更改时间 ...
- null、undefined和NaN的区别
未定义的值和定义未赋值的值是undefined: null是一种特殊的Object,可以给变量赋一个值null,来清除变量的值: NaN是一种特殊的number:
- SQL基本语法备忘
注:以下演示是在mysql命令行下的操作 数据库相关操作 create database mytest; --创建数据库 create database if not exists mytest; - ...