Mybatis中针对数据库日期JdbcType设置

在学习Mysql的时候,我们知道数据库类型有date,datatime,time类型。在用Mybatis进行插入数据的时候,我们实体一般都是直接指定java.util.Date类型。为了确保数据类型插入的准确性,最好指定指定日期类型。

1、设置JdbcType来指定插入类型

Java中的数据类型和Mysql中如何映射的?Mybatis如下面这边展示,箭头表示对应关系。

  • (java)Date => (mysql)date mysql实例:2021-12-13

  • Time => time mysql实例:12:12

  • TimeSTAMP => datetime mysql实例:2021-12-13 12:12

2、对照实验

对照实验请关注jdbcType的变化,默认存储的crate_time类型为datetime

2.1默认不指定jdbcType

    <!--新增用户-->
    <insert id="insert" parameterType="SysUser">
        insert into sys_user(
                             id,
                             user_name,
                             user_password,
                             user_email,
                             user_info,
                             head_img,
                             create_time
                            )
                    values(
                            #{id},
                           #{userName},
                           #{userPassword},
                           #{userEmail},
                           #{userInfo},
                           #{headImg,jdbcType=BLOB},
                           #{createTime}
                         )
    </insert>
DEBUG [main] - ==>  Preparing: insert into sys_user( id, user_name, user_password, user_email, user_info, head_img, create_time ) values( ?, ?, ?, ?, ?, ?, ? ) 
DEBUG [main] - ==> Parameters: null, test1(String), 123456(String), test@mybatis.tk(String), test info(String), java.io.ByteArrayInputStream@52102734(ByteArrayInputStream), 2021-12-13 10:24:33.064(Timestamp)
DEBUG [main] - <==    Updates: 1

2.2、指定为Date类型

 #{createTime,javaType=DATE}
DEBUG [main] - ==>  Preparing: insert into sys_user( id, user_name, user_password, user_email, user_info, head_img, create_time ) values( ?, ?, ?, ?, ?, ?, ? ) 
DEBUG [main] - ==> Parameters: null, test1(String), 123456(String), test@mybatis.tk(String), test info(String), java.io.ByteArrayInputStream@52102734(ByteArrayInputStream), 2021-12-13(Date)
DEBUG [main] - <==    Updates: 1

2.3、指定为TIME类型

 #{createTime,javaType=TIME}
DEBUG [main] - ==>  Preparing: insert into sys_user( id, user_name, user_password, user_email, user_info, head_img, create_time ) values( ?, ?, ?, ?, ?, ?, ? ) 
DEBUG [main] - ==> Parameters: null, test1(String), 123456(String), test@mybatis.tk(String), test info(String), java.io.ByteArrayInputStream@52102734(ByteArrayInputStream), 10:31:46(Time)
DEBUG [main] - <==    Updates: 1

2.4、指定为TIMESTAMP类型

#{createTime,jdbcType=TIMESTAMP}
DEBUG [main] - ==>  Preparing: insert into sys_user( id, user_name, user_password, user_email, user_info, head_img, create_time ) values( ?, ?, ?, ?, ?, ?, ? ) 
DEBUG [main] - ==> Parameters: null, test1(String), 123456(String), test@mybatis.tk(String), test info(String), java.io.ByteArrayInputStream@3541cb24(ByteArrayInputStream), 2021-12-13 10:33:53.337(Timestamp)
DEBUG [main] - <==    Updates: 1

3、总结

虽然说Mybatis有默认的类型处理器,可以自己去判断java的数据的数据类型,去智能化插入到数据库。但是为了防止类型错误,对于一些特殊的数据类型,建议还是指定具体的jdbcType值。

#{headImg,jdbcType=BLOB}//mysql二级制流blob指定
#{createTime,jdbcType=TIMESTAMP} //mysql时间戳datetime指定

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐