SpringBoot+Mybatis+Druid的集成

使用SpringBoot能夠快速的搭建web項目,減小配置文件的編寫,如今也愈來愈多的互聯網團隊採用SpringBoot來搭建微服務。css

下面主要是記錄使用SpringBoot+Mybatis+Druid集成流程,若是搭建過Spring MVC 的項目,其實很容就會使用SpringBoot,畢竟SpringBoot是在Spring 4.x系列上發展起來的。html

1、項目結構

SpringBoot的項目結構和之前的Spring MVC的web項目結構是有一些細微差比的。SpringBoot項目中咱們須要在basePackage下加一個項目入口類,SpringBoot項目再也不須要webapp,前端靜態資源放在resources目錄下的static目錄中,Resources目錄下須要編寫一個application.yml文件,其實做用和spring的application.xml是相似的,重要代碼和配置文件內容將在後面整合流程中體現。前端

項目結構圖:java

resources下的mapping存放的是mybatis的mapper配置文件mysql

2、整合流程

2.1項目的maven依賴配置

下面是整個一個SpringBoot項目的pom重要片斷,SpringBoot的版本能夠根據需求升級,pom文件中將SpringBoot默認的日誌和內嵌tomcat都排除掉了,這個可根據我的的愛好來決定是否使用默認的logback日誌實現以及是否使用tomcat來做爲內嵌容器。本例pom配置中是將log4j2做爲項目的日誌實現方案,容器採用undertow 。從pom文件能夠看出比之前直接用spring+spring mvc搭建時少了不少。git

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>


     <dependencies>

        <!-- mybatis spring -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.2.0</version>
        </dependency>

        <!-- 引入mybatis 分頁 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.0.0-rc</version>
        </dependency>
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>0.9.5</version>
        </dependency>
        <!-- ali druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.27</version>
        </dependency>
        <!-- mysql driver-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.5</version>
        </dependency>


        <!-- spring boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
        <!--用於controller單元測試-->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
         <!--log4j2 Asynchronous Loggers requires disruptor-->
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.3.6</version>
        </dependency>
    </dependencies>

     <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <dependencies>
                    <!--springboot熱部署-->
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.2.8.RELEASE</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
        <finalName>SpringBootTest</finalName>
    </build>

在idea中熱部署須要啓動自動編譯-快捷鍵Ctrl + Alt + S打開設置面板,勾選Build project automatically選項。github

2.2 項目配置文件

application.yml(ps:也可使用application.properties來編寫)是SpringBoot上下文啓動的主配置文件,須要注意的是在編寫yml配置文件的時候,每一個屬性配置的冒號後面必定要空一個字符,若是靠在一塊兒將會出現配置文件錯誤,在idea開發工具中,若是你寫的配置文件屬性名沒有高亮,那就須要注意了,配置文件中使用mysql-connector.6.x版本的驅動,這個版本必定要注意驅動名稱和之前的版本是不同的,而且鏈接的url中必須指定時區(serverTimezone)web

配置內容以下:spring

#Spring boot application.yml


spring:
  #profiles : dev
  #數據源配置,使用阿里巴巴的Druid
  datasource:
    name: mydb
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/wechat?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    minIdle: 1
    maxActive: 2
    initialSize: 1
    timeBetweenEvictionRunsMillis: 3000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 'ZTM' FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false

#mybatis的配置
mybatis:
  type-aliases-package: com.sunyu.concurrent
  config-location: classpath:/mybatis-config.xml
  mapper-locations: classpath*:com/sunyu/concurrent/mapping/*.xml

#啓動的服務監聽端口
server:
  port: 8080

mybatis-config.xml配置文件內容sql

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
		PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
		"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
	    <!--是否開啓緩存-->
		<setting name="cacheEnabled" value="true"/>
		<!--是否開啓mybatis自動轉駝峯-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!--use log4j2-->
        <setting name="logImpl" value="LOG4J2"/>
	</settings>
	<!--配置分頁插件-->
    <plugins>
    	<plugin interceptor="com.github.pagehelper.PageInterceptor">
    	</plugin>
    </plugins>
</configuration>

log4j2.xml的配置文件,請參考個人前一篇博客,固然若是你不想用log4j2.xml做爲日誌默認的配置文件,則須要在application.yml文件中配置指定log的配置文件,參考以下:

logging:
  config: classpath:log4j2-spring.xml

2.3 添加靜態資源

若是項目只是提供restful的服務,則能夠不用作這個操做。在resources目錄下新建static目錄,在static下你能夠建本身的css目錄以及圖片的存放目錄,甚至是html的頁面。

注意:不要static不要寫其餘名稱,SpringBoot一開始的理念就是「約定因爲配置」,因此沒有爲何。

重點:本文添加靜態路徑的目的主要是存放404,500這些錯誤處理頁面,在實際項目中,咱們也必須定製化本身的錯誤處理頁面,本例是在static下新建了一個errors的目錄,而後裏面存放一些404,500的html。下面會內容將介紹怎麼讓SpringBoot轉發自動義錯誤頁面。

3、項目入口類

項目入口類就是SpringBoot的項目的啓動入口,該類通常建議放在basePackage下。類名稱能夠自定義,只要不和SpringBoot的註解重名,代碼以下:

@SpringBootApplication
@MapperScan("com.hunao.boot.dao")
public class SpringBootMainApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMainApplication.class, args);
    }

    /**
     * 讓SpringBoot項目錯誤時,使用自定義的錯誤處理頁面顯示
     * jdk 1.8 lambda
     * @return
     */
    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {
        return (container -> {
                ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/errors/401.html");
                ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/errors/404.html");
                ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR,
                        "/errors/500.html");
                container.addErrorPages(error401Page, error404Page, error500Page);
        });
    }
}

上面@MapperScan很是重要,使用@MapperScan是告訴SpringBoot去掃描包下Mybatis的Mapper接口類,而後完成自動注入和管理,不然我調用Mapper時將找不到相應的實例。固然還可使用另一種方式在咱們本身開發的每個Mybatis mapper接口上加上@Mapper註解,這是SpringBoot也能夠自動掃描完成裝配,可是這種方式略顯麻煩,每一個mapper都加一個註解。

總結:本文主要是介紹整合流程的思路,包括整合當中須要注意的坑以及生產環境下錯誤頁面自動義處理

相關文章
相關標籤/搜索