mybatis处理枚举转换
1从数据库返回的值转成指定的枚举类型–通过resultMap 指定typeHandler即可
<select id="listAll" resultMap="userMap">select * from user</select><resultMap id="userMap" type="com.taku.bean.User"><result property="id" column="id"/><result property="state" column="state" typeHandler="com.taku.UserStateTypeHandler"/></resultMap>
2 返回给前端时返回枚举指定的内容
使用@JsonValue 注解标记枚举类中需要放回字段的get方法
@JsonValue // 用于返回前端时指定返回对应字段的值 而不是返回枚举名public String getValue() {return value;}
3插入式插入枚举类的指定字段
<insert id="add" parameterType="com.taku.bean.User">insert into user (id,name,state) values(#{id},#{name},#{state.desc})</insert>
package com.taku.bean;import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.Data;// 用户状态
public enum UserState {USING("USING","0"),STOP("STOP","1"),UNKNOW("UNKNOW","2");UserState(String value,String desc) {this.value = value;// desc 数据库中的字段,char(1)this.desc = desc;}private String value;private String desc;@JsonValue // 用于返回前端时指定返回对应字段的值 而不是返回枚举名public String getValue() {return value;}public void setValue(String value) {this.value = value;}@JsonCreatorpublic String getDesc() {return desc;}public void setDesc(String desc) {this.desc = desc;}// 通过值获取对应的枚举public static UserState getUserState(String value) {UserState[] enumConstants = UserState.class.getEnumConstants();for (UserState enumConstant : enumConstants) {if (value.equals(enumConstant.getDesc())) {return enumConstant;}}return UNKNOW;}
}
用户类
package com.taku.bean;import lombok.Data;import java.util.List;@Data
public class User {private Long id;private String name;private Integer age;private String email;private String cid;private UserState state;//List<User> users;@Overridepublic String toString() {final StringBuffer sb = new StringBuffer("User{");sb.append("id=").append(id);sb.append(", name='").append(name).append('\'');sb.append(", age=").append(age);sb.append(", email='").append(email).append('\'');sb.append(", cid='").append(cid).append('\'');sb.append(", state=").append(state);//sb.append(", users=").append(users);sb.append('}');return sb.toString();}
}
重点需要自己实现枚举类型转换,通过继承mabtsi的BaseTypeHandler 实现自定义枚举类型的转换工作
package com.taku;import com.taku.bean.UserState;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class UserStateTypeHandler extends BaseTypeHandler<UserState> {/*用于定义设置参数时,该如何把Java类型的参数转换为对应的数据库类型;*/@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, UserState parameter, JdbcType jdbcType) throws SQLException {// baseTypeHandler已经帮我们做了parameter的null判断ps.setString(i, parameter.getValue());}// 根据字段名匹配枚举类型 一般都是走这个方法@Overridepublic UserState getNullableResult(ResultSet rs, String columnName) throws SQLException {// 根据数据库存储类型决定获取类型,本例子中数据库中存放String类型String i = rs.getString(columnName);if (rs.wasNull()) {return null;} else {// 根据数据库中的value值,定位PersonType子类return UserState.getUserState(i);}}@Overridepublic UserState getNullableResult(ResultSet rs, int columnIndex) throws SQLException {String i = rs.getString(columnIndex);if (rs.wasNull()) {return null;} else {// 根据数据库中的value值,定位PersonType子类return UserState.getUserState(i);}}// 存储过程的返回先不写,不需要使用到@Overridepublic UserState getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {return null;}
}
待完成:
前端参数传递枚举类型转换处理
mybatis处理枚举转换相关推荐
- (转)C# Enum,Int,String的互相转换 枚举转换
(转)C# Enum,Int,String的互相转换 枚举转换 Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来 ...
- c# 编程入门第六课常量,枚举,枚举转换成其他类型变量(枚举和int,转 string字符串转枚举),结构体,数组,冒泡排序,实际使用排序,方法(函数)
c# 编程入门第六课 文章目录 c# 编程入门第六课 1. 常量 2. 枚举 3. 枚举转换成其他类型变量 3.1 枚举和int 3.2 转string 3.2 字符串转枚举 4.结构体 5.数组 7 ...
- 使用MyBatis简化枚举类值的存储和读取
场景描述 我们在实际场景中经常会遇到需要将枚举值存储到数据库中,或是将从数据库中查询到的值对应到枚举类上的情况. 比如表process大致定义如下: -- ---------------------- ...
- Java、Mysql、MyBatis 中枚举 enum 的使用
From: https://yulaiz.com/java-mysql-enum/ Java 和 MySql 中都有枚举的概念,合理的使用枚举,可以让代码阅读和数据库数据查询更加直观.高效.那么我们怎 ...
- C# Enum,Int,String的互相转换 枚举转换
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举.注意:枚举类型的基类 ...
- (转载)C#:Enum、Int和String的互相转换,枚举转换
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...
- Enum,Int,String的互相转换 枚举转换
Enum为枚举提供基类,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 注意:枚举类型的基 ...
- java 枚举转换_Java 枚举与字符串的转换
原标题:Java 枚举与字符串的转换 (点击上方公众号,可快速关注) 来源:xieyu_zy 链接:blog.csdn.net/xieyuooo/article/details/8483267 文章简 ...
- 【JAVA-Mybatis】MyBatis 常用逻辑符号转换
myBatis中逻辑运算符号的处理: myBatis中查询数据时经常会用到逻辑运算符,> < >= <=这些运算符,但是myBatis不支持直接使用这些运算符, 所以需要转化一 ...
最新文章
- 抽取、转换和装载介绍(八)实时的意义(待续)
- 读后感《我回阿里的29个月》
- 极速pdf编辑器的水印如何去掉_如何修改PDF?有没有详细的PDF编辑器操作方法?...
- centos双系统只有linux,Centos添加Windows/Centos双系统启动
- 如何将unity3d动画嵌入html,在Unity3D中使用精灵动画引擎制作动画的两种方法
- 【报告分享】2020全球网络趋势报告.pdf(附下载链接)
- java静态方法求n,java之静态属性和静态方法
- 超级干货 | 用万字文章总结25种正则化方法(值得收藏)
- 关于cad2010的激活
- 魔百盒UNT403A UNT413A 卡刷精简固件-芯片S905L3
- 工业铝型材与钢铁之间的区别
- onenote标注pdf笔记_你们怎么用onenote做读书笔记呢?
- 电机是怎么转的?(电机原理+电机控制+电机分类)
- UNITER多模态预训练模型原理加代码解读
- 教你用iTOL轻松绘制高颜值系统进化树
- 红米NOTE8PRO拍照技巧
- KETTLE8.2在linux(rehl)6.6中安装部署并配置公共数据库链接
- matlab使用出现矩阵为奇异值、接近奇异值或缩放错误。结果可能不准确。RCOND = NaN。
- STRING:蛋白质相互作用(PPI网络)数据库简介
- 查看NAND Flash空间大小