File tree 4 files changed +21
-17
lines changed
system-design/framework/mybatis
4 files changed +21
-17
lines changed Original file line number Diff line number Diff line change @@ -376,7 +376,7 @@ s=list.toArray(new String[0]);//没有指定类型的话会报错
376
376
377
377
如果要进行` remove ` 操作,可以调用迭代器的 ` remove ` 方法而不是集合类的 remove 方法。因为如果列表在任何时间从结构上修改创建迭代器之后,以任何方式除非通过迭代器自身` remove/add ` 方法,迭代器都将抛出一个` ConcurrentModificationException ` ,这就是单线程状态下产生的 ** fail-fast 机制** 。
378
378
379
- > ** fail-fast 机制** :多个线程对 fail-fast 集合进行修改的时 ,可能会抛出ConcurrentModificationException,单线程下也会出现这种情况,上面已经提到过。
379
+ > ** fail-fast 机制** :多个线程对 fail-fast 集合进行修改的时候 ,可能会抛出ConcurrentModificationException,单线程下也会出现这种情况,上面已经提到过。
380
380
381
381
Java8开始,可以使用` Collection#removeIf() ` 方法删除满足特定条件的元素,如
382
382
``` java
Original file line number Diff line number Diff line change @@ -88,7 +88,7 @@ public class Sub extends Super {
88
88
}
89
89
```
90
90
91
- 在上面的例子中,Sub 类访问父类成员变量 number 并调用其其父类 Super 的 ` showNumber() ` 方法。
91
+ 在上面的例子中,Sub 类访问父类成员变量 number 并调用其父类 Super 的 ` showNumber() ` 方法。
92
92
93
93
** 使用 this 和 super 要注意的问题:**
94
94
Original file line number Diff line number Diff line change @@ -234,12 +234,16 @@ echo ${str:0:10} #输出:SnailClimb
234
234
# author:amau
235
235
236
236
var=" https://www.runoob.com/linux/linux-shell-variable.html"
237
-
238
- s1=${var%% t* } # h
239
- s2=${var% t* } # https://www.runoob.com/linux/linux-shell-variable.h
240
- s3=${var%% .* } # http://www
241
- s4=${var#*/ } # /www.runoob.com/linux/linux-shell-variable.html
242
- s5=${var##*/ } # linux-shell-variable.html
237
+ # %表示删除从后匹配, 最短结果
238
+ # %%表示删除从后匹配, 最长匹配结果
239
+ # #表示删除从头匹配, 最短结果
240
+ # ##表示删除从头匹配, 最长匹配结果
241
+ # 注: *为通配符, 意为匹配任意数量的任意字符
242
+ s1=${var%% t* } # h
243
+ s2=${var% t* } # https://www.runoob.com/linux/linux-shell-variable.h
244
+ s3=${var%% .* } # http://www
245
+ s4=${var#*/ } # /www.runoob.com/linux/linux-shell-variable.html
246
+ s5=${var##*/ } # linux-shell-variable.html
243
247
```
244
248
245
249
### Shell 数组
Original file line number Diff line number Diff line change @@ -197,14 +197,14 @@ public V get(Object key) {
197
197
198
198
举例:下面 join 查询出来 6 条记录,一、二列是 Teacher 对象列,第三列为 Student 对象列,MyBatis 去重复处理后,结果为 1 个老师 6 个学生,而不是 6 个老师 6 个学生。
199
199
200
- t_id t_name s_id
201
-
202
- | 1 | teacher | 38 |
203
- | 1 | teacher | 39 |
204
- | 1 | teacher | 40 |
205
- | 1 | teacher | 41 |
206
- | 1 | teacher | 42 |
207
- | 1 | teacher | 43 |
200
+ | t_id | t_name | s_id |
201
+ | ---- | ------- | ---- |
202
+ | 1 | teacher | 38 |
203
+ | 1 | teacher | 39 |
204
+ | 1 | teacher | 40 |
205
+ | 1 | teacher | 41 |
206
+ | 1 | teacher | 42 |
207
+ | 1 | teacher | 43 |
208
208
209
209
#### 10、MyBatis 是否支持延迟加载?如果支持,它的实现原理是什么?
210
210
@@ -238,7 +238,7 @@ public V get(Object key) {
238
238
239
239
** ` SimpleExecutor ` :** 每执行一次 update 或 select,就开启一个 Statement 对象,用完立刻关闭 Statement 对象。
240
240
241
- ** `` ReuseExecutor`:** 执行 update 或 select,以 sql 作为 key 查找 Statement 对象,存在就使用,不存在就创建,用完后,不关闭 Statement 对象,而是放置于 Map<String, Statement>内,供下一次使用。简言之,就是重复使用 Statement 对象。
241
+ ** ` ReuseExecutor ` :** 执行 update 或 select,以 sql 作为 key 查找 Statement 对象,存在就使用,不存在就创建,用完后,不关闭 Statement 对象,而是放置于 Map<String, Statement>内,供下一次使用。简言之,就是重复使用 Statement 对象。
242
242
243
243
** ` BatchExecutor ` :** 执行 update(没有 select,JDBC 批处理不支持 select),将所有 sql 都添加到批处理中(addBatch()),等待统一执行(executeBatch()),它缓存了多个 Statement 对象,每个 Statement 对象都是 addBatch()完毕后,等待逐一执行 executeBatch()批处理。与 JDBC 批处理相同。
244
244
You can’t perform that action at this time.
0 commit comments