Spring Boot深度课程系列
峰哥说技术—2020庚子年重磅推出、战胜病毒、我们在行动
19 峰哥说技术:Spring Boot整合MyBatis
MyBatis 框架是一个持久层框架,是 Apache 下的顶级项目。Mybatis 可以让开发者的主要精力放在 sql 上,通过 Mybatis 提供的映射方式,自由灵活的生成满足需要的 sql 语句。使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs 映射成数据库中的记录,在国内使用非常广泛。这里主要通过两种方式来对 Spring Boot 集成 MyBatis给大家进行讲解。
一般在Spring+SpringMVC中整合MyBatis步骤还是有点复杂的,要配置多个Bean,Spring Boot中对此做了进一步的简化,使MyBatis基本上可以做到开箱即用。特别说明,关于MyBatis的连表查询问题,不是Spring Boot需要解决的问题,有需要可以查看我之前的关于MyBatis的系列文章。
案例:通过MySql数据库系统管理数据,对bookdb01数据库中的Book表通过MyBatis进行增、删、改、查的操作。
步骤:
1)创建数据库和表,脚本如下。
bookdb01数据库
CREATE DATABASE IF NOT EXISTS*/`bookdb01` DEFAULT CHARACTER SET utf8 */; USE `bookdb01`; /*Table structure for table `book` */ DROP TABLE IF EXISTS `book`; CREATE TABLE `book` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) DEFAULT NULL, `author` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; /*Data for the table `book` */ insert into `book`(`id`,`name`,`author`) values (1,'三国演义','罗贯中'),(2,'红楼梦','曹雪芹'); |
bookdb02
CREATE DATABASE IF NOT EXISTS*/`bookdb01` DEFAULT CHARACTER SET utf8 */; USE `bookdb01`; /*Table structure for table `book` */ DROP TABLE IF EXISTS `book`; CREATE TABLE `book` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) DEFAULT NULL, `author` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; /*Data for the table `book` */ insert into `book`(`id`,`name`,`author`) values (1,'三国演义','罗贯中'),(2,'红楼梦','曹雪芹'); |
这里创建了2个数据库,这是为后面的多数据源做准备工作。这里我们使用bookdb01数据库,特此说明。
2)创建Spring Boot工程chapter05-mybatis,过程省略。
3)添加web、mysql、mybatis、durid依赖。
<!--web依赖--> |
4)在application.properties中进行相关的配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource |
说明:注意红色字体部分。当把mapper.xml文件配置在src/main/java/mapper的时候,必须在pom.xml中添加资源的打包方式。否则映射配置文件无法打包,会出现错误。该如何解决呢?其实很简单,我们只要在pom.xml中添加一下资源的打包位置即可。
<build> |
5)创建entity包,创建实体类Book。
public class Book { //getter和setter省略... } |
6)创建mapper包,创建接口BookMapper。
@Mapper public interface BookMapper { |
我们必须在接口上面添加@Mapper注解。但是这有个问题,如果每个接口上面都写太麻烦。还有一种解决方式就是在启动类添加注解。@MapperScan(basePackages=“mapper所在的包”)。大家可以把BookMapper接口上的@Mapper注解注释,测试一下。
7)创建service包,创建服务类BookService
@Service |
8)创建controller包,创建BookController.
@RestController |
9)测试:
在postman中选择get提交,输入http://localhost:8080/book/,测试查看全部图书信息。
在postman中选择提交方式post,同时选择body和json,并输入参数。url输入http://localhost:8080/book/,添加图书信息。