文章
-
[每天一个知识点] 9-Java 语言 - CharSequence 是什么?
在跟字符串相关的方法中,我们常常会看到参数类型是 CharSequence,通常我们都把它等价于 String 类型,将参数使用 toString () 等方法转换为 String 再传入。实际上,CharSequence 是一个接口,String、StringBuilder 和 StringBuffer 都实现了 CharSequence 接口,所以以后再调用含有 CharSequence 类型参数的方法时,可以直接将 StringBuilder 或 StringBuffer 直接传入进去,减少一次转换。另外,有些工具类中跟字符串相关的类型,也会实现这个接口,便于减少方法调用直接传参。
-
[每日短篇] 28 - JPA 的关系映射
介绍关系映射的帖子很多,但是缺少一个能够容易看懂的帖子,所以自己总结一点用于备忘。
1.关系映射有 4 个注解 @ManyToMany, @ManyToOne, @OneToMany, @OneToOne
2.关系是 自己 To 对方,即 @ManyToOne 是自己 Many 对对方 One
3.To 后面是 Many 的注解(@ManyToMany, @OneToMany)修饰的属性一定是集合
4.两个实体之间有拥有 (owning) 和被拥有 (owned) 之分
5.对应主从表的话主是被拥有 (owned),从是拥有 (owning),所以被拥有方 (owned) 的主键是拥有方 (owning) 的外键
6.两个实体之间的关系由拥有方 (owning) 维护,也就是从表存外键(一对多)或者拥有方 (owning) 实体维护映射表(多对多),被拥有方 (owned) 不对映射表操作
7.注解的 mappedBy 参数是加在被拥有方 (owned) 实体类里的注解上的,用于指出拥有关系的属性(拥有方 (owning) 实体中的某个属性)
8.@JoinColumn, @JoinTable 注解是拥有方 (owning) 实体类里的注解,跟 mappedBy 各在一方
9.直观来看,有主从关系的比较容易判断,比如上传文件的归属,先有用户才能上传文件,那么文件是拥有方 (owning)、用户是被拥有方 (owned)
10.如果双方关系看起来比较对等,比如学生和老师的关系,拥有 (owning) 和被拥有 (owned) 关系的选择没有明显的答案,但是要注意保存数据时要创建拥有方 (owning) 实体、给属性赋值被拥有方 (owned) 对象、保存拥有方 (owning) 实体,这样才能在映射表中添加记录,如果反过来保存被拥有方 (owned) 实体则不会自动在映射表添加记录。所以在建立新关系时要注意保存谁
11.如果是删除操作(在没有级联的情况下),删除被拥有方 (owned) 实体不会操作映射表,删除拥有方 (owning) 实体会删除映射表中拥有方 (owning) 相关的记录,所以在删除时要考虑被拥有方 (owned) 删除要不要清理关联表中的垃圾数据
12.级联跟 11 条不是一个事情,级联有级联的规则,但是我的习惯是不级联
-
[每日短篇] 22 - MariaDB 和 MySQL 的 WHERE 中 = 会 trim 右侧空白字符
版本10.4.8-MariaDB-1:10.4.8+maria~bionic MySQL 8.0 在 select xxx from xxx where field = 'yyy' 语句中,如果 yyy 末尾有空格或者 field 中末尾有空格,比较时都会去掉行尾的空格再做比较。行首的空格不会被去掉,字段无索引,like 'yyy' 会精确匹配。暂时不知道是特性还是 BUG。
-
[每日短篇] 21 - 新版 Eclipse 的 ScrollOffset 特性
在 Eclipse 2019-06 也就是 4.12 中新增了 ScrollOffset 特性,也就是移动光标时,会让光标上下保持 n 行可见。正是这个特性使得使用鼠标时一不留神屏幕就会跳一下,非常影响写代码的流畅性。对此深恶痛绝的可以在 Preferences > General > Editors > Text Editors > ScrollOffset 中关掉这个特性。Offset 是保持多少行可见,但是多用用就会发现它的表现非常跳脱,有时候管用有时候不管用,有时候上面管用有时候下面管用,所以不如关掉保持原来的习惯,等到之后版本处理好了再用。
-
[每日短篇] 1B - Ubuntu 和 Windows 双系统下时间设置
-
[每日短篇] 1A - SpringMVC 传递时间类型的参数