Mybatis注意事项
一、事务问题
1、事务的特征
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
1、原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中的诸多操作要么都做,要么都不做。
2、一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
3、隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
4、持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
2、事务的提交与回滚
一组业务整体处理的行为叫一个事务。事务的提交是指事务里的所有操作都正常完成,这一组的业务都能成功处理,我们就可以把这个事务提交来保存你已做的行为结果。但如果一组中有任何的差错出现的话,我们就认为这事务不成功,需要回滚来撤消之前的操作。举例:你去银行转账,转账我们有两步吧,从你账户中取出钱再往他账户中加钱。那这两步银行是必须要确保正确无误的进行的。要被看做成一个事务。其中任何一步出错就算是转账失败,但可能你这时是已经从你账户中扣了钱了,又没往他账户里加钱?怎么办算了?你不肯吧。所以银行会事务回滚,不保存你刚才的操作,即恢复到你没转账之前的状态。
3、MyBatis中的事务
主要有两种,一个是JDBC原生事务机制,另一个是MANAGED

JDBC:

MANAGE:

例子:

需要手动提交

而使用MANAGEED则不用,默认没有容器,没有事务,没有事务意味着,每执行一句就提交一次。这样就不用手动提交。
二、参数问题
1、Map参数和实体参数

举例:
Map参数


实体类参数

测试:



2、单个简单类型参数


3、多参数

上面的内容描述不如name和age清除,使用注解的方式


4、查询返回

发现上面是可以的,当然除了as起别名还有另外两种方法:
使用resultMap进行结果映射:

开启驼峰命名:

下面展示返回pojo数据用List集合收集:

当然可以使用List的Map来接受:

三、MyBatis中接口代理机制及使用
1、动态代理知识





2、使用

四、restultType起别名和mapper映射

上面显的很长,所以起别名。
1、typeAlias

2、package

3、mapper映射-resource

4、mapper映射-class
一定注意下面的配置:


5、mapper映射-package

五、动态SQL
1、if
多条件模糊查询

最好是在where后面添加一个0=0,这样及时后面有些字段为空,也没关系。
2、where

这就解决了上面的问题。

加个where就解决了上面if的问题,就不用再加where 0=0了。
但是问题来了,如果and在后面呢?


使用trim来解决这个问题。
3、trim标签

4、set标签


5、choose when otherwise
这三个标签是一起使用的



6、foreach标签
循环数组或集合,动态生成sql,比如这样的sql:




六、Mybatis的高级映射和延迟加载
1、多对1


①级联属性映射


②association

③分布查询



2、多对一延迟加载



3、一对多

①collection


②分布查询


4、一对多延迟加载

七、MyBatis的三级缓存

1、一级缓存



2、二级缓存





三级缓存:
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号