MySQL事务隔离
MySQL 事务隔离相关命令如下:
1 | -- 查看当前会话隔离级别 |
MySQL 默认的隔离级别是 RR, Repeatable Read。
MySQL 事务隔离相关命令如下:
1 | -- 查看当前会话隔离级别 |
MySQL 默认的隔离级别是 RR, Repeatable Read。
Java 程序中,我们使用 MyBatis ORM 框架和 MySQL 交互。MySQL 有个 user 表,所以在 Java 程序我们需要有个 User 类。
我给 User 类添加了 @Data
和 @Builder
注解,结果在做 select
操作时报错了,MyBatis 应该是说需要一个无参构造器。
@Data
注解会默认生成 getter/setter
,和无参构造方法,但是当我们添加了 @Builder
注解时,无参构造器就被删除掉了,所以报错了。
这时我们会想到那我再加一个 @NoArgsConstructor
注解行不行呢,实验后发现是不行的。
@NoArgsConstructor
和 @Builder
会有冲突,导致编译出错。
可以添加一个无参构造方法并加上@Tolerate
注解,如下:
1 | @Data |
或者,类似这种和MySQL表结构对应的Entity类,就不使用 @Builder
注解,需要User实例时,就 new 一个吧。
Java 开发实践中,我们在处理时间、时区上总是搞得很乱。这里总结一下认为比较好的一个最佳实践,欢迎大家提出自己的意见。
Java 中不带时区的类 java.time.LocalDateTime
,这个类对应 MySQL 中 datetime
类型。MySQL 中的 datetime
类型也是不带时区概念的。
不带时区概念的意思就是说,当我看到这个值的时候,并不能唯一确定时间,因为没有时区信息。
但 Java 中的类 java.util.Date
或 java.time.ZonedDateTime
却是带了时区的类,这个值,是能唯一确定时间的。
我们在中国开发应用程序时,最佳解决方案:
Java, MySQL 所在服务器时间设置为东八区时间。
Java, MySQL 默认使用服务器时区。
java connector 6 版本以后,MySQL 连接字符串指定东八区,不指定是默认西五区的美国东部时间。
前端拿到东八区时间后,根据浏览器时区做相应的调整。前端提交表单时,拿到当地时间后,转换成东八区时间提交。