MyBatis TypeHandler配置

 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,或从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型。Mybatis默认为我们实现了许多TypeHandler, 当我们没有配置指定TypeHandler时,Mybatis会根据参数或者返回结果的不同,默认为我们选择合适的TypeHandler处理。
我们怎么配置一个自定义TypeHandler ? 
MappedJdbcTypes({JdbcType.VARCHAR})  
MappedTypes({String[].class})  
public class StringArrayTypeHandler implements TypeHandler<String[]> { //..中间的实现代码省略了 //.. }
一: 注册TypeHandler
    在Mybatis的配置文件中这样注册
    
<typeHandlers>  
   <typeHandler handler="com.jstudio.mybatis.handler.StringArrayTypeHandler" jdbcType="VARCHAR" javaType="[Ljava.lang.String;"/>  
</typeHandlers>  


   在Spring的配置文件中直接配置
    <!-- 配置sqlsessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 自动扫描 Mapper 文件, 借口命名与 *Mapper.xml 一致! -->
        <property name="mapperLocations" value="classpath:org/jstudioframework/freeway/**/mapper/*Mapper.xml"/>
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置Mybatis的插件plugin-->
        <property name="plugins">
            <list>
                <ref bean="paginationInterceptor"/>
                <ref bean="sqlStatementMonitorInterceptor"/>
            </list>
        </property>
        <property name="typeHandlers">
            <list>
                <bean class="org.jstudioframework.mybatis.type.StringTokenizerLongTypeHandler" />
            </list>
        </property>
    </bean>


二:在mapper.xml中使用
   在resultMap的定义中对对应列定义typeHandler
    
<resultMap type="Note" id="baseResultMap">
    <result property="id" column="id" />
    <result property="names" column="names" jdbcType="VARCHAR" javaType="[java.lang.String;" 
        typeHandler="demo.StringArrayTypeHandler"/>
</resultMap>
这里只能是在select的时候才会使用自定义的TypeHandler处理对应的映射关系,如果要在insert或者update时使用则需要在sql定义中添加相应的内容。如下:
<update id="updateNames" parameterType="User">
    update user
    set names=#{names, javaType=[java.lang.String;, jdbcType=VARCHAR}
    where id=#{id}
</update>
如果显示的注册了typehandler的jdbcType和javaType可用下面方式
<update id="updateNames" parameterType="User">
    update user
    set names=#{names,typeHandler=demo.StringArrayTypeHandler}
    where id=#{id}
</update>




  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值