詳解Spring Boot集成MyBatis的開發流程


  MyBatis是支持定制化SQL、存儲過程以及高級映射的優秀的持久層框架,避免了幾乎所有的JDBC代碼和手動設置參數以及獲取結果集。

  spring Boot是能支持快速創建Spring應用的Java框架。

  本文通過一個例子來學習Spring Boot如何集成MyBatis,而且過程中不需要XML配置。

1、創建數據庫

  本文的例子使用MySQL數據庫,首先創建一個用戶表,執行sql語句如下:

CREATE TABLE IF NOT EXISTS user ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NULL DEFAULT NULL , `age` INT(2) NOT NULL , PRIMARY KEY (id) )

2、工程目錄結構與依賴配置

  首先新建一個Maven工程,並配置Pom依賴,本例中所用到的依賴如下:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>1.4.2.RELEASE</version>
  <relativePath />
</parent>
 
<dependencies>
  <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>1.1.1</version>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.40</version>
  </dependency>
</dependencies>
 
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>

  然后創建一下工程目錄結構,如下圖所示:

3、代碼文件內容

(1)創建配置文件——application.properties

  寫入以下內容:連數據庫的

spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root spring.datasource.password=123456

(2)創建POJO——entity/User.java

  這是一個POJO,包含了id, name, age三個屬性,代碼如下:即domain實體類

package com.xyz.dbtest.entity; public class User { private int id; private String name; private int age; public int getId() {  return id; } public void setId(int id) { this.id = id; } public String getName() {  return name; } public void setName(String name) { this.name = name; } public int getAge() {  return age; } public void setAge(int age) {  this.age = age; } }

(3)創建一個數據層接口——service/UserDao.java

  這是一個Mapper類,代碼如下:即dao層

package com.xyz.dbtest.dao; import com.xyz.dbtest.entity.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import java.util.List; @Mapper //1
public interface UserDao { @Results({ //2
      @Result(property = "id", column = "id"), //2
      @Result(property = "name", column = "name"), @Result(property = "age", column = "age") }) @Select("SELECT * FROM user WHERE age = #{age}") //3
  List<User> get(int age); @Insert("INSERT INTO user(name, age) VALUES (#{name}, #{age})") //3
  void insert(User user); }

  //1 @Mapper將UserDao聲明為一個Mapper接口

  //2 @Results是結果映射列表,@Result中property是User類的屬性名,colomn是數據庫表的字段名

  //3 @Select、 @Insert 分別代表了執行的真實SQL

(4)創建一個用戶服務——service/UserService.java

  這是一個服務類Bean,提供三個函數功能,代碼如下:即service層

package com.xyz.dbtest.service; import com.xyz.dbtest.dao.UserDao; import com.xyz.dbtest.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service //聲明成一個spring bean
public class UserService { @Autowired //連接到UserDao Bean
  private UserDao userDao; public String show() { return "Hello World!"; } public List<User> showDao(int age) { return userDao.get(age); } public String insert(String name, int age) { //插入一條記錄
    User user = new User(); user.setName(name); user.setAge(age); userDao.insert(user); return "Insert ( \""+name+"\", age"+age+") OK!"; } }

(5)常見一個Web Controller——controller/UserController.java

  這是一個Spring Web的Controller類,引入了spring-boot-starter-web依賴,代碼如下:即action層

package com.xyz.dbtest.controller; import com.xyz.dbtest.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController //聲明為一個Restful的Controller
public class UserController { @Autowired //自動連接到UserService Bean
  private UserService userService; @RequestMapping(value = "/show") public String show() { return userService.show(); } @RequestMapping(value = "/showDao") public Object showDao(int age) { return userService.showDao(age); } @RequestMapping(value="/insert") public String insert(String name, int age) { return userService.insert(name, age); } }

(6)創建啟動類——main/StartApp.java

  這是一個spring boot啟動類。代碼如下:即main函數

package com.xyz.dbtest.main; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(scanBasePackages = "com.xyz.dbtest") //1
@MapperScan(basePackages = "com.xyz.dbtest.dao") //2
public class StartApp { public static void main(String[] args) { SpringApplication.run(StartApp.class, args); } }

  //1 由於StartApp類位於基礎包的自包中,因此需要設置scanBasePackage

  //2 設置Mapper接口所在的包

4、運行結果

  運行Sql語句創建數據庫表后,運行StartApp類。啟動成功如下圖所示

  測試show服務,結果如下:

 

  測試showDao服務,在輸入URL時需要將參數打包進url,結果如下:

  不帶參數時,訪問錯誤:

  帶參數時,訪問成功,由於數據庫中沒有記錄,所以結果是一個空列表:

  測試insert服務

  再次測試showDao服務

  通過本文的例子可以看出,使用Spring boot集成MyBatis幾乎不用任何配置工作,能有效加快開發效率!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM