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、二级缓存

三级缓存:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2023-11-18 13:13  小徐同学x  阅读(96)  评论(0)    收藏  举报