MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok

文章目录

  • MyBatis:Day 02
  • 一、生命周期和作用域
  • 二、结果集映射:ResultMap
  • 三、日志工厂
    • 1. 标准日志:STDOUT_LOGGING
    • 2. LOG4J
  • 四、分页
  • 五、使用注解开发
  • 六、Lombok
  • 注意:

MyBatis:Day 02

一、生命周期和作用域

理解不同作用域生命周期类别是至关重要的,因为错误的使用会导致非常严重的并发问题

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第1张图片

SqlSessionFactoryBuilder

  1. 一旦创建了 SqlSessionFactory,就不再需要它了;
  2. 最佳作用域是方法作用域(也就是局部方法变量)。

SqlSessionFactory :相当于数据库连接池

  1. 一旦被创建就应该在应用的运行期间一直存在,没有任何理由丢弃它或重新创建另一个实例最佳实践是在应用运行期间不要重复创建多次;
  2. 最佳作用域是应用作用域;
  3. 最简单的就是使用单例模式或者静态单例模式。

SqlSession :相当于连接到连接池的一个请求

  1. 每个线程都应该有它自己的 SqlSession 实例;
  2. SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域;
  3. 用完之后需要赶紧关闭,否则资源被占用。

二、结果集映射:ResultMap

属性名和字段名不一致时,会出现读取数据为 null 的情形。

两种解决方法

  • 在写 sql 语句时,将查询到的字段起别名,与属性名一致;
  • 使用结果集映射 resultMap 标签。

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第2张图片

注意点

  1. 第二种方式,记得要把标签 resultType 改为 resultMapresultMap 标签的名字可以随便起,但要对应;
  2. 第二种方式,resultMap 标签中的 type返回值类型property实体类中的属性column数据库中的字段
  3. 第二种方式,只需要映射属性名和字段名不一致的即可;
  4. resultMap 元素是 MyBatis 中最重要最强大的元素。ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。

三、日志工厂

如果一个数据库操作出现了异常,此时可以用日志来帮助我们排错。

可以在 MyBatis 核心配置文件中,指定 MyBatis 所用日志的具体实现。

常用的日志有:STDOUT_LOGGING、LOG4J(3.5.9 起废弃)。

1. 标准日志:STDOUT_LOGGING

在 MyBatis 核心配置文件中进行配置

<settings>
    <setting name="logImpl" value="STDOUT_LOGGING"/>
settings>

注意:注意字母大小写,不能多空格,严格按照参考文档规范

日志输出

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第3张图片

注意:由日志可以看到,MyBatis 会自动开启事务,但增删改操作需要手动提交事务。

2. LOG4J

由于漏洞影响,IntelliJ 平台彻底停止使用 LOG4J,建议切换到 java.util.logging 作为标准日志框架。


四、分页

MyBatis 实现分页,使用的是 limit 分页,核心还是在写 sql。

举例:查询名字带有“张”的人,并进行分页。

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第4张图片

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第5张图片

除了自己进行分页,还可以使用 MyBatis 分页插件 PageHelper,点此进入。

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第6张图片


五、使用注解开发

  1. 注解本质上是一个接口,该接口默认继承了 java.lang.annotation.Annotation 接口。

  2. 面向接口编程的原因解耦,达到定义(规范、约束)与实现的分离。

  3. MyBatis 除了用 Mapper.xml 映射器类映射,还有另一种方法可以完成语句映射:使用 Java 注解来配置

  4. 使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。

  5. 选择何种方式来配置映射,永远不要拘泥于一种方式,可以很轻松地在基于注解和 XML 的语句映射方式间自由移植和切换。

  6. 注解开发的本质是:反射机制实现;底层:使用了动态代理。

步骤

  • 在接口的方法上添加注解,编写 sql 语句;
  • 在核心配置文件中绑定接口;
  • 测试。

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第7张图片

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第8张图片

注意

  1. 有了注解,就不需要 Mapper.xml 配置文件了,并且需要在 MyBatis 核心配置文件中绑定接口
  2. 写注解中的 sql 语句时,注意参数的对应关系
    • 参数有 @Param("x") 注解的,#{x} 从 Param 注解中找对应名字拿参;
    • 参数是实体类,#{属性名} 从实体类中依据属性名拿参;
    • 参数是 Map 集合,#{键} 从集合中依据键名拿参。
  3. 关于 @Param("") 注解:
    • 基本数据类型String 类型的参数,需要在参数前加上该注解;
    • 引用类型不需要加;
    • 如果只有一个基本数据类型,可以不用加,但是最好加上。

六、Lombok

  1. Lombok 项目是一个 Java 库,它可以自动插入到编辑器和构建工具中,增强 Java 的性能;

  2. 不需要再写 getter、setter 或 equals 方法,只要有一个注解,你的类就有一个功能齐全的构建器、自动记录变量等等。

使用步骤

  • 在 IDEA 中安装 Lombok 插件

    注意:打开 IDEA 设置,找到 Plugins 上面搜索 Lombok,如果搜得到就可以直接下载。如果搜索不到,进入官网下载安装包,并导入,Lombok 官网点此进入。从 IntelliJ 2020.3 版开始,Lombok 插件将默认集成并包含在 IntelliJ 中。

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第9张图片

  • 在项目中导入 Lombok 的 jar 包(Maven 项目导入依赖)

<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <version>1.18.24version>
dependency>
  • 使用 Lombok:在实体类中加注解

    常用的注解(下图圈出来的):

    • @Data:除了有参构造器,其他都会自动生成;
    • @AllArgsConstructor:生成有参构造器,注意此时无参构造器会消失;
    • @NoArgsConstructor:生成无参构造器。

    MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第10张图片

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok_第11张图片


注意:

  1. MyBatis 分页插件 PageHelper:https://pagehelper.github.io/
  2. Lombok 官网下载:https://plugins.jetbrains.com/plugin/6317-lombok/versions

你可能感兴趣的:(#,MyBatis,mybatis,ResultMap,日志,注解,lombok)