MyBatis配置项--处理枚举类型

若想映射枚举类型Enum,则需要从EnumTypeHandler或者EnumOrdinalTypeHandler中选一个来使用。

比如说想存储取近似值时用到的舍入模式。默认情况下,MyBatis会利用EnumTypeHandler来把Enum值转换成对应的名字。

注意EnumTypeHandler在某种意义上来说是比较特别的,其他的处理器只针对某个特定的类,而它不同,它会处理任意继承了Enum的类。

不过,有时可能不想存储名字,相反,DBA会坚持使用整型值代码。这也是一样轻而易举:在配置文件中把EnumOrdinalTypeHandler加到typeHandlers中即可,这样每个RoundingMode将通过他们的序数值来映射成对应的整型。


<!-- mybatis-config.xml -->

<typeHandlers>

<typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="java.math.RoundingMode"/>

</typeHandlers>

但怎样能将同样的Enum既映射成字符串又映射成整型呢?

自动映射器(auto-mapper)会自动地选用EnumOrdinalTypeHandler来处理,所以如果想用普通的EnumTypeHandler,就必须要显示地为那些SQL语句设置要使用的类型处理器。


<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="org.apache.ibatis.submitted.rounding.Mapper">

<resultMap type="org.apache.ibatis.submitted.rounding.User" id="usermap">

<id column="id" property="id"/>

<result column="name" property="name"/>

<result column="funkyNumber" property="funkyNumber"/>

<result column="roundingMode" property="roundingMode"/>

</resultMap>

<select id="getUser" resultMap="usermap">

select * from users

</select>

<insert id="insert">

insert into users (id, name, funkyNumber, roundingMode) values (

#{id}, #{name}, #{funkyNumber}, #{roundingMode}

)

</insert>

<resultMap type="org.apache.ibatis.submitted.rounding.User" id="usermap2">

<id column="id" property="id"/>

<result column="name" property="name"/>

<result column="funkyNumber" property="funkyNumber"/>

<result column="roundingMode" property="roundingMode" typeHandler="org.apache.ibatis.type.EnumTypeHandler"/>

</resultMap>

<select id="getUser2" resultMap="usermap2">

select * from users2

</select>

<insert id="insert2">

insert into users2 (id, name, funkyNumber, roundingMode) values (

#{id}, #{name}, #{funkyNumber}, #{roundingMode, typeHandler=org.apache.ibatis.type.EnumTypeHandler}

)

</insert>

</mapper>

注意,这里的select语句强制使用resultMap来代替resultType。

原文地址:https://www.cnblogs.com/arrows/p/10342301.html

时间: 2024-10-08 16:00:11

MyBatis配置项--处理枚举类型的相关文章

mybatis中对枚举类型的处理

EnumTypeHandler存入数据库的是枚举的name,EnumOrdinalTypeHandler存入数据库的是枚举的位置.例如下方的枚举,当我们有一个枚举值是EStatus.init时,这时我们使用mybatis EnumTypeHandler存入数据库的是"init"字符串:而EnumOrdinalTypeHandler存入的是3,因为init是第四个值,第一个值disable的index是0. public enum EStatus { disable("0&qu

MyBatis对于Java对象里的枚举类型处理

平时咱们写程序实体类内或多或少都会有枚举类型属性,方便嘛.但是mybatis里怎么处理他们的增删改查呢? 要求: 插入的时候,会用枚举的定义插入数据库,我们希望在数据库中看到的是数字或者其他东西: 查询的时候,数据库的值可以自动转换为我们对应的枚举值. 举例,我有一个这样的枚举类型: Java Code复制内容到剪贴板 package cn.com.shuyangyang.domain; public enum UserStatus { /** 无效*/ DISABLED(0), /** 有效 

mybatis 处理枚举类型

MyBatis支持持久化enum类型属性.假设t_user表中有一列gender(性别)类型为 varchar2(10),存储 MALE 或者 FEMALE 两种值.并且,User对象有一个enum类型的gender 属性,如下所示: public enum Gender { MALE,FEMALE; } 默认情况下MyBatis使用EnumTypeHandler来处理enum类型的Java属性,并且将其存储为enum值的名称.我们不需要为此做任何额外的配置.可以像使用基本数据类型属性一样使用e

mybatis扩展之类型处理器(枚举类型处理)

Employee.java(省略getter和setter方法) private Integer id; private String lastName; private String gender; private String email; private EmpStatus empStatus=EmpStatus.LOGOUT; private Department dept; EmpStatus.java package com.gong.mybatis.bean; public enu

mybatis扩展之自定义类型处理器处理枚举类型

全局配置: <typeHandlers> <typeHandler handler="com.gong.mybatis.typeHandler.MyEnumEmpStatusTypeHandler" javaType="com.gong.mybatis.bean.EmpStatus"/> <!-- <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHa

C#枚举类型的常用操作总结

枚举类型是定义了一组"符号名称/值"配对.枚举类型是强类型的.每个枚举类型都是从system.Enum派生,又从system.ValueType派生,而system.ValueType又从system.Object派生,所以枚举类型是指类型. 编译枚举类型时,C#编译器会把每个符号转换成类型的一个常量字段.C#编译器将枚举类型视为基元类型. 1.获取枚举列表:         /// <summary>         /// 获取枚举列表         /// <

获取枚举类型Description特性的描述信息

C#中可以对枚举类型用Description特性描述. 如果需要对Description信息获取,那么可以定义一个扩展方法来实现.代码如下: public static class EnumExtensions { public static string GetDescription(this object value) { if (value==null) return string.Empty; Type type = value.GetType(); var fieldInfo = ty

C++ Primer 笔记——枚举类型

1.和类一样,每个枚举类型定义了一种新的类型.枚举属于字面值常量类型. 2.C++包含两种枚举:限定作用域的和不限定作用域的.C++11新标准引入了限定作用域的枚举类型. enum class /*struct*/ MyEnum { A = 0}; // 限定作用域的枚举 enum class /*struct*/ MyEnum1 { A = 0 }; // 限定作用域的枚举可以有重复的名字,使用时也必须加上作用域 enum MyEnum2 { B = 0 }; // 不限定作用域的枚举 enu

笔记:枚举类型

枚举类型的定义格式如: public enum Size{ SMALL,MEDIUM,LARGE,EXTRA_LARGE} ? ? 实际上,这个声明定义了一个类 size,该类是一个特殊的类,可以定义自己的数据字段.方法.可以实现接口,也可以定义自己的构造器.但枚举类使用 enum 定义后在编译后默认继承了 java.lang.Enum 类,而不是普通的继承 Object类.Enum 声明类继承了 Serializable 和 Comparable 两个接口.且采用 enum 声明后,该类会被编