千家信息网

mybatis TypeHandler注入spring依赖的方法是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"mybatis TypeHandler注入spring依赖的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"mybatis
千家信息网最后更新 2026年11月01日mybatis TypeHandler注入spring依赖的方法是什么

这篇文章主要讲解了"mybatis TypeHandler注入spring依赖的方法是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"mybatis TypeHandler注入spring依赖的方法是什么"吧!

TypeHandler注入spring的依赖

解决方法

                                                                                      

在mybatis想通过写一个自定义的handler实现业务功能,该handler默认创建的时候,是不在spring的管理范围里的,所以你在handler用@Autowired注入,是会报npe。

需要通过上面的方式,就可以解决了。

mybatis扩展:自定义TypeHandler

在Mybatis中定义了很多默认的类型处理器,将sql语句中的值转化成JDBC的类型,以及将结果集中的值转化为字段类型的值,详情可见官网默认的TypeHandler,但是有的时候我们并不想用官网的TypeHandler的时候,自定义的TypeHandler就派上用场了

1、编写自定义TypeHandler

在自定义的类上加上@MappedJdbcTypes(JdbcType.VARCHAR)注解,括号里的JdbcType.Varchar是需要替代的

默认的JDBC类型,然后让这个类继承BaseHandler,泛型类型String说明替代String类型,然后再重写的方法中

对只进行处理就行了,每个方法都必须返回值,如果没有返回的话,默认是不返回任何东西的,导致的结果就是,插入的值为null,获得的值也全部为null

package javaDIYFree.typeHandler;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import org.apache.ibatis.type.MappedJdbcTypes;import sun.security.provider.MD5;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;/** * @author Hearts * @date 2019/4/17 * @desc */@MappedJdbcTypes(JdbcType.VARCHAR)//需要替代的默认的JDBC类型,泛型类型String说明替代String类型public class VarcharTypeHandler extends BaseTypeHandler {    /**     * 对设置的值进行处理     * @param preparedStatement     * @param i     * @param s     * @param jdbcType     * @throws SQLException     */    @Override    public void setNonNullParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException {        //我在传进来的字符串后面加了一串字符串        preparedStatement.setString(i,s+">>>>>>>>>>>>>>>>");    }    /**     * 对获取值的操作进行扩展,列名方式     * @param resultSet     * @param s     * @return     * @throws SQLException     */    @Override    public String getNullableResult(ResultSet resultSet, String s) throws SQLException {        return resultSet.getString(s);    }    /**     * 对获取值的操作进行扩展,索引方式     * @param resultSet     * @param i     * @return     * @throws SQLException     */    @Override    public String getNullableResult(ResultSet resultSet, int i) throws SQLException {        return resultSet.getString(i);    }    /**     * 对其他获取值的操作进行扩展     * @param callableStatement     * @param i     * @return     * @throws SQLException     */    @Override    public String getNullableResult(CallableStatement callableStatement, int i) throws SQLException {        return callableStatement.getString(i);    }}

2、配置TypeHandler

有两种方式配置,一种就是直接,再配置SqlSessionFactoryBean的时候,将自定义的TypeHandler配置进去,但是这种方式不常用,应为这就代表所有的Varchar的操作都是用自定义的TypeHandler了,一般我们只需要在某一个表的某一个字段进行自定义,这个时候就用第二种方式配置了

第一种配置方式

    @Bean    public SqlSessionFactoryBean createSqlSessionFactoryBean(DruidDataSource druidDataSource){        final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();        try{            //配置数据源            sqlSessionFactoryBean.setDataSource(druidDataSource);            //配置mapper文件所在的位置            sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));            //配置自定义TypeHandler            sqlSessionFactoryBean.setTypeHandlers(new TypeHandler[]{new VarcharTypeHandler()});        } catch (IOException e) {            e.printStackTrace();        }        return sqlSessionFactoryBean;    }

在需要使用的操作和字段中添加typeHandler

      insert into user (id, create_date, `name`,       did, `password`, username      )    values (#{id,jdbcType=BIGINT}, #{createDate,jdbcType=TIMESTAMP}, #{name,jdbcType=VARCHAR},       #{did,jdbcType=BIGINT}, #{password,jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR,typeHandler=varcharTypeHandler}      )        

3、测试

package javaDIYFree.dao;import javaDIYFree.config.MybatisConfig;import javaDIYFree.model.User;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import java.util.function.Consumer;/** * @author Hearts * @date 2019/4/17 * @desc */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(classes = MybatisConfig.class)public class UserMapperTest {    @Autowired    private UserMapper userMapper;    @Test    /**     * 测试insert方法     */    public void insertUser(){        User user = new User();        user.setUsername("zhangsan");        user.setPassword("123456");        userMapper.insert(user);    }    @Test    /**     * 测试selectAll方法     */    public void selectAllUser(){        userMapper.selectAll().forEach(new Consumer() {            public void accept(User i) {                //打印用户名和密码                System.out.println(i.getUsername() +" ======> "+i.getPassword());            }        });    }}

4、项目结构图

感谢各位的阅读,以上就是"mybatis TypeHandler注入spring依赖的方法是什么"的内容了,经过本文的学习后,相信大家对mybatis TypeHandler注入spring依赖的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

方法 类型 配置 方式 时候 字段 就是 处理 学习 测试 内容 字符 字符串 结果 业务 东西 代表 位置 功能 处理器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州百单互联网科技有限公司 新华互联网科技学院 金融科技与互联网金融 紫鲸互联网科技 未来的互联网科技 科技互联网公司logo 沃里互联网科技 居家互联网科技有限公司 湖南诚度互联网科技有限公司 互联网对科技的发展 互联网科技公司实习生 亳州好赞互联网科技有限公司 科技赋能视角下互联网保险发展 沐思想互联网科技有限公司 每天都有哪些好的互联网科技 深圳无忧互联网科技 江苏互联网科技小贷 承德科技产业互联网平台 互联网科技快速发展优美句子 科技发展第三阶段互联网时代 互联网与科技 互联网佳科技有限公司 河南真二互联网科技有限公司 世界互联网领先科技成果 华中科技有哪些互联网大佬 全球顶尖互联网科技公司 南通创西澳互联网科技有限公司 东营紫格互联网科技 互联网科技职业技能培训学校 青岛易易互联网科技
0