spring boot + mybaits 处理枚举类 enum
枚举:

//实现层调用
orderMapper.getOrder(OrderStatus.DISCOUNT);
sql打印:
实际sql: select * from order where orderStatus = DISCOUNT
预期sql: select * from order where orderSatus = 11;
在不使用更改写法
orderMapper.getOrder(OrderStatus.DISCOUNT.getCode());
前提条件下。
源码:org.apache.ibatis.type.BaseTypeHandler 抽象类

抽象方法 :

需要重写 继承 BaseTypeHandler 重写方法
package order.handler; import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType; import common.enums.BaseEnum; public class StringEnumTypeHandler extends BaseTypeHandler<BaseEnum> { @Override
public void setNonNullParameter(PreparedStatement ps, int i, BaseEnum parameter, JdbcType jdbcType)
throws SQLException {
//核心方法 指定枚举获取code的方法。同理 orderMapper.getOrder(OrderStatus.DISCOUNT.getCode());
ps.setString(i, parameter.getCode().toString()); } @Override
public BaseEnum getNullableResult(ResultSet rs, String columnName) throws SQLException {
String val = rs.getString(columnName);
return getEnum(Integer.parseInt(val));
} @Override
public BaseEnum getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return getEnum(Integer.parseInt(rs.getString(columnIndex)));
} @Override
public BaseEnum getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return getEnum(Integer.parseInt(cs.getNString(columnIndex)));
} private BaseEnum getEnum(int val) {
Class<BaseEnum> sexClass = BaseEnum.class;
BaseEnum[] sexs = sexClass.getEnumConstants(); for (BaseEnum se : sexs) {
if (se.getCode() == val) {
return se;
}
}
return null;
}
}
配置mybatis.config

orderMapper.xml
修改前:where type = #{type,jdbcType = int}
修改后:

基类:

所有的枚举都实现这个接口,然后动态加载方法调用枚举的getCode()方法。即可
spring boot + mybaits 处理枚举类 enum的更多相关文章
- java中的枚举类enum
enum SeasonEnum {//枚举类: 本类规定了SeasonEnum(季节)类只能有四个对象SPRING,SUMMER,AUMUTN,WINTER //创建枚举类的的四个对象SPRING,S ...
- Java枚举类enum
枚举类enum是JDK1.5引入的,之前都是用public static final int enum_value来代替枚举类的.枚举类enum是一种特殊的类,它默认继承了类java.lang.Enu ...
- Java基础(七)泛型数组列表ArrayList与枚举类Enum
一.泛型数组列表ArrayList 1.在Java中,ArrayList类可以解决运行时动态更改数组的问题.ArrayList使用起来有点像数组,但是在添加或删除元素时,具有自动调节数组容量的功能,而 ...
- spring boot+mybaits+mysql+generato(逆向工程)+前后台数据交互
如按照我博客上没有弄出来 请在下面留言 我好修改 谢谢 小弟使用的是Eclipse 首先下载STS插件 help--->Elipse Marketplace--->find搜索栏里面搜索S ...
- java 数据类型:枚举类enum、对比方法compreTo()、获取名字.name()、获取对应值的枚举类Enum.valueOf()、包含构造方法和抽象方法的enum;实现接口;
问题引入 为了将某一数据类型的值限定在可选的合理范围内,比如季节只有四个:春夏秋冬. 什么是枚举类 Java5之后新增了enum关键字(他与class,interface关键字地位相同)用来定义枚举类 ...
- java 枚举类 enum 总结
枚举定义: enum是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把这些量 ...
- java 枚举 类 enum
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializab ...
- 枚举类 enum,结构体类 struct
1.枚举类型的值,直观易于理解,见词知意. 格式: enum 枚举类名:值类型 { 值1, 值2, 值n } 每个值默认(省略“:值类型”)以int型数据存储,从0开始. 使用格式:枚举类名 变量=枚 ...
- spring boot JPA中实体类常用注解
spring boot jpa中的注解很多,参数也比较多.没必要全部记住,但是经常查看官方文档也比较麻烦,记录一下一些常用的注解.通过一些具体的例子来帮助记忆. @Entity @Table(name ...
随机推荐
- 用.net4中的DynamicObject实现简单AOP
public class DynamicWrapper : DynamicObject { private readonly object source; public DynamicWrapper( ...
- linux高频操作: host,用户管理,免密登陆,管道,文件权限,脚本,防火墙,查找
1. 修改hosts和hostname 2. 用户管理 3. 免秘登陆 4. 文件末尾添加 >> 5. 设置可执行文件 6. 任何地方调用 7. Centos6 永久关闭防火墙 8. Ce ...
- Scrapy 安装与使用
Scrapy的安装: 当前环境win10,python_3.6.4,64bit.在命令提示符窗口运行pip install Scrapy,出现以下结果: building 'twisted.test. ...
- 阿里P7详细解答JVM性能调优之监控工具
javap 和 javac javac -verbose 类名.java java -verbose 类名 javap -c 类名 javap -verbose 类名 JAVAP -HELP 用法: ...
- c# 输出参数-out
- Yum三方仓库——EPEL
参考:什么是EPEL 及 Centos上安装EPEL 参考:How to Enable EPEL Repository for RHEL/CentOS 7.x/6.x/5.x 前言 RHEL以及他的衍 ...
- 关于日期格式yyyy-MM-dd和YYYY-MM-dd
原文:https://blog.csdn.net/guotufu/article/details/85696296 开发的时候用到这个类进行日期的转换,想转换的日期格式为“YYYY/MM/dd”,结果 ...
- Nginx access_log日志添加返回字段
主要为方便单用户请求日志回溯分析 记录用户标记. 将用户信息打印在access_log 日志里. 步骤: 1.重写nginx 的log格式 一般是地址是 /etc/nginx/conf.d/ng ...
- Luogu P1294 高手去散步
Luogu P1294 高手去散步 因为数据较小,所以用邻接矩阵存图即可. 将1号点到$t$号点分别设为起点,深搜遍历路线,开一个$vis$数组,记录每一个点是否被访问过.每次求出从当前起点出发的最大 ...
- 1260:【例9.4】拦截导弹(Noip1999)
题目来源:http://ybt.ssoier.cn:8088/problem_show.php?pid=1260 1260:[例9.4]拦截导弹(Noip1999) 时间限制: 1000 ms ...