Discuss / Java / Mybatis的typehandler注入bean

Mybatis的typehandler注入bean

Topic source

廖老师以及各位同学好.

我现在在用mybaits来做我的小东西,连接Oracle DB.因为用到了Oracle里面的一些type,需要自定义mybaits的一些typehandler去处理.

在我自己写的typehandler里面,我使用@autowired去读springboot里面注入的bean但是读到的是空的.我想了一下应该是因为mybatis管理typehandler脱离了springboot的容器范围.

https://stackoverflow.com/questions/55665790/how-to-inject-an-attribute-using-spring-in-a-type-handler 这里这个人遇到的问题应该是跟我一样的.

有人建议的解决方案是在sqlsessionfactry的bean里面(xml文件中)做如下配置:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="typeHandlers">
      <array>
        <bean class="com.example.YourCustomTypeHandler">
          <!-- inject -->
          <property name="property" ref="bean"/>
        </bean>
      </array>
    </property>
</bean>

可是,我的sqlsessionfactory是写在java中的:

@BeanSqlSessionFactoryBean createSqlSessionFactoryBean(@Autowired DataSource dataSource) {
    var sqlSessionFactoryBean = new SqlSessionFactoryBean();
    sqlSessionFactoryBean.setDataSource(dataSource);
    return sqlSessionFactoryBean;
}

而且我感觉似乎bean用xml这种写法在被淘汰中。

请问,是否有等价的直接写入code的写法?

非常感谢

我试着这么写了没有起作用

    @Bean    
    SqlSessionFactoryBean createSqlSessionFactoryBean(@Autowired DataSource dataSource) {
        var sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);

//        TypeHandler[] objectTypeHandler = {new OracleObjectHandler()};//        sqlSessionFactoryBean.setTypeHandlers(objectTypeHandler);        return sqlSessionFactoryBean;
    }

直接在java里面通过annotation似乎还不行.有人在github上开了一个issue暂时还没有人管: https://github.com/mybatis/spring/issues/493

我想实现的这个mapping不知道存在哪里好希望在typehandler里面能拿到

不知道mybatis是怎么去处理typehandler的 我想把一个简单的mapping(java类vs数据库类)给存起来只读一次...


  • 1

Reply