首頁 > 軟體

Spring Boot 整合持久層之MyBatis

2022-08-13 18:01:39

整合MyBatis

MyBatis 是一款優秀的持久層框架,原名 iBatis ,2010年遷移到 Goole Code 並改名為 MyBatis ,2013年遷移到 GitHub 上。MyBatis 支援客製化化 SQL 、儲存過程及高階對映。MyBatis 幾乎避免了所有的 JDBC 程式碼手動設定引數以及獲取結果集。在傳統的 SSM 框架整合中,使用 MyBatis 需要大量的 XML 設定,而在 Spring Boot 中,MyBatis 提供了一套自動化設定方案,可以做到 MyBatis 開箱即用。

1. 建立專案

建立 Spring Boot 專案,新增 MyBatis 依賴、資料庫驅動依賴以及資料庫連線池依賴,如下:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <!--       排除預設的jackson-databind         -->
    <exclusion>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<!--    引入fastjson依賴    -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.78</version>
</dependency>
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>1.3.2</version>
</dependency>
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.1.9</version>
</dependency>
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <scope>runtime</scope>
</dependency>

2. 創表實體類等

CREATE TABLE `book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL,
  `author` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

實體類 Book

public class Book {
    private Integer id;
    private String name;
    private String author;
    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", author='" + author + ''' +
                '}';
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
}

資料庫連線設定 application.properties

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/weirdo?useUnicode=true&characterEncoding=utf8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root

3. 建立資料庫存取層

建立 BookMapper

傳送門

@Mapper
public interface BookMapper {
    int addBook(Book book);
    int deleteBookById(Integer id);
    int updateBookById(Book book);
    Book getBookById(Integer id);
    List<Book> getAllBooks();
}

程式碼解釋:

  • 在專案的根包下面建立一個子包 Mapper ,在 Mapper 中建立 BookMapper
  • 有兩種方式指明該類是一個 Mapper:第一種如前面的程式碼所示,在 BookMapper 上新增 @Mapper 註解,表名該介面是一個 MyBatis 中的 Mapper ,這種方式需要在每一個 Mapper 上都新增註解;還有一種簡單的方式是在設定類上新增@MapperScan(“com.sang.mapper”) 註解,表示掃描 com.sang.mapper 包下的所有介面作為 Mapper ,這樣就不需要在每個介面上設定 @Mapper 註解了

4. 建立 BookMapper.xml

<?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.sang.mapper.BookMapper">
    <insert id="addBook" parameterType="com.sang.model.Book">
    INSERT INTO book(name,author) VALUES (#{name},#{author})
    </insert>
    <delete id="deleteBookById" parameterType="int">
        DELETE FROM book WHERE id=#{id}
    </delete>
    <update id="updateBookById" parameterType="com.sang.model.Book">
        UPDATE book set name=#{name},author=#{author} WHERE id=#{id}
    </update>
    <select id="getBookById" parameterType="int" resultType="com.sang.model.Book">
        SELECT * FROM book WHERE id=#{id}
    </select>
    <select id="getAllBooks" resultType="com.sang.model.Book">
        SELECT * FROM book
    </select>
</mapper>

程式碼解釋:

  • 針對 BookMapper 介面中的每一個方法都在 BookMapper.xml 中列出了實現
  • #{} 用來代替介面中的引數,實體類中的屬性可以直接通過 #{實體類屬性名} 獲取

5. 建立Service和BookController

@Service
public class BookService {
    @Autowired
    BookMapper bookMapper;
    public int addBook(Book book) {
        return bookMapper.addBook(book);
    }
    public int updateBook(Book book) {
        return bookMapper.updateBookById(book);
    }
    public int deleteBookById(Integer id) {
        return bookMapper.deleteBookById(id);
    }
    public Book getBookById(Integer id) {
        return bookMapper.getBookById(id);
    }
    public List<Book> getAllBooks() {
        return bookMapper.getAllBooks();
    }
}
@RestController
public class BookController {
    @Autowired
    BookService bookService;
    @GetMapping("/bookOps")
    public void bookOps() {
        Book b1 = new Book();
        b1.setName("西廂記");
        b1.setAuthor("王實甫");
        int i = bookService.addBook(b1);
        System.out.println("addBook>>>" + i);
        Book b2 = new Book();
        b2.setId(1);
        b2.setName("朝花夕拾");
        b2.setAuthor("魯迅");
        int updateBook = bookService.updateBook(b2);
        System.out.println("updateBook>>>"+ JSON.toJSONString(updateBook));
        Book b3 = bookService.getBookById(1);
        System.out.println("getBookById>>>"+JSON.toJSONString(b3));
        int delete = bookService.deleteBookById(2);
        System.out.println("deleteBookById>>>"+ JSON.toJSONString(delete));
        List<Book> allBooks = bookService.getAllBooks();
        System.out.println("getAllBooks>>>"+JSON.toJSONString(allBooks));
    }
}

6. 設定 pom.xml 檔案

在 Maven 工程中,XML 組態檔建議寫在 resources 目錄下,但是上文的 Mapper.xml 檔案寫在包下,Maven 在執行時會忽略包下的 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>
</build>

在瀏覽器中資料 http://localhost:8081/bookOps 檢視紀錄檔:

addBook>>>1
updateBook>>>1
getBookById>>>{"author":"魯迅","id":1,"name":"朝花夕拾"}
deleteBookById>>>0
getAllBooks>>>[{"author":"魯迅","id":1,"name":"朝花夕拾"},{"author":"王實甫","id":3,"name":"西廂記"},{"author":"王實甫","id":4,"name":"西廂記"}]

到此這篇關於Spring Boot 整合持久層之MyBatis的文章就介紹到這了,更多相關Spring Boot MyBatis內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com