前言
这一段时间在学习springboot,同时也就在尝试着将以前使用过的很多东西和springboot进行整合。这次主要尝试的是MyBatis的整合。本篇文章主要讲的是mybatis和springboot的很多最基本的配置和用法,适合对springboot和mybatis有些熟悉的小白学习(因为本身我也是一个新手)。如有一些没有注意到的地方,或者是有错误的地方,还请大佬及时指出。
什么是mybatis
MyBatis 是一个基于Java的持久层框架。2013年11月迁移到Github。
说白了就是一个管理dao层(或者叫做管理数据库操作)的框架。类比的框架还有hibernate。
mybatis框架的特点
优点
- 目前为止最为简单的持久层框架之一,小巧并且简单易学。
- mybatis本身专注于SQL语句本身。它将SQL语句写在xml文件之中,几乎是彻底将程序代码与SQL语句隔离开,耦合度相当低。因此在SQL语句的编写上它相当的灵活。可以随时根据业务的要求变更SQL语 句而不需要动源程序。
- 支持编写动态SQL语句。mybatis提供一些独特的标签,可以让程序员们很方便的进行动态SQL语句的编写。
缺点
- 也因为其的灵活性,因此SQL语句的编写量比较大。尤其是多表联查的时候。
- SQL语句因为依赖于数据库,因此mybatis项目的对于数据库的可移植性比较差。
mybatis的应用场景
Mybatis是一个足够灵活的框架。对于多变的且业务逻辑相当复杂的互联网项目来说,mybatis是一个相当不错的选择
mybatis与springboot的整合
ok,接下来的才是本篇的重点
基础配置
首先使用maven管理jar包,需要进入关键依赖
<!-->mybatis关键依赖<-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
同时本篇使用的是mysql 数据库作为框架测试,因此也需要引入mysql 的相关依赖
<!-->mysql关键依赖<-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
随后,我们需要在application.properties中加入数据源的参数,让springboot知道我们是如何初始化数据库的
#驱动名称
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#数据库链接地址
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=true
#登录用户名
spring.datasource.username=root
#登录密码
spring.datasource.password=root
这四条数据是必要的,完整的配置(比如最大连接数和最小连接数之类的属性)可以参考这个网址:
完整参数列表
关于sqlsession
springboot会自动加载spring.datasource.
*相关配置,数据源就会自动注入到sqlSessionFactory中,sqlSessionFactory会自动注入到Mapper中,对,你一切都不用管了,直接拿起来使用就行了。
先说一下什么是sqlSession,说白了,可以简单理解为就是一个把你对数据库的操作和事务管理绑定起来的一个东西。
如果你不将对数据库的操作放入sqlsession里,那么将不会参与事务,自然也就不存在事务管理这个说法。
使用方法
以上配置完之后,mybatis与springboot整合的基本配置就完成了。由于mybatis提供mapper和注解两种方式,并且这两种方式的用法差别相当大,因此下面分开进行讲解。
Mapper方法(适合涉及到多表联查之类的业务逻辑比较复杂的项目)
这种方法属于传统的老方法,需要通过mapper.xml来管理SQL语句。
项目结构
整体的项目结构如下:
额外配置
采用这种方法进行编写,我们要注意需要另外增加几个配置
需要在application.properties里面添加如下代码,以便springboot能扫描到静态文件中的以Mapper为结尾名的.xml文件。
#mapper扫描地址
mybatis.mapper-locations=classpath:/mapper/*Mapper.xml
在application启动类,我们需要另外添加一个注释,来声明mapper借口地址
*Mapper.xml与*Mapper类的区别
这里大家就发现了,为什么同一个mapper要在不同的地方声明两遍,这两个mapper又有什么不同?
我们来看这两个文件的区别。首先是测试工程的xml文件
(注:mapper文件intellij IDEA一开始在代码上会有非常恶心的黄绿重叠的警告符,去掉的方式参考下面这个博客:如何让世界变得干净 。去掉那些提示后你会觉得世界终于清净了)