自定义TypeHandler

自定义TypeHandler

继承BaseTypeHandler指定具体的泛型

@MappedTypes({Date.class})
@MappedJdbcTypes({JdbcType.DATE})
public class DateTimeWithTImeZoneTypeHandler extends BaseTypeHandler<Date> {
  Log log = LogFactory.getLog(DateTimeWithTImeZoneTypeHandler.class);
  /**
   * 用于定义在Mybatis设置参数时该如何把Java类型的参数转换为对应的数据库类型
   * @param ps 当前的PreparedStatement对象
   * @param i 当前参数的位置
   * @param parameter 当前参数的Java对象
   * @param jdbcType 当前参数的数据库类型
   */
  @Override
  public void setNonNullParameter(PreparedStatement ps, int i, Date parameter, JdbcType jdbcType) throws SQLException {
    ps.setTimestamp(i, new Timestamp(parameter.getTime()));
  }

  /**
   * 用于在Mybatis获取数据结果集时如何把数据库类型转换为对应的Java类型
   *
   * @param rs 当前的结果集
   * @param columnName 当前的字段名称
   * @return 转换后的Java对象
   * @throws SQLException the SQL exception
   */
  @Override
  public Date getNullableResult(ResultSet rs, String columnName) throws SQLException {
    String ret = rs.getString(columnName);
    try {
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S X");
      return dateFormat.parse(ret);

    } catch (ParseException e) {
      log.fatal(e.getMessage());
      return null;
    }
  }

  /**
   * 用于在Mybatis通过字段位置获取字段数据时把数据库类型转换为对应的Java类型
   * @param rs 当前的结果集
   * @param columnIndex 当前字段的位置
   * @return 转换后的Java对象
   */
  @Override
  public Date getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
    String ret = rs.getString(columnIndex);
    try {
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S X");
      return dateFormat.parse(ret);

    } catch (ParseException e) {
      log.fatal(e.getMessage());
      return null;
    }
  }

  /**
   * 用于Mybatis在调用存储过程后把数据库类型的数据转换为对应的Java类型
   * @param cs 当前的CallableStatement执行后的CallableStatement
   * @param columnIndex 当前输出参数的位置
   * @return
   * @throws SQLException
   */
  @Override
  public Date getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
    String ret = cs.getString(columnIndex);
    try {
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S X");
      return dateFormat.parse(ret);

    } catch (ParseException e) {
      log.fatal(e.getMessage());
      return null;
    }
  }
}

给需要处理的字段加上自定义typeHandler

@EqualsAndHashCode()
@Data
@TableName(value = "TEST_DATE", autoResultMap = true)
public class TestDate {
    @TableField(value = "NEW_TIME",typeHandler = DateTimeWithTImeZoneTypeHandler.class)
  private Date newTime;
    @TableField(value = "OLD_TIME",typeHandler = DateTimeWithTImeZoneTypeHandler.class)
  private Date oldTime;
    @TableId(value = "ID", type = IdType.ASSIGN_UUID)
    private  String id;
}

mapper层代码

@Mapper
public interface ITestDateMapper extends BaseMapper<TestDate> {
}

Controller触发请求

@RestController
@RequestMapping("/type")
public class TypeHandleController {
    @Resource
    private ITestDateMapper iTestDateMapper;

    @GetMapping(value = "/task1")
    public Result<Object> task1() {
    	//新增
        TestDate testDate = new TestDate();
        testDate.setNewTime(new Date());
        testDate.setOldTime(new Date());
        iTestDateMapper.insert(testDate);

		//查询
        LambdaQueryWrapper<TestDate> queryWrapper = new LambdaQueryWrapper<>();
        List<TestDate> testDates = iTestDateMapper.selectList(queryWrapper);
        return Result.success(testDates);
    }
}

responseBody

{
	"code": 0,
	"msg": "success",
	"data": [{
		"newTime": "2024-03-03T10:35:26.704+00:00",
		"oldTime": "2024-03-03T10:35:26.704+00:00",
		"id": "fe380a2e53307239b169197bb594f9b2"
	}, {
		"newTime": "2024-03-03T10:36:27.777+00:00",
		"oldTime": "2024-03-03T10:36:27.777+00:00",
		"id": "05069ec3462d4bb6ae260669dcb629a1"
	}, {
		"newTime": "2024-03-03T10:37:14.973+00:00",
		"oldTime": "2024-03-03T10:37:14.973+00:00",
		"id": "a05a98ebe436c5811b052ec524ac5be5"
	}, {
		"newTime": "2024-03-03T10:40:58.744+00:00",
		"oldTime": "2024-03-03T10:40:58.744+00:00",
		"id": "465d5c1573a4623ca518eb1f918d15c1"
	}, {
		"newTime": "2024-03-03T10:42:42.604+00:00",
		"oldTime": "2024-03-03T10:42:42.604+00:00",
		"id": "afcf6802b752f38b87b6eb56011f0d4d"
	}]
}

省略mybatisplus注入配置类和application.yml数据库配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值