• 峰哥说技术: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/,添加图书信息。

     

  • 相关阅读:
    基于RBAC模型的权限设计:如何设计系统权限体系?
    移动应用开发中AppID、AppKey、AppSecret
    PHP使用Redis的Pub/Sub(发布订阅)命令
    Vue教程:windows下安装npm和cnpm
    Golang panic用法
    Golang 并发Groutine实例解读(二)
    js时间戳与日期格式的相互转换
    总结微信公众平台网页开发中遇到的ios的兼容问题
    总结安装webpack过程中遇到的错误及解决方案
    微信web页面返回刷新
  • 原文地址:https://www.cnblogs.com/027kgc/p/12502304.html
Copyright © 2020-2023  润新知