在底层使用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. SEO搜索引擎优化是什么?

    ㈠什么是SEO? 搜索引擎优化,又称为SEO,即Search Engine Optimization,它是一种通过分析搜索引擎的排名规律,了解各种搜索引擎怎样进行搜索.怎样抓取互联网页面.怎样确定特定 ...

  2. jprofiler 监听远程java项目

    1.下载.安装windows和linux版的jprofile.注意:若监控的是springboot.springcloud项目,切记本地和服务器上的jprofile要版本保持一致,本人亲自踩过坑. 官 ...

  3. [pytorch笔记] 调整网络学习率

    1. 为网络的不同部分指定不同的学习率 class LeNet(t.nn.Module): def __init__(self): super(LeNet, self).__init__() self ...

  4. mysql 查询一个月的数据

    //今天 select * from 表名 where to_days(时间字段名) = to_days(now()); //昨天 SELECT * FROM 表名 WHERE TO_DAYS( NO ...

  5. C++入门经典-例6.20-修改string字符串的单个字符

    1:使用+可以将两个string 字符串连接起来.同时,string还支持标准输入输出函数.代码如下: // 6.20.cpp : 定义控制台应用程序的入口点. // #include "s ...

  6. 利用MFC在控件内将txt中的数据画图

    1:采集txt文件中的数据测试程序如下: #include "stdafx.h" #include <fstream> #include "iostream& ...

  7. JAVA-ThreadPoolExecutor 线程池

    一.创建线程池 /** * @param corePoolSize 核心线程池大小 * 当提交一个任务到线程池时,如果当前 poolSize < corePoolSize 时,线程池会创建一个线 ...

  8. leetcode-easy-trees-102. Binary Tree Level Order Traversal-YES

    mycode  98.56% # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x ...

  9. jqGrid细节备注—jqGrid中自定义格式,URL格式

    本文来自:http://cnn237111.blog.51cto.com/2359144/782137 jqGrid中自定义格式,URL格式 当官方自带的showlink用起来不是十分顺手,因此可以考 ...

  10. Python字符和字符值(ASCII或Unicode码值)转换方法

    Python字符和字符值(ASCII或Unicode码值)转换方法 这篇文章主要介绍了Python字符和字符值(ASCII或Unicode码值)转换方法,即把字符串在ASCII值或者Unicode值之 ...