这个类型转换器的意思就是
你前端传过来一个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> {
}
这样就可以直接调
看控制台
数据库插入一条数据看,是不是很完美