mysql 字符串枚举类型转换_MyBatis里字段到枚举类型的转换/映射
一、简介
我们在用MyBatis里,很多时间有这样一个需求:bean里有个属性是枚举,在DB存储时我们想存的枚举的代号,从DB拿出来时想直接映射成目标枚举类型,也即代号字段与Java枚举类的相互类型转换。
当然,你可以为每个枚举写一个MyEnumTypeHandler,但问题是要为每个类都写一个TypeHandler,过于繁琐。
有了泛型,一个通用的TypeHandler直接搞定。
二、源码
2.1 EnumTypeHandler类
package com.adu.spring_test.mybatis.typehandler;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.adu.spring_test.mybatis.util.CodeEnumUtil;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import com.adu.spring_test.mybatis.enums.CodeBaseEnum;
/**
* mapper里字段到枚举类的映射。
* 用法一:
* 入库:#{enumDataField, typeHandler=com.adu.spring_test.mybatis.typehandler.EnumTypeHandler}
* 出库:
*
*
*
*
* 用法二:
* 1)在mybatis-config.xml中指定handler:
*
*
*
* 2)在MyClassMapper.xml里直接select/update/insert。
*/
public class EnumTypeHandler & CodeBaseEnum> extends BaseTypeHandler {
private Class clazz;
public EnumTypeHandler(Class enumType) {
if (enumType == null)
throw new IllegalArgumentException("Type argument cannot be null");
this.clazz = enumType;
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, CodeBaseEnum parameter, JdbcType jdbcType)
throws SQLException {
ps.setInt(i, parameter.code());
}
@Override
public E getNullableResult(ResultSet rs, String columnName) throws SQLException {
return CodeEnumUtil.codeOf(clazz, rs.getInt(columnName));
}
@Override
public E getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return CodeEnumUtil.codeOf(clazz, rs.getInt(columnIndex));
}
@Override
public E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return CodeEnumUtil.codeOf(clazz, cs.getInt(columnIndex));
}
}
2.2 CodeBaseEnum类
package com.adu.spring_test.mybatis.enums;
public interface CodeBaseEnum {
int code();
}
2.3 CodeEnumUtil类
package com.adu.spring_test.mybatis.util;
import com.adu.spring_test.mybatis.enums.CodeBaseEnum;
public class CodeEnumUtil {
/**
* @param enumClass
* @param code
* @param
* @return
*/
public static & CodeBaseEnum> E codeOf(Class enumClass, int code) {
E[] enumConstants = enumClass.getEnumConstants();
for (E e : enumConstants) {
if (e.code() == code)
return e;
}
return null;
}
}
mysql 字符串枚举类型转换_MyBatis里字段到枚举类型的转换/映射相关推荐
- c mysql 二进制图片,想把二进制数据插入到MYSQL库里,字段为MediumBLOB类型.(存的图片)解决思路...
当前位置:我的异常网» VB » 想把二进制数据插入到MYSQL库里,字段为MediumBLOB类 想把二进制数据插入到MYSQL库里,字段为MediumBLOB类型.(存的图片)解决思路 www.m ...
- Java学习(4)—— 布尔类型、基本数据类型转换、基本数据类型和String类型的转换
布尔类型 也叫Boolean类型,boolean只允许取true和false. boolean占一个字节. 适用于逻辑运算,流程控制语句. 有默认类型,是false.但是应该声明为成员变量或是静态变量 ...
- mysql查询枚举类型转换_zendframework获取数据库中枚举类enum的数据并将其转换成数组...
在model中建立这样的模型,在其中写入获取枚举类的方法 请勿盗版,转载请加上出处http://blog.csdn.net/yanlintao1 class Student extends Zend_ ...
- mysql字符串转拼音_MySQL中文字段转拼音
准备:数据库中一下一个表结构 现在要实现对字段 display_name第一个字符转成拼音,即实现字段 pinyin中的效果,可以直接这样 SELECT display_name, ELT(INTER ...
- MySQL:修改表名和字段名和类型
-- 修改表名 rename table old_table to new_table;-- 或者 alter table old_table rename as new_table;-- 修改列名称 ...
- mySQL字符串字段区别_MySQL类型之(字符串列类型区分、数据类型区分)
1.首先CHAR, VARCHAR, TEXT和BINARY, VARBINARY, BLOB的区别: CHAR, VARCHAR, TEXT称为: 非二进制字符串; BINARY, VAR ...
- mysql 定义XML字段_MyBatis之基于XML的属性与列名映射
上一博客主要是对单表的增删改查,比较简单,而且每个属性与table表的列都是一一对应名字也一样,今天主要学习属性与table表列名不一致的处理,主要有两种一是属性与列名不一致,二是枚举的情况,这里暂时 ...
- mysql 将字符串转换数字类型的_MySQL 字符串类型用数字可以查出来 MySQL字符串类型会转换成数字 MySQL隐式类型转换...
一.发现问题 1.在一次MySQL查询中,某字段为 varchar 字符串类型,传入参数值为 int 数字类型,发现查询的结果和预期的不一致. 如: 某两列 name='11' , name = '1 ...
- Mysql字符串字段判断是否包含某个字符串的3种方法
方法一: SELECT * FROM users WHERE emails like "%b@email.com%"; 方法二: 利用MySQL 字符串函数 find_in_set ...
最新文章
- 运行NER/formal_bert_lstm_crf.py“ 报错ModuleNotFoundError: No module named ‘keras_contrib‘
- 模仿Retrofit封装一个使用更简单的网络请求框架
- 帮助你构建自适应布局的30款优秀 jQuery 插件(下篇)
- Linux Kbuild文档 1
- oracle 中的trunc()函数及加一个月,一天,一小时,一分钟,一秒钟方法
- 树莓派摄像头基础配置及测试
- 阿里晓斌:如何做好技术 Team Leader?
- python 装饰器应用
- PHP第十次实验总结,The Clean Architecture in PHP 读书笔记(十)
- python解析html的库_python自带的用于解析HTML的库HtmlParser
- Python程序的执行过程
- 如何成都报计算机考试,成都学院2017上半年计算机考试报名通知
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_3_Stream流中的常用方法_filter...
- 如何通过百度翻译实现整站网页翻译
- cadence ~ PCB排版 必要流程
- 输入输出隔离的半/全双工RS-485/RS-422接口隔离芯片电路
- OptiFDTD应用:纳米盘型谐振腔等离子体波导滤波器
- PMSG孕马血清促性腺激素适用的应用方案
- 饥荒启动服务器显示error,Win10电脑运行饥荒游戏提示error during initialization解决方法...
- 2022黑马Python学习笔记