Mybatis

1、什么是Mybatis?

  • mybatis是一款优秀的持久层(保存数据)框架
  • 它支持定制化SQL,存储过程以及高级映射
  • mybatis几乎避免了jdbc代码和手动设置参数以及获取结果集
  • mybatis使用简单的xml或注解来配置和映射原生类型、接口和实体类操作数据库

2、Mybatis的优缺点

优点

  1. 简单易学
  2. 灵活
  3. SQL和代码分离,提高了可维护性
  4. 提供映射标签,支持对象与数据库的orm字段关系映射
  5. 提供对象关系映射标签,支持对象关系组建维护
  6. 提供xml标签,支持动态SQL
  7. 能很好的与各种数据库进行兼容

缺点

  • SQL语句编写工作量大,对开发人员编写SQL语句有要求
  • SQL语句依赖于数据库,数据库移植性差,不能随意更换数据库

3、#{}和${}的区别是什么

#{}是预编译处理,会将sql替换成?,调用preparedStatement的set方法来赋值可以有效防止SQL注入

${}是字符串替换

4、当实体类中的属性名和表中字段不一样该怎么办?

  1. 在查询的SQL语句中定义字段名别名
  2. 通过映射字段名和实体类属性的一一对应关系

5、Mybatis是如何进行分页的?其原理?

  • Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页
  • 可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页
  • 分页插件的原理是使用mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,天剑对应的物理分页语句和物理分页参数

6、Mybatis中的标签

  • cache:给定命名空间的缓存配置
  • cache-ref:引用其他命名空间的缓存配置
  • resultMap:描述如何从数据库结果集中来加载对象
  • sql:定制sql片段
  • insert:映射插入语句
  • update:映射更新语句
  • delete:映射删除语句
  • select:映射查询语句
  • 动态sql,if,where,foreach,set等动态标签

 7、Mybatis的一、二级缓存和自定义缓存

  • 一级缓存:Mybatis默认开启了一级缓存,它基于PerpetualCache的HashMap本地缓存,一级缓存是在SQLSession层面进行缓存的,Session flush或者close之后,缓存就会失效。说到底这个缓存与SQLSession绑定了,各个SQLSession之间缓存相互独立,所以可能会出现脏读可能,因为缓存的数据没有被其他的SQLSession的SQL语句修改了,而缓存的数据被再次读取。
  • 二级缓存:是全局缓存,默认不开启,需要手动开启,它缓存在整个SQLSessionFactory层,可以给各个SQLSession对象共享,但是所有的查询sql会先访问一级缓存,一级缓存找不到访问二级缓存,再找不到才会去访问数据库。
  • 自定义缓存:只需要去新建一个类去实现cache接口或者用Mybatis支持的第三方缓存:encache和Redis

8、Mybatis实现一对一,一对多关联查询

通过关联查询实现,通过在resultMap里的association,collection节点配置进行一对一,一对多的类就可以完成。

9、Mybatis是否支持延时加载?原理?

Mybatis仅支持resultMap的association(一对一)关联对象,collection(一对多)集合对象的延迟加载。启动开关为LazyLoadingEnabled。原理是使用CGLIB创建目标对象的代理对象,当调用目标方法时进入拦截器,拦截器invoke方法发现对象的get方法为空值,就会单独发送事先保存好的查询数据set给该对象。

posted @ 2023-03-06 14:17  sjsibakk  阅读(54)  评论(0)    收藏  举报