LocalDatetime 与 mybatis、json的坑

摘要:
众所周知,localdatetime是jdk8引入的一个非常方便的日期计算类。一旦开始使用它,就无法停止。此时,您可以添加以下依赖项:<dependency><groupId>org。mybasemybatis-typehandlers-jsr3101.0.2在上面的mybatis3 4中,依赖项将生效。当我们与前端交互时,通常使用类似yyyyMMddHH:mm:ss的格式。

总所周知,localdatetime是jdk8 推出的关于日期计算非常方便地一个类,一旦开始用上就欲罢不能。但是在使用的时候,坑还是蛮多的。

一、mybatis与LocalDatetime

如果直接将实体里面所有的Date类型换成LocalDatetime之后,运行程序是会报异常的。此时,可以加入以下依赖:

  1. <dependency>
  2. <groupId>org.mybatis</groupId>
  3. <artifactId>mybatis-typehandlers-jsr310</artifactId>
  4. <version>1.0.2</version>
  5. </dependency>

在mybatis3,.4以上,加入该依赖即可生效。mapper等跟之前一样无需修改。

二、LocalDatetime与json

此处localdatetime转json用的是jackson,其他转json的工具未测

待转类:

  1. public class MyTest {
  2.  
  3. private LocalDateTime now;
  4.  
  5. public LocalDateTime getNow() {
  6. return now;
  7. }
  8.  
  9. public void setNow(LocalDateTime now) {
  10. this.now = now;
  11. }
  12. }


将该类实例直接转成json之后输出

  1. {
  2. "now" : {
  3. "dayOfMonth" : 29,
  4. "dayOfWeek" : "FRIDAY",
  5. "dayOfYear" : 363,
  6. "hour" : 23,
  7. "minute" : 45,
  8. "month" : "DECEMBER",
  9. "monthValue" : 12,
  10. "nano" : 128000000,
  11. "second" : 10,
  12. "year" : 2017,
  13. "chronology" : {
  14. "id" : "ISO",
  15. "calendarType" : "iso8601"
  16. }
  17. }
  18. }


这样一个时间显得有点琐碎。我们一般跟前端交互的时候,用的都是形如 yyyyMMdd HH:mm:ss 这样的格式。所以此时就需要转下格式

  1. {
  2. "now" : "2017-12-29 23:50:32"
  3. }

这是时候,就需要使用到注解

作为接受参数时,使用

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

作为格式化输出时,需要使用

@JsonSerialize(using = LocalDateTimeSerializer.class)

三 奇怪的时间

有时候,使用json序列化之后的时间,会发现比传参的时间差距有几个小时.一开始感觉很奇怪,后来发现json序列化的时候指定时区为GMT+8之后,就不会出现该现象.

免责声明:文章转载自《LocalDatetime 与 mybatis、json的坑》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用HibernateClientDataSet使用心得和技巧 (转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mybatis批量foreach的使用

  最近在使用mybaits的过程中经常会碰到批量插入、更新的需求,经过查询资料和调试,现在总结如下(数据库mysql、oracle)   一、批量更新     1、oracle数据库 <update parameterType="list"> <foreach collection="list" item="item" index...

mybatis传入多个参数

需要查阅本文的基本都是需要传入多个参数的,这里记住一句话:无论你传的参数是什么样的,最后mybtis都会将你传入的转换为map的,那么既然这样,当我们要传入多个参数时,何不直接给与map类型即可,然后mapper.xml通过#{map.key}来获取值即可,这个特别适合动态搜索,或者多个参数的查询,并且可以在mapper的xml语句中通过if判断来实现若为...

mybaits3.2.8 别名包扫描通配符

<mybatis.version>3.2.8</mybatis.version><mybatis.spring.version>1.2.2</mybatis.spring.version><mybatis.generator.version>1.3.2</mybatis.generator....

mybatis一对多分页查询

今天遇到一个问题,当用户关联角色查询翻页时,如果一个用户有多个角色,会认为是多条记录,页面加载的时候就会发现记录数不对。 为了解决这个问题,我打算分两次查询,第一次只按分页查询出当前页应该展示的用户id列表,然后根据这个idlist去关联查询用户和角色的所有要用到的字段 java public Map<String, Object> selec...

mybatis以及预编译如何防止SQL注入

SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者)。[摘自]SQL injection - Wikipedia SQL注入,大家都不陌生,是一种常见的攻击方式。攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如“or ‘1’=’1’”这样的语句),有可能入侵参数检验...

MyBatis与Spring MVC结合时,使用DAO注入出现:Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

错误源自使用了这个例子:http://www.yihaomen.com/article/java/336.htm,如果运行时会出现如下错误: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessi...