【MapSheep】
[好记性不如烂笔头]
  1. Mybatis的一级、二级缓存?
    • 本地缓存,其作用于是在session中,当session进行close、flush就会清除缓存,默认打开一级缓存。
    • 二级缓存和一级缓存机制相同,不同的是二级缓存作用于为mapper,默认不开启,开启则需要实现序列化,在配置文件中进行cache
    • 什么时候使用二级缓存?
      • 如果多个namespace 中有针对于同一个表的操作,比如Blog 表,如果在一个namespace 中刷新了缓存,另一个namespace 中没有刷新,就会出现读到脏数据的情况。所以,推荐在一个Mapper 里面只操作单表的情况使用。
  2. 多对一,一对多?
    • 多对一
      • 多方添加一方的实体类
      • property:实体类变量名称
      • JavaType:实体类返回值
      • column:多方的外键
      • select:调用多方的根据部门编号查询
    • 一对多
      • 一方添加多方的集合
      • property:集合的变量名称
      • ofType:集合的泛型实体
      • JavaType:com.util.List
      • select:调用多方的根据外键查询
  3. Mybatis中的 ${ } 和 #{ }的区别?
    • 举例:select * from user where name = "root";
    • 解析前:select * from user where name = #{name};
    • 解析后:select * from user where name = ?;
    • 解析前:select * from user where name = ${name};
    • 解析后:select * from user where name = "root";
      • 能防止sql注入,$不能防止sql注入。所以推荐使用#

  4. 什么是Mybatis?
    • 半orm的框架,内部封装了JDBC,使用的时候只需要关注SQL,不需要关注加载驱动,创建连接等繁杂的过程等。
  5. mybatis的优缺点?
    • 优:基于sql编程,相当灵活,能够很好的与spring集成在一起,可以很好的的与个个数据库兼容。
    • 缺:需要编写大量的sql,字段多关联表多时,需要开发人员对sql有一定的功底。
  6. MyBatis 框架适用场合?
    • MyBatis 框架专注于SQL,适用于对性能要求高、需要变化比较多的项目,是一个灵活的持久层解决方案。
  7. MyBatis 与 Hibernate 有哪些不同?
    • MyBatis:它不是一个完整的orm框架,需要我们自己手写SQL。
    • Hibernate:它是一个完成的orm持久层框架,不需要写SQL,直接使用实体类加上 And Or Find自动生成SQL。
  8. 当实体类中的属性名和表中的字段名不一样 ,怎么办?
    • 使用别名,order_id or orderID
    • 使用Result进行映射,colum是数据库字段,property是实体类字段。
  9. 模糊查询 like 语句该怎么写?
// 第 1 种:在 Java 代码中添加 sql 通配符。
string wildcardname = “%smi%”;
list<name> names = mapper.selectlike(wildcardname);

<select id=”selectlike”>
	select * from foo where bar like #{value}
</select>


// 在 sql 语句中拼接通配符,会引起 sql 注入
String wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);

<select id=”selectlike”>
	select * from foo where bar like "%"#{value}"%"
</select>
  1. 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?
    • Dao接口即Mapper接口。
    • Mapper 接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻找策略。
  2. 如何获取自动生成的(主)键值?
    • 在添加语句后面跟加上
    • keyColumn="id" 返回增长的列
    • usegeneratedkeys:开启自增
    • keyproperty:需要自增的列
      • usegeneratedkeys=”true” keyproperty=”id”
  3. 在 mapper 中如何传递多个参数?

  4. Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql?
    • Mybatis 动态SQL可以在xml映射文件内,以标签的形式运行。
    • 执行原理:根据表达式的值,完成逻辑、判断 动态的拼接SQL。
    • Mybatis 提供 了 9 种动 态 sql 标签 :trim | where | set | foreach | if | choose| when | otherwise | bind。
  5. Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
    • 不同的 Xml 映射文件,如果配置了 namespace,那么 id 可以重复;如果没有配置 namespace,那么 id 不能重复;
  6. Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
    • Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载
  7. 什么是 MyBatis 的接口绑定?有哪些实现方式?
    • 接口绑定就是把接口和SQL语句绑定到一起。
    • 接口使用@Parma注解标注参数,xml中的namespace对应接口的全路径。
  8. 使用 MyBatis 的 mapper 接口调用时有哪些要求?

  9. 简述 Mybatis 的插件运行原理,以及如何编写一个插件。
  10. MyBatis @Select、@Update注解使用

    https://www.cnblogs.com/Twittery/p/14577306.html

posted on 2021-04-28 10:42  (Play)  阅读(67)  评论(0编辑  收藏  举报