最近在学习《码猿技术专栏》的文章,记录自己学习的过程,学习笔记,便于后续复习和实战。大家可以关注他的公众号,谈到的技术点都是工作当中常用的,比如SpringCould、SpringBoot、Mybatis系列文章。
前言
作为一个资深后端码农天天都要和数据库打交道,最早使用的是 Hiberate,一个 封装性极强的持久性框架。自从接触到 Mybatis 就被它的灵活性所折服了,可以自己写 SQL,虽然轻量级,但是麻雀虽小,五脏俱全。这篇文章就来讲讲什么是 Mybatis,如何简单的使用 Mybatis。
什么是 Mybatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。 MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO (Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
环境搭建
本篇文章使用的环境是SpringBoot+Mybatis+Mysql
Maven 依赖
- MySQL 驱动依赖和 Druid 连接池的依赖
- Mybatis 启动包依赖,此处导入的是 SpringBoot 和 Mybatis 整合启动器的依赖, 点击去可以看到,这个启动包依赖了mybatis和mybatis-spring(Mybatis 和 Spring 整合的 Jar 包),因此使用 SpringBoot 之后只需要导入这个启动器的依赖 即可。
以上两个依赖添加成功后,Maven 环境就已经配置完了。
- 数据库连接池配置(Druid)
-
基础概念 dao层: 用于存放和数据库交互的文件,Mybatis 的interface都放在此层
-
service层:用于存放业务逻辑的文件。 配置 xml 文件存放的位置 Mybatis 中xml的文件默认是要和interface放在一个包下的,并且文件的名称要 一样。 在和 SpringBoot 整合后有两种配置方式,下面详细介绍。
-
application.properties 中设置
既然是和 SpringBoot 整合,那么万变不离xxxAutoConfiguration这个配置类 了,Mybatis 的配置类就是MybatisAutoConfiguration,如下:
可以看到@EnableConfigurationProperties(MybatisProperties.class)这行 代码,就是将 properties 中的属性映射到 MybatisProperties 这个成员属性中,因此设置的方式就要看其中的属性。
配置类中设置
配置扫描 Mybatis 的 interface 在和 SpringBoot整合后,扫描 Mybatis 的接口,生成代理对象是一件很简单的 事,只需要一个注解即可。
@Mapper 该注解标注在 Mybatis 的interface类上,SpringBoot启动之后会扫描后会自动生成代理对象。实例如下:
-
缺点:每个interface都要标注一个,很鸡肋,一个项目中的 interface 少说也有上百个吧。
-
@MapperScan @Mapper注解的升级版,标注在配置类上,用于一键扫描 Mybatis 的interface。
使用也是很简单的,直接指定接口所在的包即可,如下:
@MapperScan和@Mapper这两个注解千万不要重复使用。
优点:一键扫描,不用每个 interface 配置。
基本的crud
#{}和${} 的区别
上面的例子中我们可以看到使用的都是#{}, 关于#{}和{}的区别也是在很多初 级工程师的面试最常被问到的,现在只需要记住区别就是#{}使用了JDBC 的预编 译,可以防止 SQL 注入,提高了安全性,{}并没有预编译,安全性不够。在后面 Mybatis 的源码讲解中将会涉及到为什么一个用了预编译,一个没用。
开启驼峰映射
DBA 在设计数据库的时候,往往使用的是下划线(_)的方式,比如user_id。但是 Java 是不规范的,我们通常将它转换为userId,这就是驼峰命名方法。 但是在使用 Mybatis 查询的时候,比如:
select user_id from user_info
上面的user_id和User中的userId根本不对应,也就映射不进去,此时查询的结 果就是 userId 是 null,当然我们可以使用别名的方式,SQL 可以改写为select user_id as userId from user_info 另外一种方式是不用别名,直接开启 Mybatis 的驼峰映射规则,会自动映射,开 启的方式很简单,就是在application.properties文件配置一下,如下:
mybatis.configuration.map-underscore-to-camel-case=true
本文主要讲了 Mybatis 与 SpringBoot 的整合过程,基本的 crud,各种标签的属性 等内容,属于一个入门级别的教程,后续的内容会逐渐深入。