1.Mybatis中的动态sql标签有哪些
- if:当参数满足条件才会执行某个条件
- choose、when、otherwise:choose标签按顺序判断其内部when标签中的test条件是否成立,如果有一个成立。则choose结束,如果所有when条件都不成立,则执行otherwise中的sql,类似与java中的switch语句。
- where:where标签只有一个以上的if条件满足的情况下才会去插入where关键字,而且也会根据语法去掉开头的and或or
- set:set标签会动态前置set关键字,同时也会消除无关的逗号。
- trim:用来动态拼接sql语句,prefix以什么开头,suffix以什么结尾,prefixOverrides覆盖掉指定开头内容,suffixOverrides覆盖掉指定结尾内容
- foreach:对集合、数组或map进行遍历
- bind:bind标签可以从OGNL(对象图导航语言)表达式中创建一个对象并将其绑定到上下文。
2.SpringBoot启动原理(SpringBoot自动配置原理)
- @SpringBootApplication:启动类注解
- @EnableAutoConfiguration:自动配置注解
- @import(AutoConfigurationImportSelector.class):自动导入配置文件的选择器
- getCandidateConfigurations()方法获取所有候选配置
- 通过springfactories文件获取配置类的位置
- @ConditionOnClass条件,不成立不加载配置类,成立获取配置类,在上层方法中循环封装为properties对象供我们使用。
3.事务的四大特性是什么
- 原子性:一个事务中包括多个步骤,要不都执行,要么都不执行
- 一致性:事务在执行前后,数据在逻辑上保持一致(转账)
- 隔离性:当多个事务共同操作同一段数据的时候,一个事务对另外一个事务的影响
- 持久性:只要事务结束了,对数据库中数据的改变都将永久的保存下来,任何设备故障、断电等问题都不会影响数据的存储。
原子性和一致性的区别(多线程下(两个人同时向一个人转账))
4.脏读、幻读、不可重复读是什么
- 脏读:一个事务读取了已被另一个事务修改但尚未提交的数据
- 幻读:在同一事务中,当同一查询多次执行的时候,由于其他插入操作事务的提交,导致每次返回不同的结果集
- 不可重复读:在同一个事务中,同一个查询,在t1时刻和t2时刻查询出了不同的结果。
脏读和不可重复读的区别:
脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是同一个事务范围内多次查询同一条数据却返回了不同的数据值,这是由于查询间隔期间。该条数据被另一个事务修改并提交了。
幻读和不可重复读的区别:
幻读和不可重复读都是读取了另一个事务中已经提交的数据,不同的是不可重复读多次查询的都是同一个数据项,针对的是对同一行数据的修改或删除,而幻读针对的是一个数据整体,主要是insert操作。
5.事务的4个隔离级别是什么
- 读未提交
一个事务可以读到另外一个事务还没有提交的数据。
- 读已提交
一个事务只能读到其他事务提交以后的数据。
- 可重复读
当前事务之外的任何修改,对于当前事务而言都是不可见。当前事务只能看到自己的修改。所以避免了 不可重复读 现象,也避免了 幻读 现象。
- 串行化
在该级别之下,当多个事务操作同一张表时,必须时一个一个操作,不能同时进行。
评论 (1)