峰哥说技术:19-Spring Boot整合MyBatis

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依赖-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis框架依赖-->
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>2.1.1</version>
</dependency>
<!--mysql数据库依赖-->
<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <scope>runtime</scope>
</dependency>
<!--阿里巴巴druid依赖-->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid</artifactId>
   <version>1.1.9</version>
</dependency>

4)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>

5)创建entity包,创建实体类Book。

public class Book {
    private Integer id;
    private String name;
    private String author;

    //getter和setter省略...

}

6)创建mapper包,创建接口BookMapper。

@Mapper

public interface BookMapper {
    public List<Book> getBooks();
    public int addBook(Book book);
}

我们必须在接口上面添加@Mapper注解。但是这有个问题,如果每个接口上面都写太麻烦。还有一种解决方式就是在启动类添加注解。@MapperScan(basePackages=“mapper所在的包”)。大家可以把BookMapper接口上的@Mapper注解注释,测试一下。

7)创建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);
    }
}

8)创建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);
    }
}

9)测试:

postman中选择get提交,输入http://localhost:8080/book/,测试查看全部图书信息。

 

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

 

原文地址:https://www.cnblogs.com/027kgc/p/12502304.html