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> {
    /**
     * 功能描述: 
* <> * @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

/**
 * 类说明: 
* 〈〉 * * @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; }

测试类

 /**
     * 功能描述: 
* <单条插入> * * @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("[email protected]"); user.setAge(29); user.setStatus(true); int insert = userMapper.insert(user); System.out.println(insert); }

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

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

这样就可以直接调
看控制台
在这里插入图片描述
数据库插入一条数据看,是不是很完美
Mybatis类型转换器Boolean转int_第1张图片

你可能感兴趣的:(mybatis,springboot,java,mybatis)