博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis 自定义 typeHandler 解决枚举枚举
阅读量:3950 次
发布时间:2019-05-24

本文共 4118 字,大约阅读时间需要 13 分钟。

package com.example.demo.handler;import com.example.demo.common.BaseIntEnum;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import org.apache.ibatis.type.MappedJdbcTypes;import org.apache.ibatis.type.MappedTypes;import java.sql.*;/** * @Author lyr * @create 2020/12/19 20:48 */@MappedJdbcTypes(JdbcType.INTEGER)@MappedTypes(BaseIntEnum.class)// @Componentpublic  class BaseEnumTypeHandler
extends BaseTypeHandler
{
/** * 枚举数组的 类 */ private final Class
enumClazz; /** * 枚举数组 */ private final E[] values; /** * 遇到空对象是否设置默认值 */ private E defaultEnum; private E codeOf(int code) {
for (E e : values) {
if (e.getValue() == code) {
return e; } } return null; } public BaseEnumTypeHandler(Class
enumClazz) {
if (enumClazz == null) {
throw new IllegalArgumentException("base enum TypeHandler enum class cannot be null !@!!!"); } this.enumClazz = enumClazz; values = enumClazz.getEnumConstants(); if (values!=null && values.length>0) {
defaultEnum = (E)values[0].getValueWhenObjectFieldNull(); // System.out.println(defaultEnum); } } @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, E e, JdbcType jdbcType) throws SQLException {
// preparedStatement.set preparedStatement.setInt(i, e.getValue()); } @Override public void setParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException {
if (parameter==null) parameter = defaultEnum; super.setParameter(ps, i, parameter, jdbcType); } /** * 可以空的对象 * * @param resultSet * @param s * @return * @throws SQLException */ @Override public E getNullableResult(ResultSet resultSet, String s) throws SQLException {
int code = resultSet.getInt(s); return resultSet.wasNull() ? defaultEnum : codeOf(code); } @Override public E getNullableResult(ResultSet resultSet, int i) throws SQLException {
int code = resultSet.getInt(i); return resultSet.wasNull() ? defaultEnum : codeOf(code); } @Override public E getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
int code = callableStatement.getInt(i); return callableStatement.wasNull() ? defaultEnum : codeOf(code); }}

通用枚举接口

package com.example.demo.common;/** * @Author lyr * @create 2020/12/19 20:37 */public interface BaseIntEnum
> {
/** * 存入数据库的值 * @return */ int getValue(); /** * 当遇到 field 为 null 对象时候,是否设置默认值 * @return */ E getValueWhenObjectFieldNull(); /** * @return 打印的名字 */ String getDisplayName();}

例子:

package com.example.demo.common;import lombok.AllArgsConstructor;import lombok.Getter;import lombok.ToString;/** * @Author lyr * @create 2020/12/19 20:37 */@AllArgsConstructor@Getter@ToStringpublic enum SexIntEnum implements BaseIntEnum
{
MAN(1,"男"), GIRL(0,"女生"), UNKNOWN(-1,"人妖"); private Integer code; private String message; /** * 存入数据库的值 * * @return */ @Override public int getValue() {
return code; } /** * 当遇到 null 对象时候,是否设置默认值 * * @return */ @Override public SexIntEnum getValueWhenObjectFieldNull() {
return UNKNOWN; } /** * @return 打印的名字 */ @Override public String getDisplayName() {
return toString(); }}

配置

yml demo

mybatis:  mapper-locations: classpath:/mapper/**/*.xml  type-aliases-package: com.example.demo.pojo  configuration:    map-underscore-to-camel-case: true  type-handlers-package: com.example.demo.handler.BaseEnumTypeHandler

Junit demo

@Resource    private StudentMapper studentMapper;    @Test    void iiiii() {
studentMapper.insert(new Student()); }

转载地址:http://jyyzi.baihongyu.com/

你可能感兴趣的文章
mysql建表 表名与关键字冲突
查看>>
mysql 创建单表外键关联多表
查看>>
postman使用
查看>>
ClassNotFoundException和NoClassDefFoundError的区别
查看>>
Tomcat Connector三种运行模式(BIO, NIO, APR)的比较和优化
查看>>
spring注解@Primary与@Qualifier
查看>>
annotation之@Autowired、@Inject、@Resource三者区别
查看>>
idea启动微服务找不到配置文件
查看>>
Java通过反射机制调用某个类的方法
查看>>
字节跳到面试题
查看>>
Linux查看物理CPU个数
查看>>
Linux学习之网络IO,磁盘io
查看>>
ES7.6.2安装
查看>>
查看jar依赖树
查看>>
idea运行gradle项目
查看>>
es安装ltr插件
查看>>
开源ltr-es-7.6.2代码到本地idea打开出现各种错误总结
查看>>
Requests实践详解&& python通过连接开启https的elasticsearch7 服务器
查看>>
ES查询流程源码解析
查看>>
ldaps与ldap over TLS
查看>>