Mybatis类型转换器Boolean转int

这个类型转换器的意思就是
你前端传过来一个Boolean类型的参数,
但是呢数据库需要存的字段类型是个int或者tinyint,
这个时候呢你就可以写个mybatis的类型转换器了
具体写法如下:
场景 前端传人员状态是Boolean 数据库存0或者1
类型转换器他需要继承这个BaseTypeHandler

package com.enjoy.stu.handler;

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;

/**
 * Created by wlt on 2022/3/22 21:18
 */
public class MybatisTypeHandler extends BaseTypeHandler<Boolean> {
    /**
     * 功能描述: <br>
     * <>
     * @param: [ps, i, parameter, jdbcType]
     *    i:Jdbc预编译时设置参数的索引值
     *    parameter:要插入的参数值  true 或者false
     *    jdbcType:要插入JDBC的类型
     *    里面的业务逻辑要根据实际开发场景来写 我这里就写的简单一点比较好理解一下
     * @return:
     * @author: wlt
     * @date: 2022/3/22 21:25
     **/
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Boolean parameter, JdbcType jdbcType) throws SQLException {
        if (parameter){
            ps.setInt(i,1);
        }else ps.setInt(i,0);
    }

    @Override
    public Boolean getNullableResult(ResultSet rs, String columnName) throws SQLException {
        int man = rs.getInt(columnName);
        return man == 1 ? true : false;
    }

    @Override
    public Boolean getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        int man = rs.getInt(columnIndex);
        return man == 1 ? true : false;
    }

    @Override
    public Boolean getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        int man = cs.getInt(columnIndex);
        return man == 1 ? true : false;
    }
}

然后需要在yml文件配置这个成全局

mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  configuration:
#    #默认不显示SQL日志
#    #    log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    #mybatis类型转换器
  type-handlers-package: com.enjoy.stu.handler

这样就完事了
下面我们来测试一下
创建表

CREATE TABLE `user` (
  `id` bigint NOT NULL COMMENT '主键ID',
  `name` varchar(30) DEFAULT NULL COMMENT '姓名',
  `age` int DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  `status` int DEFAULT NULL COMMENT '状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

实体类User

/**
 * 类说明: <br>
 * 〈〉
 *
 * @Author: wlt
 * @Date: 2022/3/16 11:18
 */
@Data
@TableName("user")
public class User implements Serializable {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    @TableField("name")
    private String userName;
    private Integer age;
    private String email;
    private Boolean status;
}

测试类

 /**
     * 功能描述: <br>
     * <单条插入>
     *
     * @return 应答消息
     * @Param []
     * @Author: wlt
     * @Date: 2022/3/18 9:08
     **/
    @Test
    public void testInsert() {
        User user = new User();
        user.setId(8L);
        user.setUserName("猫耳朵");
        user.setEmail("18765898125@163.com");
        user.setAge(29);
        user.setStatus(true);
        int insert = userMapper.insert(user);
        System.out.println(insert);
    }

注意啊我用的是mybatis-plus这个东西 所以mapper直接继承个BaseMapper就好了

/**
 * 类说明: <br>
 * 〈〉
 *
 * @Author: wlt
 * @Date: 2022/3/16 11:21
 */
public interface UserMapper extends BaseMapper<User> {
   
}

这样就可以直接调
看控制台
在这里插入图片描述
数据库插入一条数据看,是不是很完美
在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值