1、创建数据库、表

CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE `book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `author` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

2、新建SpringBoot项目

  • 使用Spring Initializer:

图片说明

  • 填写项目相关信息:

图片说明

  • 添加部分依赖:

图片说明

  • 项目保存路径等信息:

图片说明

  • 项目结构:

图片说明

  • 自动导入依赖:

图片说明

  • 手动添加druid数据源(pom.xml):

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.21</version>
    </dependency>

    3、MyBatis基础配置

  • 数据库连接信息(application.yaml):

    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
        username: root
        password: root
  • MyBatis基本配置:

    • 开启实体类与数据库名字按驼峰式相互匹配。
    • 配置Mapper.xml文件所在的目录。
      mybatis:
      configuration:
        map-underscore-to-camel-case: true
      mapper-locations: classpath:/mapper/*.xml
  • 在启动类中,配置MapperScan,扫描该包下的所有接口作为DAO:

    package com.xianhuii;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @MapperScan("com.xianhuii.mapper")
    @SpringBootApplication
    public class SpringbootMybatisApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringbootMybatisApplication.class, args);
        }
    }

    4、实体类

      package com.xianhuii.entity;
    
      import lombok.AllArgsConstructor;
      import lombok.Data;
      import lombok.NoArgsConstructor;
    
      @Data
      @AllArgsConstructor
      @NoArgsConstructor
      public class Book {
          private Integer id;
          private String name;
          private String author;
      }

    5、DAO

  • Mapper接口:

    package com.xianhuii.mapper;
    
    import com.xianhuii.entity.Book;
    
    import java.util.List;
    
    public interface BookMapper {
        Integer addBook(Book book);
    
        Integer deleteBookById(Integer id);
    
        Integer updateBookById(Book book);
    
        Book getBookById(Integer id);
    
        List<Book> getAllBooks();
    }
  • Mapper配置文件:

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.xianhuii.mapper.BookMapper">
    
        <!--Integer addBook(Book book)-->
        <insert id="addBook" parameterType="com.xianhuii.entity.Book">
            insert into book (name, author) values (#{name}, #{author})
        </insert>
    
        <!--Integer deleteBookById(Integer id)-->
        <delete id="deleteBookById" parameterType="int">
            delete from book where id = #{id}
        </delete>
    
        <!--Integer updateBookById(Book book)-->
        <update id="updateBookById" parameterType="com.xianhuii.entity.Book">
            update book set name = #{name}, author = #{author} where id = #{id}
        </update>
    
        <!--Book getBookById(Integer id)-->
        <select id="getBookById" parameterType="int" resultType="com.xianhuii.entity.Book">
            select * from book where id = #{id}
        </select>
    
        <!--List<Book> getAllBooks()-->
        <select id="getAllBooks" resultType="com.xianhuii.entity.Book">
            select * from book
        </select>
    </mapper>

    6、测试

      package com.xianhuii.mapper;
    
      import com.xianhuii.SpringbootMybatisApplication;
      import com.xianhuii.entity.Book;
      import org.junit.jupiter.api.Test;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.test.context.SpringBootTest;
    
      import javax.annotation.security.RunAs;
    
      import java.util.Iterator;
      import java.util.List;
    
      import static org.junit.jupiter.api.Assertions.*;
      // 不加这个注解会报:java.lang.NullPointerException
      @SpringBootTest(classes = SpringbootMybatisApplication.class)
      class BookMapperTest {
          @Autowired
          private BookMapper bookMapper;
    
          @Test
          void addBook() {
              Book book1 = new Book(null, "三国演义", "罗贯中");
              Book book2 = new Book(null, "水浒传", "施耐庵");
              Book book3 = new Book(null, "西游记", "吴承恩");
              Book book4 = new Book(null, "红楼梦", "曹雪芹");
              bookMapper.addBook(book1);
              bookMapper.addBook(book2);
              bookMapper.addBook(book3);
              bookMapper.addBook(book4);
          }
    
          @Test
          void deleteBookById() {
              System.out.println(bookMapper.deleteBookById(1));
          }
    
          @Test
          void updateBookById() {
              Book book = new Book(2, "水浒传2", "施耐庵2");
              System.out.println(bookMapper.updateBookById(book));
          }
    
          @Test
          void getBookById() {
              Book book = bookMapper.getBookById(1);
              System.out.println(book.getId() + "-" + book.getName() + "-" + book.getAuthor());
          }
    
          @Test
          void getAllBooks() {
              List<Book> books = bookMapper.getAllBooks();
              Iterator<Book> iterator = books.iterator();
              while (iterator.hasNext()) {
                  Book book = iterator.next();
                  System.out.println(book.getId() + "-" + book.getName() + "-" + book.getAuthor());
              }
          }
      }

    7、项目结构

图片说明