mybatis-枚举TypeHandler用法

论坛 期权论坛 脚本     
匿名技术用户   2020-12-28 02:22   66   0

(一)EnumOrdinalTypeHandler

mybatis-config.xml

<typeHandlers>
    <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.mzs.entity.SexEnum"/>
</typeHandlers>

javaType得指定枚举类(我特好奇,使用枚举类的时候,mybatis为什么不能自动匹配到枚举typehandler)


枚举类(getter and setter 读者需要自己填写)

public enum SexEnum {
    male(0, "男"),
    female(1, "女");

    private int id;
    private String name;

    SexEnum(int id, String name) {
        this.id = id;
        this.name = name;
    }

实体类(同样的,getter and setter 省略了)

public class Users {

    private Integer id;
    private String username;
    private String password;
    private Date hireDate;
    private SexEnum sex;
}


mysql数据库

mysql> select * from users;
+----+----------+----------+---------------+------+
| id | username | password | hireDate | sex |
+----+----------+----------+---------------+------+
| 1 | tom | tom | 1537605481252 | 0 |
| 2 | selina | | 1537605481252 | 1 |
| 3 | peanut | zk | 1537605481252 | 0 |
+----+----------+----------+---------------+------+
3 rows in set (0.01 sec)


UsersMapper.xml部分代码(同名的接口,读者自行补充)

<resultMap id="usersMapper" type="users">
        <id column="id" property="id"/>
        <result column="username" property="username"/>
        <result column="password" property="password"/>
        <result column="hireDate" property="hireDate"/>
        <result column="sex" property="sex"/>
    </resultMap>

    <select id="getUser" parameterType="int" resultMap="usersMapper">
        select id, username, password, hireDate, sex FROM users where id = #{id}
    </select>

(注:也可以在resultmap result标签下填写

typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"

这样mybatis-config.xml中的typehandler就可以省略了。)


测试类(com.mzs.test.TestDemo)

        Logger logger = Logger.getLogger("com.mzs.test.TestDemo");
        String resource = "mybatis-config.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UsersMapper1 usersMapper1 = sqlSession.getMapper(UsersMapper1.class);
        Users user = usersMapper1.getUser(1);
        logger.info(user.getSex().getName());

结果输出信息: 男


(二)EnumTypeHandler

mybatis-config.xml

<typeHandlers>
    <typeHandler handler="org.apache.ibatis.type.EnumTypeHandler" javaType="com.mzs.entity.SexEnum"/>
</typeHandlers>

mysql数据库(注意:sex字段的值发生了变化)

mysql> select * from users;
+----+----------+----------+---------------+------+
| id | username | password | hireDate | sex |
+----+----------+----------+---------------+------+
| 1 | tom | tom | 1537605481252 | male |
| 2 | selina | | 1537605481252 | female |
| 3 | peanut | zk | 1537605481252 | male |
+----+----------+----------+---------------+------+
3 rows in set (0.01 sec)

其他地方不用改动。

结果输出信息: 男

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP