我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mybatis之BaseTypeHandler怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mybatis之BaseTypeHandler怎么使用

本篇内容主要讲解“mybatis之BaseTypeHandler怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis之BaseTypeHandler怎么使用”吧!

    BaseTypeHandler用法

    BaseTypeHandler 是个抽象类,需要子类去实现其定义的 4 个抽象方法,而它本身实现了 typeHandler 接口的 4 个方法。

    可以对数据保存与查询时做出相应处理,类似操作数据库之间的一个拦截器

    举栗子:把集合类型当string存起来,读取的时候映射为list集合

    首先自定义handler 继承BaseTypeHandler重写他里边的四个方法

    public abstract void setNonNullParameter(PreparedStatement var1, int var2, T var3, JdbcType var4) throws SQLException; public abstract T getNullableResult(ResultSet var1, String var2) throws SQLException; public abstract T getNullableResult(ResultSet var1, int var2) throws SQLException; public abstract T getNullableResult(CallableStatement var1, int var2) throws SQLException;

    代码如下

    public class ListToStringHandler extends BaseTypeHandler<List> {     @Override    public void setNonNullParameter(PreparedStatement preparedStatement, int i, List list, JdbcType jdbcType) throws SQLException {        preparedStatement.setString(i, JSON.toJSONString(list));    }     @Override    public List getNullableResult(ResultSet resultSet, String s) throws SQLException {        return JSONArray.parseArray(resultSet.getString(s));    }     @Override    public List getNullableResult(ResultSet resultSet, int i) throws SQLException {        return JSONArray.parseArray(resultSet.getString(i));    }     @Override    public List getNullableResult(CallableStatement callableStatement, int i) throws SQLException {        return JSONArray.parseArray(callableStatement.getString(i));    }}

    映射操作

    mybaits-plus 方式

    bean上添加注解

    @TableName(autoResultMap = true)

    映射字段上添加如下注解,指定自定义的handler

    @TableField(jdbcType = JdbcType.VARCHAR, typeHandler = ListToStringHandler.class)

    mybaits的方式

    <resultMap> 标签内 映射字段的handler 指定自定义的handler即可,保存的时候也要指定。

    测试

    mybatis之BaseTypeHandler怎么使用

    mybatis之BaseTypeHandler怎么使用

    mybatis之BaseTypeHandler怎么使用

    这只是其一种简单的用法,其他的比如加密解密也适用。

    通过BaseTypeHandler从mysql数据库存取json字符串

    在mysql的使用过程中,我们经常会将一些json串存入mysql当中,如下json串

    {    "params":[        {            "name":"zl",            "age":18,            "createTime":"2020-06-19 09:28:38",            "modifyTime":"2020-06-19 09:29:07"        }    ],    "paramsTypes":[        "com.zl.platform.student"    ]}

    对于这种数据在mybatis的存取过程需要一些特殊的处理,我们可以通过继承mybatis的org.apache.ibatis.type.BaseTypeHandler来实现。

    首先我们需要完成一个工具类

    import com.alibaba.fastjson.JSON;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;public class JsonTypeHandler<T> extends BaseTypeHandler<T> {    private Class<T> type;    public JsonTypeHandler(Class<T> type) {        if (type == null) {            throw new IllegalArgumentException("Type argument cannot be null");        }        this.type = type;    }    @Override    public void setNonNullParameter(PreparedStatement ps, int i, Object parameter,                                    JdbcType jdbcType) throws SQLException {        ps.setString(i, JSON.toJSONString(parameter));    }    @Override    public T getNullableResult(ResultSet rs, String columnName)            throws SQLException {        return JSON.parseObject(rs.getString(columnName), type);    }    @Override    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {        return JSON.parseObject(rs.getString(columnIndex), type);    }    @Override    public T getNullableResult(CallableStatement cs, int columnIndex)            throws SQLException {        return JSON.parseObject(cs.getString(columnIndex), type);    }}

    然后在mybatis中对需要使用json格式的字段引用这个方法

        <resultMap id="BaseResultMap" type="com.zl.platform.entity.demo.DubboControllerInfo">        <id column="id" property="id" />        <result column="department" property="department" />        <result column="case_name" property="caseName"/>        <result column="author" property="author" />        <result column="service_name" property="serviceName" />        <result column="method_name" property="methodName" />        <result column="dubbo_params" property="dubboParams" typeHandler="com.zl.platform.utils.JsonTypeHandler"/>        <result column="create_time" property="createTime" />        <result column="update_time" property="updateTime" />    </resultMap>        <insert id="insertDubboInfo"  parameterType="com.zl.platform.entity.demo.DubboControllerInfo">      insert into dubbo_controller_info (department, author, service_name,      method_name, dubbo_params,create_time, update_time)      VALUES (#{department},#{author},#{serviceName},#{methodName},#{dubboParams,typeHandler=com.zl.platform.utils.JsonTypeHandler},       #{createTime},#{updateTime})    </insert>    <select id="selectAll" resultMap="BaseResultMap">        select * from dubbo_controller_info    </select>

    到此,相信大家对“mybatis之BaseTypeHandler怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    mybatis之BaseTypeHandler怎么使用

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    mybatis之BaseTypeHandler怎么使用

    本篇内容主要讲解“mybatis之BaseTypeHandler怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mybatis之BaseTypeHandler怎么使用”吧!BaseType
    2023-07-05

    mybatis之BaseTypeHandler用法解读

    这篇文章主要介绍了mybatis之BaseTypeHandler用法解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-14

    Java之Mybatis的二级缓存怎么使用

    本文小编为大家详细介绍“Java之Mybatis的二级缓存怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java之Mybatis的二级缓存怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。缓存的概述
    2023-07-05

    mybatis的mapper怎么使用

    MyBatis的mapper是用于映射数据库操作的接口,通过这个接口可以方便地调用SQL语句进行数据库的增删改查操作。使用步骤如下:1. 创建一个Java接口,命名为`MyMapper`(示例名称),并在接口中定义数据库操作的方法。```j
    2023-09-29

    MyBatis动态SQL怎么使用

    今天小编给大家分享一下MyBatis动态SQL怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。MyBatis 框架动态
    2023-06-29

    mybatis拦截器怎么使用

    今天小编给大家分享一下mybatis拦截器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。mybatis实战之拦截器在
    2023-07-05

    MyBatis @Select注解怎么使用

    这篇文章主要介绍“MyBatis @Select注解怎么使用”,在日常操作中,相信很多人在MyBatis @Select注解怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyBatis @Select
    2023-07-02

    怎么在Springboot中使用mybatis

    今天就跟大家聊聊有关怎么在Springboot中使用mybatis,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前期工作1.导入mybatis整合依赖