Springboot+MybatisPlus项目中,数据库表中存放Date,查出后转为String

新增一条记录时,数据库表中会有一个gmt_created 的字段,存放创建时间。
该值在数据库中的默认值为:CURRENT_TIMESTAMP
在对应的JavaBean中,该值为 gmtCreated


那么问题来了:

如何让在表中的Date类型,查出来的时候自动转为 String"yyyy-MM-dd HH:mm:ss") 类型呢?
最好是可以自动全部转换,不要一个个配置mapper.xml文件。

交代一下框架背景:
springboot + mybatis-plus

如下步骤操作即可:

  1. 先编写一个 TypeHandler 类
    import org.apache.ibatis.type.JdbcType;
    import org.apache.ibatis.type.MappedJdbcTypes;
    import org.apache.ibatis.type.MappedTypes;
    import org.apache.ibatis.type.TypeHandler;
    
    import java.sql.*;
    import java.text.SimpleDateFormat;
    
    @MappedTypes(String.class)
    @MappedJdbcTypes(JdbcType.DATE)
    public class DateTimeStringTypeHandler implements TypeHandler<String> {
    
        private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
        private String getDateTimeAsString(Timestamp timestamp) {
            if (timestamp != null) {
                return dateFormat.format(timestamp);
            }
            return null;
        }
    
        @Override
        public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
            // 插入操作时不使用
        }
    
        @Override
        public String getResult(ResultSet rs, String columnName) throws SQLException {
            return getDateTimeAsString(rs.getTimestamp(columnName));
        }
    
        @Override
        public String getResult(ResultSet rs, int columnIndex) throws SQLException {
            return getDateTimeAsString(rs.getTimestamp(columnIndex));
        }
    
        @Override
        public String getResult(CallableStatement cs, int columnIndex) throws SQLException {
            return getDateTimeAsString(cs.getTimestamp(columnIndex));
        }
    }
    
    
  2. 在application.yml 中,指定TypeHandler所在的包的位置
    mybatis-plus:
      type-handlers-package: com.infrastructure.db.DateTimeStringTypeHandler
    
  3. 实体Bean的写法
    @Data
    @TableName(value = "social_follow")
    public class SocialFollow implements Serializable {
    
        private Long id;
    
        private String followedUid;
    
        private String fansUid;
    
        @TableField(value = "gmt_created", typeHandler = DateTimeStringTypeHandler.class)
        private String gmtCreated;
    

注:

  • 数据表结构:
CREATE TABLE `social_follow` (
  `id` bigint NOT NULL,
  `followed_uid` varchar(45) DEFAULT NULL COMMENT '被关注用户标识',
  `fans_uid` varchar(45) DEFAULT NULL COMMENT '粉丝用户标识',
  `gmt_created` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `IDX_UNIQUE` (`followed_uid`,`fans_uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='朋友圈关注'
  • mapper.xml文件:(空的)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.social.SocialFollowMapper">
</mapper>

以上三步,就可以实现让所有的gmtCreate 从表里取出后即为 String 的 yyyy-MM-dd HH:mm:ss 格式了!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值