Springboot 整合 Mybatis 的完整 Web 案例 | 泥瓦匠BYSocket

2023-05-10 15:32 更新
摘要: 原創(chuàng)出處:www.bysocket.com 泥瓦匠BYSocket 希望轉(zhuǎn)載,保留摘要,謝謝!
推薦一本書(shū)《騰訊傳》。
Spring Boot 系列文章:《Spring Boot 那些事
新年第一篇 Springboot 技術(shù)文誕生。泥瓦匠準(zhǔn)備寫寫 Springboot 相關(guān)最佳實(shí)踐。一方面總結(jié)下一些 Springboot 相關(guān),一方面和大家交流交流 Springboot 框架。
現(xiàn)在業(yè)界互聯(lián)網(wǎng)流行的數(shù)據(jù)操作層框架 Mybatis,下面詳解下 Springboot 如何整合 Mybatis ,這邊沒(méi)有使用 Mybatis Annotation 這種,是使用 xml 配置 SQL。因?yàn)槲矣X(jué)得 SQL 和業(yè)務(wù)代碼應(yīng)該隔離,方便和 DBA 校對(duì) SQL。二者 XML 對(duì)較長(zhǎng)的 SQL 比較清晰。

一、運(yùn)行 springboot-mybatis 工程

git clone 下載工程 springboot-learning-example ,項(xiàng)目地址見(jiàn) GitHub。下面開(kāi)始運(yùn)行工程步驟(Quick Start):
1.數(shù)據(jù)庫(kù)準(zhǔn)備

a.創(chuàng)建數(shù)據(jù)庫(kù) springbootdb:

CREATE DATABASE springbootdb;

b.創(chuàng)建表 city :(因?yàn)槲蚁矚g徒步)

DROP TABLE IF EXISTS  `city`;
CREATE TABLE `city` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT'城市編號(hào)',
  `province_id` int(10) unsigned  NOT NULL COMMENT'省份編號(hào)',
  `city_name` varchar(25) DEFAULT NULL COMMENT'城市名稱',
  `description` varchar(25) DEFAULT NULL COMMENT'描述',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

c.插入數(shù)據(jù)

INSERT city VALUES (1 ,1,'溫嶺市','BYSocket 的家在溫嶺。');
2. 項(xiàng)目結(jié)構(gòu)介紹
項(xiàng)目結(jié)構(gòu)如下圖所示:
org.spring.springboot.controller – Controller 層
org.spring.springboot.dao – 數(shù)據(jù)操作層 DAO
org.spring.springboot.domain – 實(shí)體類
org.spring.springboot.service – 業(yè)務(wù)邏輯層
Application – 應(yīng)用啟動(dòng)類
application.properties – 應(yīng)用配置文件,應(yīng)用啟動(dòng)會(huì)自動(dòng)讀取配置
3.改數(shù)據(jù)庫(kù)配置
打開(kāi) application.properties 文件, 修改相應(yīng)的數(shù)據(jù)源配置,比如數(shù)據(jù)源地址、賬號(hào)、密碼等。(如果不是用 MySQL,自行添加連接驅(qū)動(dòng) pom,然后修改驅(qū)動(dòng)名配置。)
4.編譯工程

在項(xiàng)目根目錄 springboot-learning-example,運(yùn)行 maven 指令:

mvn cleaninstall
5.運(yùn)行工程

右鍵運(yùn)行 Application 應(yīng)用啟動(dòng)類的 main 函數(shù),然后在瀏覽器訪問(wèn):

http://localhost:8080/api/city?cityName=溫嶺市

可以看到返回的 JSON 結(jié)果:

{
   "id": 1,
   "provinceId": 1,
   "cityName":"溫嶺市",
   "description":"我的家在溫嶺。"
}
如圖:

二、springboot-mybatis 工程配置詳解

1.pom 添加 Mybatis 依賴

<!-- Spring Boot Mybatis 依賴 -->
<dependency>
   <groupId>org.mybatis.spring.boot</groupId>
   <artifactId>mybatis-spring-boot-starter</artifactId>
   <version>${mybatis-spring-boot}</version>
</dependency>
mybatis-spring-boot-starter 工程依賴如圖:

整個(gè)工程的 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>springboot</groupId>
    <artifactId>springboot-mybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-mybatis :: 整合 Mybatis Demo</name>
    <!-- Spring Boot 啟動(dòng)父依賴 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.1.RELEASE</version>
    </parent>
    <properties>
        <mybatis-spring-boot>1.2.0</mybatis-spring-boot>
        <mysql-connector>5.1.39</mysql-connector>
    </properties>
    <dependencies>
        <!-- Spring Boot Web 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Spring Boot Test 依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot Mybatis 依賴 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${mybatis-spring-boot}</version>
        </dependency>
        <!-- MySQL 連接驅(qū)動(dòng)依賴 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector}</version>
        </dependency>
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>

2.在 application.properties 應(yīng)用配置文件,增加 Mybatis 相關(guān)配置

## Mybatis 配置
mybatis.typeAliasesPackage=org.spring.springboot.domain
mybatis.mapperLocations=classpath:mapper/*.xml
mybatis.typeAliasesPackage 配置為 org.spring.springboot.domain,指向?qū)嶓w類包路徑。mybatis.mapperLocations 配置為 classpath 路徑下 mapper 包下,* 代表會(huì)掃描所有 xml 文件。
mybatis 其他配置相關(guān)詳解如下:
mybatis.config = mybatis 配置文件名稱
mybatis.mapperLocations = mapper xml 文件地址
mybatis.typeAliasesPackage = 實(shí)體類包路徑
mybatis.typeHandlersPackage = type handlers 處理器包路徑
mybatis.check-config-location = 檢查 mybatis 配置是否存在,一般命名為 mybatis-config.xml
mybatis.executorType = 執(zhí)行模式。默認(rèn)是 SIMPLE
3.在 Application 應(yīng)用啟動(dòng)類添加注解 MapperScan

Application.java 代碼如下:

/**
 * Spring Boot 應(yīng)用啟動(dòng)類
 *
 * Created by bysocket on 16/4/26.
 */
// Spring Boot 應(yīng)用的標(biāo)識(shí)
@SpringBootApplication
// mapper 接口類掃描包配置
@MapperScan("org.spring.springboot.dao")
public class Application {
   public static void main(String[] args) {
       // 程序啟動(dòng)入口
       // 啟動(dòng)嵌入式的 Tomcat 并初始化 Spring 環(huán)境及其各 Spring 組件
       SpringApplication.run(Application.class,args);
   }
}
mapper 接口類掃描包配置注解 MapperScan :用這個(gè)注解可以注冊(cè) Mybatis mapper 接口類。
4.添加相應(yīng)的 City domain類、CityDao mapper接口類

City.java:

/**
 * 城市實(shí)體類
 *
 * Created by bysocket on 07/02/2017.
 */
public class City {
    /**
     * 城市編號(hào)
     */
    private Longid;
    /**
     * 省份編號(hào)
     */
    private Long provinceId;
    /**
     * 城市名稱
     */
    private String cityName;
    /**
     * 描述
     */
    private String description;
    public Long getId() {
        return id;
    }
    public void setId(Longid) {
        this.id =id;
    }
    public Long getProvinceId() {
        return provinceId;
    }
    public void setProvinceId(Long provinceId) {
        this.provinceId = provinceId;
    }
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
}

CityDao.java:

/**
 * 城市 DAO 接口類
 *
 * Created by bysocket on 07/02/2017.
 */
public interface CityDao {
    /**
     * 根據(jù)城市名稱,查詢城市信息
     *
     * @param cityName 城市名
     */
    City findByName(@Param("cityName") String cityName);
}
其他不明白的,可以 git clone 下載工程 springboot-learning-example ,工程代碼注解很詳細(xì)。 https://github.com/JeffLi1993/springboot-learning-example

三、其他

利用 Mybatis-generator自動(dòng)生成代碼 http://www.cnblogs.com/yjmyzz/p/4210554.html
Mybatis 通用 Mapper3 https://github.com/abel533/Mapper
Mybatis 分頁(yè)插件 PageHelper https://github.com/pagehelper/Mybatis-PageHelper
最后,推薦閱讀:《 Spring Boot 之 HelloWorld 詳解
歡迎掃一掃我的公眾號(hào)關(guān)注 — 及時(shí)得到博客訂閱哦!
— http://www.bysocket.com/ —
— https://github.com/JeffLi1993 —



以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)