博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Springboot整合Mybatis使用TypeHandler来转换数据库中的数据
阅读量:5113 次
发布时间:2019-06-13

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

TypeHandler转换指定数据库中数据为Enum枚举

  在一些时候,我们的数据库需要存放一些例如状态信息的数据,通常的我们使用int整型来保存,例如(0:失败,1:成功)等,用这样的数据是可以的,但对于前端的编程是不友好的,所以我们可以使用TypeHandler来进行一个转换,将其转化成一个枚举型。

  一、数据库中的数据定义

    这里的user_state和user_priority表示了一些状态信息(范围是整数0~5),接下来我们要将这个转化为枚举型

    

  二、创建枚举Enum类

    以User_state为例:

package com.snapshot2.demo.enumeration;public enum  UserStateEnum {    NORMAL(0,"正常状态"),    FROZEN(1,"冻结"),    BAN(2,"禁用"),    MUTE(3,"禁言"),    SENSITIVE(4,"敏感用户"),    DYF(5,"这是创作者董一帆的");    private int stateCode;    private String stateString;    public static UserStateEnum getUserStateByCode(int stateCode){        for (UserStateEnum stateEnum: values()){            if(stateEnum.getStateCode() == stateCode){                return stateEnum;            }        }        return null;    }    /* Constructor */    UserStateEnum(int stateCode, String stateString) {        this.stateCode = stateCode;        this.stateString = stateString;    }    /* Getter and Setter */    public int getStateCode() {        return stateCode;    }    public void setStateCode(int stateCode) {        this.stateCode = stateCode;    }    public String getStateString() {        return stateString;    }    public void setStateString(String stateString) {        this.stateString = stateString;    }}

  

  三、创建相应得TypeHandler类,继承于BaseTypeHandler<T>类,并重写相应得方法

   1.这里的<T>是我们指定转化的类型

   2.@MappedJdbcTypes注解声明数据库中对应数据类型

   3.@MappedTypes(value = UserStateEnum.class)声明转化后的类型

package com.snapshot2.demo.typehandler;import com.snapshot2.demo.enumeration.UserStateEnum;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.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/* 数据库中的数据类型 */@MappedJdbcTypes(JdbcType.INTEGER)/* 转化后的数据类型 */@MappedTypes(value = UserStateEnum.class)public class UserStateTypeHandler extends BaseTypeHandler
{ @Override public void setNonNullParameter(PreparedStatement preparedStatement, int i, UserStateEnum userStateEnum, JdbcType jdbcType) throws SQLException { preparedStatement.setInt(i,userStateEnum.getStateCode()); } @Override public UserStateEnum getNullableResult(ResultSet resultSet, String s) throws SQLException { int code =resultSet.getInt(s); if(code>=0&&code<=5){ return UserStateEnum.getUserStateByCode(code); } return null; } @Override public UserStateEnum getNullableResult(ResultSet resultSet, int i) throws SQLException { int code = resultSet.getInt(i); if(code>=0&&code<=5){ return UserStateEnum.getUserStateByCode(code); } return null; } @Override public UserStateEnum getNullableResult(CallableStatement callableStatement, int i) throws SQLException { int code = callableStatement.getInt(i); if(code>=0&&code<=5){ return UserStateEnum.getUserStateByCode(code); } return null; }}

  四、最后在application.properties配置文件中springboot指定TypeHandler所在的包

mybatis.type-handlers-package=com.snapshot2.demo.typehandler

 

    

转载于:https://www.cnblogs.com/dyf-stu/p/10162301.html

你可能感兴趣的文章
使用Xshell密钥认证机制远程登录Linux
查看>>
BZOJ2459 : [BeiJing2011]神秘好人
查看>>
Django入门示例之被解放的姜戈——01 初试天涯(安装及启动)
查看>>
OpenCV之响应鼠标(三):响应鼠标信息
查看>>
python7 数据类型的相互转化 字符编码
查看>>
Android 画图之 Matrix(一)
查看>>
React Native - 2 控件Flexbox
查看>>
前缀和
查看>>
Jquery插件汇集:
查看>>
Linux 启动、关闭、重启网络服务的两种方式
查看>>
List<T>列表通用过滤模块设计
查看>>
【模板】最小生成树
查看>>
设计模式之结构型模式
查看>>
修改navigationitem的title颜色字体阴影等属性
查看>>
前端开发中提到的“脚手架”到底指什么,CLI?gulp 和 gulp-cli有什么区别
查看>>
iis7规范URL及利用web.config进行重定向
查看>>
【Linux】入门篇 环境搭建
查看>>
poj2569
查看>>
使用mmap在内存中读写文件
查看>>
使用pygal_maps_world.i18n中数据画各大洲地图
查看>>