MyBatis中时间格式的映射问题

本文介绍Java中的Date类如何映射到MySQL的TIMESTAMP或DATETIME类型,并提供了两篇参考博客来深入理解这两种时间类型之间的转换及区别。

简单地说,就是Java的Date类可以直接映射到Mysql的TIMESTAMP或者是DATETIME(按道理应该是映射成DATE的)

 

具体的看这两篇博客吧:

 

1. MySql中TIMESTAMP和DATETIME的区别与相同之处:

https://www.cnblogs.com/ivictor/p/5028368.html

 

2.Java与MySQL直接时间类型的传递:

https://www.cnblogs.com/GaoAnLee/p/7136224.html

转载于:https://www.cnblogs.com/wangshen31/p/8933276.html

MyBatis 中正确映射日期类型字段,可采用以下方法: ### 通过字段别名解决 在 SQL 查询语句里,为日期字段设置别名,让其和 Java 对象的属性名一致。 ```xml <select id="selectUser" resultType="User"> SELECT id, user_name, birthday AS birthDate FROM users WHERE id = #{id} </select> ``` ```java public class User { private Integer id; private String userName; private Date birthDate; // Getters and Setters } ``` ### 通过全局配置 `mapUnderscoreToCamelCase` 解决 在 MyBatis 的配置文件里开启 `mapUnderscoreToCamelCase`,这样 MyBatis 会自动把数据库字段名的下划线命名转换为 Java 属性的驼峰命名。 ```xml <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> ``` 假设数据库字段为 `create_time`,Java 属性为 `createTime`,开启此配置后,MyBatis 会自动完成映射。 ### 通过 `resultMap` 解决 使用 `resultMap` 明确指定数据库字段和 Java 属性的映射关系。 ```xml <resultMap id="UserResultMap" type="User"> <id property="id" column="id"/> <result property="userName" column="user_name"/> <result property="birthDate" column="birthday"/> </resultMap> <select id="selectUser" resultMap="UserResultMap"> SELECT id, user_name, birthday FROM users WHERE id = #{id} </select> ``` ```java public class User { private Integer id; private String userName; private Date birthDate; // Getters and Setters } ``` ### 处理日期格式 若数据库中的日期格式和 Java 代码中的日期格式不同,可借助 MyBatis 的类型处理器(`TypeHandler`)进行转换。 ```java import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; import java.sql.*; import java.text.SimpleDateFormat; import java.util.Date; @MappedTypes(Date.class) @MappedJdbcTypes(JdbcType.DATE) public class DateTypeHandler extends BaseTypeHandler<Date> { private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); @Override public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, DATE_FORMAT.format(parameter)); } @Override public Date getNullableResult(ResultSet rs, String columnName) throws SQLException { try { String dateStr = rs.getString(columnName); return dateStr != null ? DATE_FORMAT.parse(dateStr) : null; } catch (Exception e) { return null; } } @Override public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException { try { String dateStr = rs.getString(columnIndex); return dateStr != null ? DATE_FORMAT.parse(dateStr) : null; } catch (Exception e) { return null; } } @Override public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { try { String dateStr = cs.getString(columnIndex); return dateStr != null ? DATE_FORMAT.parse(dateStr) : null; } catch (Exception e) { return null; } } } ``` 在 MyBatis 配置文件中注册该类型处理器: ```xml <typeHandlers> <typeHandler handler="com.example.DateTypeHandler"/> </typeHandlers> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值