一、什么是Mybatis
1.Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发只需关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接写原生态sql
2.MyBatis可以使用XML或注解来配置和映射原生信息,将POJO映射成数据库中的记录
二、RequestMapping、RequestBody、ResponseBode的区别
1.RequestMapping:前台访问后台,以指定路径访问,可以用来类上,也可以用在方法上
2.RequestBody:用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口,将读到的内容(json数据)转化为java对象并绑定到Controller方法的参数上
3.ResponseBody:用于Controller方法返回的对象,通过springmvc提供的HttpMessageConverter接口转化为指定格式的数据,json,通过Response相应给客户端
三、#{}和${}的区别是什么
#{}是预编译,${}是字符串替换。
MyBatis在处理#{}时,会将sql的#{}替换为?号,调用PreparedStatement的set方法来赋值
Mybatis在处理${}时,就是把${}替换成变量的值
使用#{}可以有效防止SQL注入,提高系统安全性,例子如下:
四、当实体类的属性名和表中字段名不一致,怎么办
1.直接在sql语句中定义别名,让字段名的别名和实体类的属性名一致
2.通过<resultMap>来映射字段名和实体类属性名一一对应
五、mysql的like模糊写法
六、通常一个Xml映射文件,都会写一个Dao接口对应,请问这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗
答案如下图:
七、Mybatis动态sql有什么用?
Mybatis动态sql可以在XMl映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值,完成逻辑判断并动态拼接sql的功能。
Mybatis提供了9种动态sql标签:trim,where,set,foreach,if,choose,when,otherwise
八、关联查询
association是用于一对一和多对一,而collection是用于一对多的关系
九、Mybatis的懒加载
1.介绍:体现在<assocation和collertion>的参数中,当不需要连表的数据时,只加载当前的数据
2.配置如下:
3.sql编写如下:
ofType:指定了这个集合的存放类型
property:指定了这个集合在Teacher类的属性名
fetchType:指定了哪种加载方式
column:指定了上一条sql中查询的结果的哪一列的值会被传递到下一条sql中作为条件值
select:指定了下一条被执行的<select>的id名
结果如下:
十、Mybatis的缓存机制
一级缓存:
1.Mybatis对缓存提供支持,在没有配置的情况下,只开启一级缓存
2.相对于同一个sqlSession,在参数和sql相同的情况下,使用同一个sqlSession对象调用同一个Mapper方法,往往只执行一次,因为第一次查询时,Mybatis将其放到缓存中,没有声明刷新和缓存超时,sqlSession都会取出当前缓存
3.一级缓存的生命周期
二级缓存:
1.返回的对象需要序列化
2.二级缓存配置
只执行sql一次: