
今日份主题
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进行增、删、改、查的操作。
01.创建数据库和表,脚本如下
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数据库,特此说明。
02创建Spring Boot工程chapter05-mybatis
过程省略
03添加web、mysql、mybatis、durid依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
04在application.properties中进行相关的配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/bookdb01?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=1234
#当把mapper文件配置到resources文件夹的时候,需要指定mapper文件的位置
mybatis.mapper-locations=classpath:/mapper/*.xml
#实体类的别名,这些都可以省略
mybatis.type-aliases-package=com.java.chapter05.entity
说明:注意红色字体部分。当把mapper.xml文件配置在
src/main/java/mapper的时候,必须在pom.xml中添加资源的打包方式。否则映射配置文件无法打包,会出现错误。该如何解决呢?其实很简单,我们只要在pom.xml中添加一下资源的打包位置即可。
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
05创建entity包,创建实体类Book
public class Book {
private Integer id;
private String name;
private String author;
//getter和setter省略...
}
06创建mapper包,创建接口BookMapper
@Mapper
public interface BookMapper {
public List<Book> getBooks();
public int addBook(Book book);
}
我们必须在接口上面添加@Mapper注解。但是这有个问题,如果每个接口上面都写太麻烦。还有一种解决方式就是在启动类添加注解。@MapperScan(basePackages=“mapper所在的包”)。大家可以把BookMapper接口上的@Mapper注解注释,测试一下。
07创建service包,创建服务类BookService
@Service
@Transactional
public class BookService {
@Autowired
private BookMapper bookMapper;
public List<Book> getBooks(){
return bookMapper.getBooks();
}
public int addBook(Book book){
return bookMapper.addBook(book);
}
}
08创建controller包,创建BookController
@RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/")
public List<Book> getBooks(){
return bookService.getBooks();
}
@PostMapping("/")
public int addBook(@RequestBody Book book){
return bookService.addBook(book);
}
}
09测试
在postman中选择get提交,输入
http://localhost:8080/book/,测试查看全部图书信息。

在postman中选择提交方式post,同时选择body和json,并输入参数。url输入http://localhost:8080/book/,添加图书信息。
