在底层使用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字段映射枚举类型的更多相关文章

  1. hibernate字段映射枚举类型

    上一篇介绍了mybatis字段映射枚举类型,这一篇给大家介绍一下hibernate字段怎么去映射枚举类型的(这只是一种参考方式,映射方法还有很多种). 还是以上篇sku表为例,sku表里一个statu ...

  2. MyBatis里字段到枚举类型的转换/映射

    一.简介 我们在用MyBatis里,很多时间有这样一个需求:bean里有个属性是枚举,在DB存储时我们想存的枚举的代号,从DB拿出来时想直接映射成目标枚举类型,也即代号字段与Java枚举类的相互类型转 ...

  3. MyBatis(八):Mybatis Java API枚举类型转化的用法

    最近工作中用到了mybatis的Java API方式进行开发,顺便也整理下该功能的用法,接下来会针对基本部分进行学习: 1)Java API处理一对多.多对一的用法: 2)增.删.改.查的用法: 3) ...

  4. MyBatis处理一行数据-MyBatis使用sum语句报错-MyBatis字段映射-遁地龙卷风

    第二版 (-1)写在前面 我用的是MyBatis 3.2.4 (0) 编程轶事 select sum(value) ,sum(value2)  from integral_list where  Me ...

  5. Entlib DAAB映射枚举类型

    1. IRowMapper<UserDto> addressMapper = MapBuilder<UserDto> .MapAllProperties() .Map(p =& ...

  6. MyBatis 查询映射自定义枚举

    背景                  MyBatis查询若想映射枚举类型,则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用         ...

  7. 【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" ...

  8. 学习Spring Boot:(十二)Mybatis 中自定义枚举转换器

    前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型,数据库存储的是枚举的值,发现它不能自动装载. 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是:org. ...

  9. ServiceStack.Ormlit sqlserver枚举类型映射字段类型为varchar

    请当枚举类型上面加上[Flags]特性就可以了.

随机推荐

  1. HTML中的超链接(Hyperlink)

    超链接 ★超链接简单介绍 超链接可以说是网页中最常见的元素.超链接的英文名是hyperlink.每个网站都是由众多的网页组成,网页之间通常都是通过链接的方式相互关联的. 超链接能够让浏览者在各个独立的 ...

  2. jquery设置css属性几种方式

    用css()方法返回元素的样式属性 $("div").css("padding-left")); 用css()设置样式 $("div").c ...

  3. mysql 报错从 新安装

    卸载从新安装,综合运用 https://www.jb51.net/article/146050.htm https://www.jb51.net/article/90275.htm https://w ...

  4. Confluence 6 文件

    通过将你的文件上传到 Confluence 能够让你在一个统一的地方分享你项目小组的 PDF 文件,Office 文档,图片以及更多的内容. 自动版本,即时预览,权限控制和全文搜索意味着在网络驱动器上 ...

  5. Spring Boot教程(二十六)使用Spring Security安全控制

    准备工作 首先,构建一个简单的Web工程,以用于后续添加安全控制,也可以用之前Chapter3-1-2做为基础工程.若对如何使用Spring Boot构建Web应用,可以先阅读<Spring B ...

  6. JavaWeb-SpringBoot_使用H2数据库实现用户注册登录

    使用Gradle编译项目 传送门 前端资源同:使用MySQL数据库实现用户管理_demo 传送门 H2:SpringBoot内置持久化数据库  使用H2数据库实现用户注册登录 用户可以在index.h ...

  7. Android_(游戏)打飞机06:后续

    (游戏)打飞机01:前言 传送门 (游戏)打飞机02:游戏背景滚动 传送门 (游戏)打飞机03:控制玩家飞机 传送门 (游戏)打飞机04:绘画敌机.添加子弹   传送门 (游戏)打飞机05:处理子弹, ...

  8. python学习之路(10)--难点

    递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以 ...

  9. nginx 与location语法详解

    Location语法优先级排列   匹配符 匹配规则 优先级 = 精确匹配 1 ^~ 以某个字符串开头 2 ~ 区分大小写的正则匹配 3 ~* 不区分大小写的正则匹配 4 !~ 区分大小写不匹配的正则 ...

  10. golang 通过reflect反射修改值

    不是所有的反射值都可以修改.对于一个反射值是否可以修改,可以通过CanSet()进行检查. 要修改值,必须满足: 可以寻址 可寻址的类型: 指针指向的具体元素 slice的元素 可寻址的结构体的字段( ...