MyBatis:自定义TypeHandler

最近在学习MyBatis的相关内容,接触到了TypeHandle,在此之前,对于MyBatis的认识仅仅只停留在了会用的阶段,写代码只是知道写个mapper,写个xml,至于查询出数据怎么映射到resultMap,resultType中去,并没有太深入了解。

什么是typeHandle

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成 Java 类型。Mybatis默认为我们实现了许多TypeHandler, 当我们没有配置指定TypeHandler时,Mybatis会根据参数或者返回结果的不同,默认为我们选择合适的TypeHandler处理。

TypeHandle作用

实现一个简单的自定义TypeHandler

1、创建一个自定义的typeHandler类
@MappedJdbcTypes(JdbcType.VARCHAR) 指定转换之后的数据类型
@MappedTypes({Date.class}) 指定要被转换的类型

@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes({Date.class})
public class MyTypeHandler extends BaseTypeHandler<Date> {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Date date, JdbcType jdbcType) throws SQLException {
        ps.setString(i, String.valueOf(date.getTime()));
    }

    @Override
    public Date getNullableResult(ResultSet rs, String s) throws SQLException {
        return new Date(rs.getLong(s));
    }

    @Override
    public Date getNullableResult(ResultSet rs, int i) throws SQLException {
        return new Date(rs.getLong(i));
    }

    @Override
    public Date getNullableResult(CallableStatement cs, int i) throws SQLException {
        return cs.getDate(i);
    }
}

2、mapper

public interface TestMapper {

    User getById();

    void insertUser(User user);

}

3、mapper.xml

<resultMap id="TestMap" type="com.demo.entity.User" >
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="age" jdbcType="INTEGER" property="age" />
    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" typeHandler="com.demo.mydate.MyTypeHandler" />
</resultMap>

<insert id="insertUser" parameterType="com.demo.entity.User">
    INSERT INTO user(id,name,age, create_time) VALUES (#{id}, #{name}, #{age},#{createTime,javaType=Date,jdbcType=VARCHAR,typeHandler=com.demo.mydate.MyTypeHandler})
</insert>

4、在这里需要指定自定义TypeHandler类的包路径,我这里是用的springboot框架,所以在配置文件中进行配置。

mybatis:
  type-aliases-package: com.demo.entity
  #自定义typeHandler类包路径
  type-handlers-package: com.demo.mydate
  mapper-locations: classpath:mapping/*.xml
  configuration:
    map-underscore-to-camel-case: true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值