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 关闭时,会将数据存入到二级缓存。
二级缓存失效的情况
两次查询之间执行了任意的增删改