【Mybatis】TypeHandler - 自定义类型处理器

文章目录一、介绍二、上手试试自定义类型处理器应用处理器一、介绍MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。可以在官方文档中看到,下面时默认的类型处理器。但是,我们还是有个麻烦事比如:javaBean中字段类型为Date,数据库中存储的是varchar类型;javabean中字段类型是Enum,数据库中存储的是varchar或者Integer。javaBean中字段类
摘要由CSDN通过智能技术生成

一、介绍

MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。

可以在官方文档中看到,下面时默认的类型处理器。
在这里插入图片描述
但是,我们还是有个麻烦事

比如:
javaBean中字段类型为Date,数据库中存储的是varchar类型;
javabean中字段类型是Enum,数据库中存储的是varchar或者Integer。
javaBean中字段类型是List,数据中存储的是varchar。

怎么保证类型之间的转换映射?

TypeHandler

MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换,用于 PreparedStatement 设置参数值和从 ResultSet 或 CallableStatement 中取出一个值。

二、上手试试

前提:

  • 我的实体类
    在这里插入图片描述
  • 我的数据库中表字段是这样的
    在这里插入图片描述
    可见:
  • List<String> resultList类型的Java对象字段在数据库中并没有对应得类型,而且温馨提示,也是没有默认类型处理器得!这个时候我以前就简单粗暴,改变实体类得结构,造出个 String resultListStr 类型出来,然后入库得时候就用这个属性,不用List。

然而其实这个场景,可以自定义一个List<String> ---- varchar ,的自定义类型处理器。

自定义类型处理器

如下,可以实现List<String>----varchar 的转换。


@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(List.class)
public class ReportTypeHandler implements TypeHandler<List<String>> {
   


    /**
     * 设置参数
     *  Java类型-----> 数据库类型
     */
    @Override
    public void setParameter(PreparedStatement preparedStatement, int i, List<String> list, JdbcType jdbcType) throws SQLException {
   
       StringBuilder sb = new StringBuilder(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_popo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值