1.Mybatis框架是什么?
mybatis是一款非常优秀的持久化框架,也是一个半ORM(对象关系映射)框架。mybatis框架它支持sql语句的定制化、存储过程和高级映射。mybatis避免了JDBC代码和手动设置参数和获取结果集。mybatis使用简单的xml或者是注解方式配置和映射原生类型、接口和java的实体类为数据库中的记录。
2.Mybatis编程步骤是什么?
第一步:创建SqlSessionFactory
第二步:通过SqlSessionFactory创建sqlSession
第三步:使用sqlSession执行数据库的操作
第四步:使用sqlSession.commit完成事务的提交
第五步:使用sqlSession.close进行资源的关闭
3.在Mybatis中,$和#的区别是什么?
${}是字符串替换,#{}是占位符
${}在执行的过程中,直接将字符串内容进行了替换
#{}在执行的过程中,会将#{}替换成?,使用preparedStatement调用set来完成数据的赋值,然后执行。使用#{}能够防止sql注入,安全性更高。
4.在Mybatis中,resultType和resultMap的区别是什么?
如果数据库结果的列名和实体类的属性可以一一对应的话,使用resultType。如果数据库结果的列名和实体类的属性不能实现一一对应的话,使用resultMap完成映射,resultMap需要配置一下表和类的一一对应关系,因此数据库结果的列名和属性名可以不用一致,也能够给你映射出来。
5.在Mybatis中,常用的动态sql标签有哪些?分别有什么作用?
<if>:if用来匹配是否满足某种特定规则,比如是否为空
<where>:where是用来动态拼接查询条件,和if配合使用可以省略掉无效的where 1=1 的写法
<include>:如果有大量可重复利用的代码,可以用include进行整合,完了需要的时候完成调用即可,实现了代码的复用。
<foreach>:foreach可以将传入的集合对象进行循环遍历,将对象作为参数传入sql语句。
<set>:set用于更新,只有匹配成功才能够完成更新操作。
6.Mybatis缓存机制?
一级缓存:sqlSession级别的,默认是开启状态,不能够被关闭。数据查询顺序:一级缓存->数据库。
场景:例如查询用户为用户1的数据,在执行的时候会从缓存里面获取数据,如果没获取到的话会从数据库里面查询,查到后也会同时放到缓存里面。等到第二次查询用户为用户1的数据,直接从缓存里面获取即可。
在里面需要注意的是,如果sqlSession失效了,或者sqlSession关闭了,或者在两次查询中间执行了CUD操作,或者执行了clear操作,缓存里面的数据都可能失效。
二级缓存:mapper级别的,默认是关闭状态,如果需要使用需要开启。在配置文件里面将cacheEnable设置为true。数据查询顺序:二级缓存->一级缓存->数据库。
场景:例如查询用户为用户1的数据,在执行的时候会从二级缓存里面获取,然后没有的话再去一级缓存获取,若还是没有找到则从数据库里面获取。由于不同的业务可能需要获取相同的数据,但是每个service层都有自己的sqlSession在完成后都会被关闭,但是使用了二级缓存后当sqlSession关闭或提交后二级缓存的数据都会被放置里面。等到有需要获取的时候,就可以先从二级缓存里面获取到,如果发现没获取到失效了可以从一级缓存、数据库依次获取。