mybatis字段映射枚举类型
在底层使用mybatis的时候,我们可能会需要把表里的字段映射到Java里面的枚举类,现总结下工作中的用法:
sku表里一个status_type字段为int类型。(这里是postgresql的脚本)
status_type int4 NULL
Java里面对应生成的枚举类为:
public enum SkuStatusType implements DbEnum, LocalString {
PRODUCT(0, false, "masterdata.skuStatus.product"),
BUYING(1, false, "masterdata.skuStatus.buying"),
SALE(2, false, "masterdata.skuStatus.sale");
private int dbConstant;
private String messageKey;
private OrderState(int dbConstant, boolean hasBeenDispatched, String messageKey) {
this.dbConstant = dbConstant;
this.hasBeenDispatched = hasBeenDispatched;
this.messageKey = messageKey;
}
@Override
public Integer getConstant() {
return this.dbConstant;
}
@Override
public String messageKey() {
return this.messageKey;
}
}
在配置xml文件之前我们需要为自己的项目建一个工具类:
package com.lcc.util; 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 com.lcc.api.domain.DbEnum; public class DbEnumTypeHandler extends BaseTypeHandler<DbEnum> { private Class<DbEnum> type; public DbEnumTypeHandler(Class<DbEnum> type){
this.type = type;
} @Override
public void setNonNullParameter(PreparedStatement ps, int i,
DbEnum parameter, JdbcType jdbcType) throws SQLException {
ps.setInt(i, parameter.getConstant());
} @Override
public DbEnum getNullableResult(ResultSet rs, String columnName)
throws SQLException {
int constant = rs.getInt(columnName);
if(rs.wasNull()){
return null;
}
else{
return convert(constant);
}
} @Override
public DbEnum getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
int constant = rs.getInt(columnIndex);
if(rs.wasNull()){
return null;
}
else{
return convert(constant);
}
} @Override
public DbEnum getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
int constant = cs.getInt(columnIndex);
if(cs.wasNull()){
return null;
}
else{
return convert(constant);
}
} private DbEnum convert(int constant) {
DbEnum[] dbEnums = type.getEnumConstants();
for (DbEnum dbEnum : dbEnums) {
if(dbEnum.getConstant().equals(constant)){
return dbEnum;
}
}
return null;
} }
util class里面的DbEnum domain 和 Localisable domain:(一般项目里的枚举实现这两个domain interface)
package com.lcc.api.domain;
import java.io.Serializable;
public interface DbEnum extends Serializable {
public Integer getConstant();
}
package com.lcc.api.domain;
public interface Localisable {
String messageKey();
}
看下mybatis的xml文件配置:
<result column="status_type" property="statusType"
typeHandler="com.lcc.util.StringEnumTypeHandler" />
此时表字段映射枚举类就大功告成了,看完之后你可以自己上手试一下。
这只是其中的一种方法,还有其他的方法可以在度娘和谷哥上面搜索一下。
mybatis字段映射枚举类型的更多相关文章
- hibernate字段映射枚举类型
上一篇介绍了mybatis字段映射枚举类型,这一篇给大家介绍一下hibernate字段怎么去映射枚举类型的(这只是一种参考方式,映射方法还有很多种). 还是以上篇sku表为例,sku表里一个statu ...
- MyBatis里字段到枚举类型的转换/映射
一.简介 我们在用MyBatis里,很多时间有这样一个需求:bean里有个属性是枚举,在DB存储时我们想存的枚举的代号,从DB拿出来时想直接映射成目标枚举类型,也即代号字段与Java枚举类的相互类型转 ...
- MyBatis(八):Mybatis Java API枚举类型转化的用法
最近工作中用到了mybatis的Java API方式进行开发,顺便也整理下该功能的用法,接下来会针对基本部分进行学习: 1)Java API处理一对多.多对一的用法: 2)增.删.改.查的用法: 3) ...
- MyBatis处理一行数据-MyBatis使用sum语句报错-MyBatis字段映射-遁地龙卷风
第二版 (-1)写在前面 我用的是MyBatis 3.2.4 (0) 编程轶事 select sum(value) ,sum(value2) from integral_list where Me ...
- Entlib DAAB映射枚举类型
1. IRowMapper<UserDto> addressMapper = MapBuilder<UserDto> .MapAllProperties() .Map(p =& ...
- MyBatis 查询映射自定义枚举
背景 MyBatis查询若想映射枚举类型,则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用 ...
- 【hibernate postgresql】注解@TypeDef/@Enumerated/数据库字段gender为枚举类型,从前台接受到实体后进行保存报错:org.postgresql.util.PSQLException: ERROR: column "gender" is of type gender but expression is of type character varying
数据库字段gender为枚举类型,从前台接受到实体后进行保存报错:org.postgresql.util.PSQLException: ERROR: column "gender" ...
- 学习Spring Boot:(十二)Mybatis 中自定义枚举转换器
前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型,数据库存储的是枚举的值,发现它不能自动装载. 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是:org. ...
- ServiceStack.Ormlit sqlserver枚举类型映射字段类型为varchar
请当枚举类型上面加上[Flags]特性就可以了.
随机推荐
- “M_PI_2”: 重复定义的宏
问题警告:“M_PI_2”: 重复定义的宏 分析:在Visual Studio上使用math.h库时与其他库数学库冲突,我们可以通过添加宏定义“_USE_MATH_DEFINES”来消除math.h定 ...
- JavaScript 数组2—关联数组
㈠什么是关联数组 可以自定义下标名称的数组 ㈡为什么 索引数组中的数字下标没有明确的意义 ㈢何时 只希望每个元素都有专门的名称时 ㈣如何:2步 1)创建空数组 2)向空数组中添加新元素,并自定义下标名 ...
- LA 3263 好看的一笔画 欧拉几何+计算几何模板
题意:训练指南260 #include <cstdio> #include <cstring> #include <algorithm> #include < ...
- 【IOI2018】组合动作
还是自己水平不够,想了两天没想出来--(然后我就被其他人吊打了) 这种题目看了题解就秒会,自己想就想不出来-- 下面是我的心路历程(我就在想出来又叉掉的不断循环中度过--) 开始把题目看成了查询限制 ...
- Value '0000-00-00' can not be represented as java.sql.Date解决办法
java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp 问题描述 ...
- MVC 小demo
.field-validation-error { color: #f00; } .field-validation-valid { display: none; } .input-validatio ...
- moment 时间格式化
使用方法: 引入 moment 的包 moment(要处理的时间).format(时间的格式): vue 的过滤器为例: str 代表要处理的时间 orf 代表 时间的格式
- Arrays类与Collections类
java.util.Arrays类包含一个静态的工厂,允许数组被视为列表.以下是关于数组的要点: 这个类包含了各种方法来操作数组(比如排序和搜索). 在这个类中的方法抛出NullPointerExce ...
- 一些 postman
听了:https://v.qq.com/x/page/f0816egftuw.html npm 是 node package manager, Nodejs下的包管理器.安装完 nodejs 后(no ...
- OpenCV学习笔记(5)——颜色空间转换
学习如歌对图像进行颜色空间转换,从BGR到灰度图,或者从BGR到HSV等 创建一个程序用来从一幅图像中获取某个特定颜色的物体 1.转换颜色空间 OpenCV中有超过150种进行颜色空间转化的方法,但是 ...