Mybatis中的mapper.xml使用注意事项

最近在做项目的过程中,使用mybatis的mapper.xml文件发现了一个很低级的错误,在此记录下来提醒自己。

一. 日期类型

数据库采用oracle,日期字段类型为Date。代码中对应实体类的类型为Date,这里注意Date要使用java.util.Date。在使用mybatis自动代码生成工具时,需要指定生成的mapper.xml文件中的字段的jdbcType为TIMESTAMP,因为默认生成的是Date。如果使用默认的Date,在查询时日期的精度只会精确到天,后面的时分秒精度出现丢失。

理论知识:

java.sql 定义的时间类型包含三个类,date,time和timestamp.分别用来表示日期(无时间信息,eg: yyyy-mm-dd),时间(只处理时间,无日期部分, eg:hh:mm:ss)和时间戳(精确到纳秒级别)在它们都继承自java.util.date。

 

二.  自定义的specMapper.xml

有时候自动生成的mapper无法满足我们的需求,需要自己手动编写mapper.xml文件。在手写mapper文件时,需要编写resultMap标签,并指定数据库中各个字段对应的jdbcType。如:

<resultMap id="BaseResultMap"                                                                                   type="com.cmrh.kettle.common.generated.dao.model.TableErrorFailure" >
    <result column="JOB_NAME" property="jobName" jdbcType="VARCHAR" />
    <result column="SDB" property="sdb" jdbcType="VARCHAR" />
    <result column="TDB" property="tdb" jdbcType="VARCHAR" />
    <result column="SOWNER" property="sowner" jdbcType="VARCHAR" />
    <result column="STAB" property="stab" jdbcType="VARCHAR" />
    <result column="TOWNER" property="towner" jdbcType="VARCHAR" />
    <result column="TTAB" property="ttab" jdbcType="VARCHAR" />
    <result column="CREATE_DATE" property="createDate" jdbcType="TIMESTAMP" />
    <result column="COMM" property="comm" jdbcType="VARCHAR" />
    <result column="ERROR_FLAG" property="errorFlag" jdbcType="VARCHAR" />
</resultMap>

我出现的错误就是在编写了resultMap标签后,在编写select语句时,还使用了别名!!!错误如下:

<!-- 根据条件分页查询链路抽取失败的抽取表信息 -->    
    <select id="getErrorTableLstByPage" resultMap="BaseResultMap" parameterType="com.cmrh.kettle.monitor.dto.TableErrorFailureReqDTO" >
        select 
            job_name    as jobName,
            sdb,
            tdb,
            sowner,
            stab,
            towner,
            ttab,
            error_flag  as errorFlag,
            comm,
            create_date as createDate
         from 

其他字段还好,不受影响。主要是日期字段,又出现了精度丢失的情况!!

造成错误的原因就是使用了别名!!

所以正确的写法应该是:

<select id="getErrorTableLstByPage" resultMap="BaseResultMap" parameterType="com.cmrh.kettle.monitor.dto.TableErrorFailureReqDTO" >
        select 
            job_name,
            sdb,
            tdb,
            sowner,
            stab,
            towner,
            ttab,
            error_flag,
            comm,
            create_date
         from 

好,问题解决。

其实这两个都是很低级的错误,以前只知道套用框架的东西,并没有去想为什么,在此警示自己多去学习mybatis底层的原理!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值