Mybatis小结

  • mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql语句本身, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程
  • 传统JdBc存在问题
    • 1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
    • 2、Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。
    • 3、使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能 多也可能少,修改 sql 还要修改代码,系统不易维护。
    • 4、对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记 录封装成 pojo 对象解析比较方便。

Mybatis快速入门

基于xml配置

  • ​ 编写dao,实体类
  • 编写sqlmappercpnfig.xml
  • 编写映射文档,IuserDao.xml
  • 编写测试类

基于注解配置

  • 在持久层添加注解

  • 修改配置文档

  • 自定义框架

Mybatis结果输出封装

  • ​ ResultType
  • 当实体类属性名称和查询语句的列名不一致时,引入resultmap

Mybatis的事务提交

  • 增删改需要手动提交事务
  • 设置自动提交事务

Mybatis 的动态 SQL 语句

if标签

where标签

为了简化上面 where 1=1 的条件拼装,我们可以采用标签来简化开发

foreach标签

mybatis延迟加载

何为延迟加载?

  • ​ 要用数据时再加载,不用不加载,简称懒加载
  • 好处
    • :先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速 度要快。
  • 坏处
    • 因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗 时间,所以可能造成用户等待时间变长,造成用户体验下降。

实现需求

association标签

  • 在主配置文档开启懒加载的支持

collection标签

mybatis缓存

一级缓存

  • 范围:sqlsession范围
  • 生命周期:,只要 SqlSession 没有 flush 或 close,它就存在。
  • 可能失去的情况:调用 SqlSession 的修改,添加,删除,commit(),close()等
  • 默认开启一级缓存

二级缓存

  • 范围:mapper映射范围
  • 生命周期:sqlsession没有改动他,便存在
  • 死亡情况:不同的sqlsession修改了
  • 开启二级缓存方式
  • 在主配置文档开启二级缓存
  • :配置相关的 Mapper 映射文档
  • :配置 statement 上面的 useCache 属性

Mybatis注解开发

常用注解

复杂关系映射的注解说明

mybatis注解二级缓存的开启