文档章节

MyBtais整合Spring Boot整合,TypeHandler对枚举类(enum)处理

冯文议
 冯文议
发布于 06/24 19:49
字数 507
阅读 26
收藏 0

概要

  • 问题描述

我想用枚举类来表示用户当前状态,枚举类由 codemsg 组成,但我只想把 code 保存到数据库,查询处理,能知道用户当前状态,这应该怎么做呢?在 Spring 整合MyBatis 的时候,我们有一个MyBatis的配置文件,我们可以用下面的标签样式指定

<typeHandlers>
    <typeHandler handler="com.xxx.XxxTypeHandler" javaType="com.xxx.XxxEnum"/>
</typeHandlers>

Spring Boot 整合 MyBatis 呢?

  • 解决方案

MyBatis为我们提供了解决方案:你可以集成 BaseTypeHandler,或者实现 TypeHandler。我们需要在应用配置文件中指定handler的路径

  type-handlers-package: com.xxx.handlers

另外,我们需要在Handler上添加注解,指明枚举类(enum)。

枚举类

package com.fengwenyi.learn.java.mybatisenum;

/**
 * @author Wenyi Feng
 */
public enum Status {

    LOGIN(100, "在线"),
    LOGOUT(200, "不在线")
    ;

    private Integer code;
    private String msg;

    Status(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 通过 code 获取 Status
     * @param code
     * @return
     */
    public static Status getStatusByCode(Integer code) {
        switch (code) {
            case 100:
                return LOGIN;
            case 200:
                return LOGOUT;
            default:
                return LOGOUT;
        }
    }

    // getter
}

TypeHandler

package com.fengwenyi.learn.java.mybatisenum.handlers;

import com.fengwenyi.learn.java.mybatisenum.Status;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import org.apache.ibatis.type.TypeHandler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author Wenyi Feng
 */

@MappedTypes({Status.class})
public class UserStatusTypeHandler implements TypeHandler<Status> {

    @Override
    public void setParameter(PreparedStatement preparedStatement, int i, Status status, JdbcType jdbcType) throws SQLException {
        preparedStatement.setInt(i, status.getCode());
    }

    @Override
    public Status getResult(ResultSet resultSet, String s) throws SQLException {
        Integer code = resultSet.getInt(s);
        return Status.getStatusByCode(code);
    }

    @Override
    public Status getResult(ResultSet resultSet, int i) throws SQLException {
        Integer code = resultSet.getInt(i);
        return Status.getStatusByCode(code);
    }

    @Override
    public Status getResult(CallableStatement callableStatement, int i) throws SQLException {
        Integer code = callableStatement.getInt(i);
        return Status.getStatusByCode(code);
    }
}

application.yml

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/learn
    username: root
    password: xfsy2018
mybatis:
  type-aliases-package: com.fengwenyi.learn.java.mybatisenum.model
  mapper-locations: classpath:mapper/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  type-handlers-package: com.fengwenyi.learn.java.mybatisenum.handlers

测试

@Autowired
private IUserService userService;

@Test
public void contextLoads() {

    // find();
    insert();
}

private void insert() {
    UserModel model = new UserModel();
    model.setStatus(Status.LOGIN);
    boolean rs = userService.save(model);
    System.out.println(rs);
}

private void find() {
    List<UserModel> modelList = userService.findAll();
    for (UserModel model : modelList) {
        System.out.println(model.toString());
    }
}

数据

查询结果

数据库

测试代码

https://github.com/fengwenyi/JavaLearnProject/tree/master/mybatis-enum

© 著作权归作者所有

共有 人打赏支持
冯文议
粉丝 9
博文 37
码字总数 30938
作品 0
成都
高级程序员
spring boot 1.5.4 入门和原理(二)

1 spring boot入门 1.1 环境准备 JDK 7及以上 eclipse开发工具 项目管理工具Maven 本文采用、RELEASE(或1.5.2.RELEASE)调试通过。 spring-boot相关项目源码, 码云地址:https://git.oschi...

wyait
2017/09/18
0
0
Spring Boot入门资料整理

Spring Boot 初识 SpringBoot前世今生 本文主要讲述spring boot的由来,即其它诞生的背景,初衷,现状,及对未来的展望。 Spring Boot参考指南中文版--Chapter1.Spring Boot中文文档 本节提供...

小致dad
2017/11/07
0
0
Spring Boot干货系列: (四)开发Web应用之Thymeleaf篇

        前言   Web开发是我们平时开发中至关重要的,这里就来介绍一下Spring Boot对Web开发的支持。   正文   Spring Boot提供了spring-boot-starter-web为Web开发予以支持,s...

后端编程嘟
2017/03/13
0
0
Spring Boot学习笔记

文件上传与下载 springboot 上传文件到服务器 Spring Boot2.0连载(33)-- Spring Boot文件上传下载 SpringBoot项目的The temporary upload location ***is not valid 问题 /tmp/tomcat.8483...

OSC_fly
07/26
0
0
Spring Boot 2.0 WebFlux 上手系列课程:快速入门(一)

02:WebFlux 快速入门实践 ## Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT Spring Boot (Boot 顾名思义,是引导的意思)框架是用于简化 Spring 应用从...

泥沙砖瓦浆木匠
04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

讲述下 :LVM逻辑卷管理遇到的问题

LVM学习逻辑卷管理创建逻辑卷遇到的问题 1 实验环境 系统 内核 发行版本 CentOS 2.6.32-754.2.1.el6.x86_64 CentOS release 6.10 (Final) 由于是最小化安装没有xfs命令,yum安装如下包支持此...

linuxprobe16
39分钟前
0
0
day95-20180922-英语流利阅读-待学习

Hey Jude 半个世纪传唱不衰的背后故事 毛西 2018-09-22 1.今日导读 2004 年,The Beatles 被《滚石》杂志选为“历史上最伟大的 50 位流行音乐家的第一位”。这四名来自英国利物浦的男孩不仅对...

飞鱼说编程
46分钟前
1
0
OSChina 周六乱弹 —— 放假前期焦虑症晚期

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享Matteo的单曲《Panama》: 《Panama》- Matteo 手机党少年们想听歌,请使劲儿戳(这里) @新垣吉衣OSC :我发现只要去有小朋友...

小小编辑
今天
163
9
wait()被notify()后,接着执行wait()后面的语句

wait()被notify()后,接着执行wait()后面的语句

noteman
今天
1
0
Ubuntu集群-使用MAAS开始裸机安装

Ubuntu使用MAAS装机的七个步骤。 1、Setup your hardware You need one small server for MAAS and at least one server which can be managed with a BMC. It is recommended to have the M......

openthings
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部