Mybatis续

文章详细介绍了Mybatis中关于自增主键的设置,ResultMap的使用,包括association和collection元素处理多表关联,以及注解方式如@Insert、@Select等。同时,阐述了动态SQL的If、Where、Trim等元素的功能,并讲解了一级缓存和二级缓存的工作原理及失效情况。
摘要由CSDN通过智能技术生成

useGenerateKeys:设置当前标签中sql使用了自增的主键

KeyProperty:将自增的主键的赋值对象的某个属性

//ResuleMap:设置自定义的关系(只有在查询时可以用上)

id:唯一 不能重复

type:设置映射关系中的实体类型

子标签:

id:设置主键的映射关系

result:设置普通字段的映射关系

属性:

property:设置映射关系中的属性名,必须是type属性所设置的实体类类型中的属性名

column:设置映射关系中的字段名,必须是sql语句查询出的字段名//

多表关联处理结果集

resultMap 元素中 association , collection 元素.

Collection 关联元素处理一对多关联。

• 部门与员工一对多关系

• 部门一方,配置多方集合

• 员工多方,在多方配置一方

ofType:表示该属性集合中存储数据的类型

• 使用 resultMap 组装查询结果

• 使用 resultMap 组装查询结果

注解方式

常用注解标签

@Insert : 插入 sql , 和 xml insert sql 语法完全一样

@Select : 查询 sql, 和 xml select sql 语法完全一样

@Update : 更新 sql, 和 xml update sql 语法完全一样

@Delete : 删除 sql, 和 xml delete sql 语法完全一样

@Param : 入参

@Results : 设置结果集合

@Result : 结果

9动态Sql

If 元素

if 标签根据test属性所对应的表达式决定标签中的内容是否拼接到Sql语句中,对传入的条件进行判断

type=1是恒成立保证不影响查询结果,而且保证条件都不成立时,where不多余。

Where元素

当where标签中有内容时,会自动生成where关键字,并且将内容前多余的and或or去掉。

当where标签中没有内容时,此时where标签没有任何效果。

但where标签不能将内容后多余的and去掉。

trim元素

prefix/suffix:将trim标签中内容前面或后面添加指定内容

suffixOverrides/prefixOverrides:将trim标签中内容前面或后面去掉指定内容

若标签中没有内容时,trim标签也没有任何效果

choose、when、otherwise元素相当于if...else if...else

where至少要有一个,otherwise最多只能有一个

foreach

collection:设置需要的数组或集合

item:表示数组或集合中的每一个数据

separator:循环体之间的分隔符

open:foreach标签所循环的所有内容的开始符

close:foreach标签所循环的所有内容的结束符

10Mybatis的缓存

一级缓存的作用域是同一个 SqlSession, 在同一个 sqlSession 中两次执行相同的 sql 语句,第一次执行完毕会将数据库 中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个 sqlSession 结束后该 sqlSession 中的一级缓存 也就不存在了。Mybatis 默认开启一级缓存。

使一级失效的4种情况:

1)不同的SqlSession对应不同的一级缓存

2)同一个SqlSession但是查询条件不同

3)同一个SqlSession两次查询期间执行了任何一次的增删改查

4)同一个SqlSession两次查询期间手动清空了缓存

一级缓存的生命周期

a、MyBatis 在开启一个数据库会话时,会 创建一个新的 SqlSession 对象,

SqlSession 对象中会有一个新的 Executor 对象。Executor 对象中持有一个新

的 PerpetualCache 对象,如果 SqlSession 调用了 close()方法,会释放掉一级

缓存 PerpetualCache 对象,一级缓存将不可用。

b、如果 SqlSession 调用了 clearCache(),会清空 PerpetualCache 对象中的数

据,但是该对象仍可使用。

c、SqlSession 中执行了任何一个 update 操作(update()、delete()、 insert()) ,

都会清空缓存的数据,但是该对象可以继续使用。

二级缓存是多个 SqlSession 共享的,其作用域是同一个 namespace,不同的sqlSession 两次执行相同 namespace 下的 sql 语句且向 sql 中传递参数也相同 即最终执行相同的 sql 语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。 Mybatis 默认没有开启二级缓存需要在 setting 全局参数中配置开启二级缓存。

配置二级缓存配置

第一步:启用二级缓存

在 SqlMapperConfig.xml 中启用二级缓存,如下代码所示,当 cacheEnabled 设

置为 true 时启用二级缓存,设置为 false 时禁用二级缓存。

<setting name="cacheEnabled" value="true"/>

第二步:对象序列化

将所有的 POJO 类实现序列化接口 Java.io. Serializable。

第三步:配置映射文件

在 Mapper 映射文件中添加<cache />,表示此 mapper 开启二级缓存。

当 SqlSeesion 关闭时,会将数据存入到二级缓存。

二级缓存失效的情况

两次查询之间执行了任意的增删改

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值