Springboot整合Mybatis使用TypeHandler来转换数据库中的数据

TypeHandler转换指定数据库中数据为Enum枚举

  在一些时候,我们的数据库需要存放一些例如状态信息的数据,通常的我们使用int整型来保存,例如(0:失败,1:成功)等,用这样的数据是可以的,但对于前端的编程是不友好的,所以我们可以使用TypeHandler来进行一个转换,将其转化成一个枚举型。

  一、数据库中的数据定义

    这里的user_state和user_priority表示了一些状态信息(范围是整数0~5),接下来我们要将这个转化为枚举型

    

  二、创建枚举Enum类

    以User_state为例:

package com.snapshot2.demo.enumeration;

public enum  UserStateEnum {
    NORMAL(0,"正常状态"),
    FROZEN(1,"冻结"),
    BAN(2,"禁用"),
    MUTE(3,"禁言"),
    SENSITIVE(4,"敏感用户"),
    DYF(5,"这是创作者董一帆的");

    private int stateCode;
    private String stateString;

    public static UserStateEnum getUserStateByCode(int stateCode){
        for (UserStateEnum stateEnum: values()){
            if(stateEnum.getStateCode() == stateCode){
                return stateEnum;
            }

        }
        return null;
    }

    /* Constructor */
    UserStateEnum(int stateCode, String stateString) {
        this.stateCode = stateCode;
        this.stateString = stateString;
    }

    /* Getter and Setter */
    public int getStateCode() {
        return stateCode;
    }

    public void setStateCode(int stateCode) {
        this.stateCode = stateCode;
    }

    public String getStateString() {
        return stateString;
    }

    public void setStateString(String stateString) {
        this.stateString = stateString;
    }
}

  

  三、创建相应得TypeHandler类,继承于BaseTypeHandler<T>类,并重写相应得方法

   1.这里的<T>是我们指定转化的类型

   [email protected]注解声明数据库中对应数据类型

   [email protected](value = UserStateEnum.class)声明转化后的类型

package com.snapshot2.demo.typehandler;

import com.snapshot2.demo.enumeration.UserStateEnum;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/* 数据库中的数据类型 */
@MappedJdbcTypes(JdbcType.INTEGER)

/* 转化后的数据类型 */
@MappedTypes(value = UserStateEnum.class)
public class UserStateTypeHandler extends BaseTypeHandler<UserStateEnum> {
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, UserStateEnum userStateEnum, JdbcType jdbcType) throws SQLException {
        preparedStatement.setInt(i,userStateEnum.getStateCode());
    }

    @Override
    public UserStateEnum getNullableResult(ResultSet resultSet, String s) throws SQLException {
        int code =resultSet.getInt(s);
        if(code>=0&&code<=5){
            return UserStateEnum.getUserStateByCode(code);
        }
        return null;
    }

    @Override
    public UserStateEnum getNullableResult(ResultSet resultSet, int i) throws SQLException {
        int code = resultSet.getInt(i);
        if(code>=0&&code<=5){
            return UserStateEnum.getUserStateByCode(code);
        }
        return null;
    }

    @Override
    public UserStateEnum getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        int code = callableStatement.getInt(i);
        if(code>=0&&code<=5){
            return UserStateEnum.getUserStateByCode(code);
        }
        return null;
    }
}

  四、最后在application.properties配置文件中springboot指定TypeHandler所在的包

mybatis.type-handlers-package=com.snapshot2.demo.typehandler

    

原文地址:https://www.cnblogs.com/dyf-stu/p/10162301.html

时间: 2024-08-29 17:54:17

Springboot整合Mybatis使用TypeHandler来转换数据库中的数据的相关文章

SpringBoot整合mybatis多表联查之数据库建表

1.各关联表尽量不要使用相同的字段.因为在多表联查时,如果出现相同的字段,数据库自动使这些相同字段的值相等. 比如说,订单表有一个表示订单状态的status字段,而它的外键关联的表car有一个表示车状态的status字段,这两个status表示的含义完全不一样,但因为两个status字段一样,数据库默认将他们的值相等,导致数据失真. 2.在mapper.xml文件中使用的sql语句,应先在数据库测试成功后才使用. 3.在运行整个项目之前,应先对各个mapper,service,controlle

springboot整合mybatis(SSM开发环境搭建)

0.项目结构: 1.application.properties中配置整合mybatis的配置文件.mybatis扫描别名的基本包与数据源 server.port=80 logging.level.org.springframework=DEBUG #springboot mybatis #jiazai mybatis peizhiwenjian mybatis.mapper-locations = classpath:mapper/*Mapper.xml mybatis.config-loca

SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统

1.前言本文主要介绍使用SpringBoot与shiro实现基于数据库的细粒度动态权限管理系统实例. 使用技术:SpringBoot.mybatis.shiro.thymeleaf.pagehelper.Mapper插件.druid.dataTables.ztree.jQuery 开发工具:intellij idea 数据库:mysql.redis 2.表结构还是是用标准的5张表来展现权限.如下图:image 分别为用户表,角色表,资源表,用户角色表,角色资源表.在这个demo中使用了mybat

SpringBoot14 SpringBoot整合mybatis

1 版本说明 springboot:2.0 jdk:1.8 2 创建springBoot项目 创建项目时勾选必要web,MySQL,mybatis相关依赖 创建完成后再pom文件中添加自动部署.lombok相关依赖 2.1 编写测试类 技巧01:项目创建成功后先将mybatis和mysql相关的jar注释掉,在到控制层中创建一个简单的测试类来确认项目是否创建成功 package cn.test.demo.mybatis_demo02.controller; import org.springfr

SpringBoot整合Mybatis【非注解版】

接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 ? 选择Spring Initializr,配置JDK版本 ? 输入项目名 ? 选择构建web项目所需的staters(启动器) ? 选择与数据库相关的组件 ? 分析:Spring Boot基本上将我们实际项目开发中所遇到的所有场景都做了封装.它将所有的功能场景都抽取出来,做成了一个个的staters(启动器),只需要在项目的pom.xml配置文件里面引入这些starter相关场景的所有依赖都会导入进来.需要什

springboot整合mybatis+oracle

第一步 认识springboot :springboot是为了解决配置文件多,各个组件不统一的问题,它省去了很多配置文件,同时实现了spring产品的整合. 创建springboot项目:通过选择springinit初始化springboot,我们发现它的pom.xml拥有绝大部分的spring所需要的包. 第二步 打开项目的结构,发现有了有趣的部分 在原有的java结构上,公司名称下多了一级叫做自己的项目名的一个目录,这个目录下才是相应的Controlller等层,而且在此目录下面有了一个文件

SpringBoot 整合MyBatis案例详解

SpringBoot约定大于配置的特点,让框架的配置非常简洁,与传统的SSM框架相比,简化了大量的XML配置,使得程序员可以从繁琐的配置中脱离出来,将精力集中在业务代码层面,提高了开发效率,并且后期的维护成本也大大降低. 从源码中可以看到,每一个springboot集成的jar包也是一个maven的子module,springboot已经将相关依赖的jar包自动添加到工程中,不需要开发人员手动去添加了,这也是springboot能够简化配置的一个重要原因. 下面开始说明springboot是如何

最简单的SpringBoot整合MyBatis教程

本文就来看看在Spring Boot中MyBatis要如何使用. 工程创建 首先创建一个基本的Spring Boot工程,添加Web依赖,MyBatis依赖以及MySQL驱动依赖,如下:最简单的SpringBoot整合MyBatis教程创建成功后,添加Druid依赖,并且锁定MySQL驱动版本,完整的依赖如下: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-

springboot整合mybatis通用Mapper

参考: https://blog.csdn.net/x18707731829/article/details/82814095 https://www.jianshu.com/p/6d2103451dcb SpringBoot整合MyBatis Generator可以帮助我们快速生成实体类.接口.mapper.xml文件,可以提高开发的效率,但是每次新增表都要执行一次Generator生成相应的代码,这样重复的操作生成增删查改重复的的代码,有没有一种通用的接口,不用生成mapper.xml文件,