自定義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 當前參數的數據庫類型*/@Overridepublic 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*/@Overridepublic 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對象*/@Overridepublic 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*/@Overridepublic 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 {@Resourceprivate 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數據庫配置