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 ...
随机推荐
- ideaui安装破解、相关配置、JRebel破解
前言: Ideaui 2019(官网 https://www.jetbrains.com/idea/?fromMenu) 安装软件就简单啦,下载选择路径就完事了,注意文件名全英文: 但是按照咱们传 ...
- 表单送件前的Check(二) (未完)
#region 新增表单前的Check动作 public static void NewFormRequestCheck(string _FormID, string _VocaEmpID, stri ...
- 在Windows平台搭建C语言开发环境
一.在Windows平台搭建DEV C++集成开发环境 官网 https://sourceforge.net/projects/orwelldevcpp/ 中下载Dev C++运行即可 环境准 ...
- java开发中常用语(词汇)含义
DAO:Data Access Objects(数据存取对象): DTO:Data Transfer Object: AR:active record:
- Spring之IOC原理及代码详解
一.什么是IOC 引用 Spring 官方原文:This chapter covers the Spring Framework implementation of the Inversion of ...
- List转换字典去重问题
数据源 var list = new List<TestClass> { ,Name="}, ,Name="}, ,Name="}, ,Name=" ...
- 【ansible】密钥免密登陆使用重点
Ansible 密钥免密登陆使用重点 1.配置/etc/ansible/hosts 2.配置公钥以及秘钥 authorized_keys 放置公钥文件 .ssh 放置密钥文件 密钥文件名称必须为 id ...
- Python_比较运算符
1.比较运算符
- Linux学习之四-Linux发行版及版本比较
Linux发行版及版本比较 三大家族: Fedora是基于RHEL,CentOS,Scientific Linux, 和Oracle Linux的社区版本.相比RHEL,Fedora打包了显著的更多的 ...
- 温控PID自测验程序
#pragma once #ifndef _PID_H_ #define _PID_H_ #include <vector> #include <map> using name ...