Mybatis
Mybatis是一个持久层框架,它对jdbc的操作数据库的过程进行封装。
Config.xml配置文件
properties(属性)
mybatis可以使用properties来引入外部properties配置文件的内容;
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
mappers(映射器)
将我们写好的sql映射文件(***Mapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中.
注册xml文件
resource:引用类路径下的sql映射文件
url:引用网路路径或者磁盘路径下的sql映射文件
注册接口
class:引用(注册)接口
有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
没有sql映射文件,所有的sql都是利用注解写在接口上;
Mapper.xml配置文件
parameterType(输入类型)
确定传入参数类型,可以省略
resultType(输出类型)
增删改操作可以直接返回int long boolean那类型,不用指定
查找后期补充
useGeneratedKeys、keyProperty
useGeneratedKeys:指定是否返回数据库自增得到的id.默认为false keyProperty:指定得到的ID由那个属性来保存
#{}、${}
相同点:
#{}:可以获取map中的值或者pojo对象属性的值;
KaTeX parse error: Expected 'EOF', got '#' at position 126: …下,我们去参数的值都应该去使用#̲{}; 原生jdbc不支持占…{}进行取值
例如查询某一年的员工工资表格:select * from ${year}_salary where xxx;
动态SQL
MyBatis的一个强大的特性之一通常是它的动态SQL能力。如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联 SQL 字符串在一起是多么的痛苦,确保不能忘了空 格或在列表的最后省略逗号。动态SQL可以彻底处理这种痛苦。
通常使用动态SQL不可能是独立的一部分,MyBatis 当然使用一种强大的动态SQL语言来改进这种情形,这种语言可以被用在任意映射的SQL语句中。
动态SQL元素和使用JSTL或其他相似的基于 XML 的文本处理器相似。在 MyBatis 之 前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半 的元素就能工作了。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。
•if
•choose (when, otherwise)
•trim (where, set)
•foreach
MyBatis缓存机制
MyBatis默认分为两级缓存。
一级缓存(本地缓存):
sqlSession级别的缓存。一级缓存是一直开启的;SqlSession级别的一个Map 与数据库同一次会话期间查询到的数据会放在本地缓存中。 以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库;
一级缓存失效情况:
sqlSession不同。
sqlSession相同,查询条件不同.(当前一级缓存中还没有这个数据)
sqlSession相同,两次查询之间执行了增删改操作(这次增删改可能对当前数据有影响)
sqlSession相同,手动清除了一级缓存(缓存清空)
二级缓存(全局缓存):
基于namespace级别的缓存:一个namespace对应一个二级缓存:
一个会话,查询一条数据,这个数据就会被放在当前会话的一级缓存中;
如果会话关闭;一级缓存中的数据会被保存到二级缓存中;新的会话查询信息,就可以参照二级缓存中的内容;
使用步骤:
开启全局二级缓存配置:
去mapper.xml中配置使用二级缓存:
我们的POJO需要实现序列化接口