1. 程式人生 > >springboot配置mybatis、druid

springboot配置mybatis、druid

簡單地記錄一下mybatis、druid在springboot中的配置,有時候記性不好容易搞忘,特別是新學的druid,記錄下來方便以後翻閱。

Mybatis

Mybatis就不用介紹了,直接上配置流程吧。

一、 引入Maven依賴

    <!-- mysql連線 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- mybatis依賴 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>

    <!-- 分頁外掛 -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.3</version>
    </dependency>

二、 建立mybatis-config.xml

<?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>
        <!--使用jdbc的getGeneratedKeys獲取資料庫自增主鍵值-->
        <setting name="useGeneratedKeys" value="true"/>

        <!--使用列標籤替換列別名 預設true-->
        <setting name="useColumnLabel" value="true"/>

        <!--開啟駝峰命名轉換-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--配置分頁外掛-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="helperDialect" value="mysql"/>
        </plugin>
    </plugins>
</configuration>

三、 建立entity和mapper

在resource目錄下建立mapper,對應dao的xml檔案就放在這裡

在這裡插入圖片描述

UserDao.xml檔案如下:

<!--頭部資訊,確定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">
<!--此處是對應UserDao介面-->
<mapper namespace="org.sicau.iotworksexhibition.dao.UserDao">
    <!--此處的Student對應POJO實體,id對應定義方法名-->
<select id="queryStudentList" resultType="org.sicau.iotworksexhibition.entity.POJO.Student">
        select * from user_tb;
    </select>
</mapper>

建立實體存放目錄,在原始碼存放目錄下建立entity包: 在這裡插入圖片描述

四、 配置application.yml檔案

# mybatis 配置
mybatis:
  mapper-locations: classpath:mapping/*.xml # 配置mapper路徑
  type-aliases-package: org.sicau.iotworksexhibition.PO # 配置實體物件路徑,這樣在涉及到實體類寫sql語句的時候,可以不用寫包名
  config-location: classpath:mybatis-config.xml # 配置配置檔案路徑

五、 配置MapperScan

@SpringBootApplication
@MapperScan("org.sicau.iotworksexhibition.dao") //掃描mybatis的mapper
public class IotWorksExhibitionApplication {
    public static void main(String[] args) {
        SpringApplication.run(IotWorksExhibitionApplication.class, args);
    }
}

六、配置資料來源

可以用Spring推薦的DBCP,也可以用c3p0,但是這個是比較老的一個工具,而且各方面來說都快過時了,推薦使用阿里的druid。這裡記錄一下配置dbcp的application.yml配置(一般配置)

spring:
# 配置資料來源
  datasource:
    url: jdbc:mysql://localhost:3306/iot_works_exhibition?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root  # 資料庫使用者名稱
    password: 123456 # 資料庫密碼
    dbcp2:
      default-auto-commit: false  # 是否自動提交
    tomcat:
      max-wait: 60000 # 等待超時時間

druid

druid是阿里巴巴團隊開發的一個非常優秀的資料庫連線池,能提供強大的監控和拓展功能。官方地址:http://druid.io/ 在這裡插入圖片描述

第一次配置這個還是折騰了很久,還是記錄一下吧,後面再慢慢學習。

一、 pom依賴

    <!--阿里連線池druid-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.18</version>
    </dependency>

二、 application.yml配置

spring:
# 配置資料來源
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/iot_works_exhibition?useUnicode=true&characterEncoding=utf-8&useSSL=false
      username: root
      password: 123456

      # 下面為連線池的補充設定,應用到上面所有資料來源中
      # 初始化大小,最小,最大
      initialSize: 5
      minIdle: 5
      maxActive: 20
      # 配置獲取連線等待超時的時間
      maxWait: 60000
      # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒
      timeBetweenEvictionRunsMillis: 60000
      # 配置一個連線在池中最小生存的時間,單位是毫秒
      minEvictableIdleTimeMillis: 300000
      validationQuery: SELECT 1 FROM DUAL
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      # 開啟PSCache,並且指定每個連線上PSCache的大小
      poolPreparedStatements: true
      maxPoolPreparedStatementPerConnectionSize: 20
      # 配置監控統計攔截的filters,去掉後監控介面sql無法統計,'wall'用於防火牆
      filters: stat,wall #,log4j
      # 通過connectProperties屬性來開啟mergeSql功能;慢SQL記錄
      slowSqlMillis: 5000
      # 合併多個DruidDataSource的監控資料
      useGlobalDataSourceStat: true

三、 注入DruidDataSource

在config.dao目錄下建立DruidConfiguration.java

package org.sicau.iotworksexhibition.config.dao;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;

/**
 * @Author beifengtz
 * @Date Created in 20:26 2018/9/21
 * @Description:
 */
@Configuration
@Primary    // 標記配置,優先實現
public class DruidConfiguration {
    @Bean(name = "druidDataSource") // 此處最好設定bean名,如果是單資料來源倒無所謂,但是如果是多資料來源很有可能發生衝突,特別是spring內使用的dbcp容易與其發生衝突。
    @ConfigurationProperties(prefix = "spring.datasource.druid") // 配置讀取哪一部分的配置
    public DataSource druidConfiguration(){
        return new DruidDataSource();
    }
}

四、 配置DruidStatViewServlet

package org.sicau.iotworksexhibition.config.servlet;

import com.alibaba.druid.support.http.StatViewServlet;

import javax.servlet.Servlet;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

/**
 * @Author beifengtz
 * @Date Created in 20:31 2018/9/21
 * @Description:
 */

@WebServlet(
        urlPatterns= {"/druid/*"},
        initParams= {
                @WebInitParam(name="allow",value="127.0.0.1"),
                @WebInitParam(name="loginUsername",value="root"),
                @WebInitParam(name="loginPassword",value="123456"),
                @WebInitParam(name="resetEnable",value="true")// 允許HTML頁面上的“Reset All”功能
        }
)
public class DruidStatViewServlet extends StatViewServlet implements Servlet {
    private static final long serialVersionUID = 1L;
}

五、 配置DruidStatFilter

package org.sicau.iotworksexhibition.config.filter;

import com.alibaba.druid.support.http.WebStatFilter;

import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

/**
 * @Author beifengtz
 * @Date Created in 20:29 2018/9/21
 * @Description:
 */

@WebFilter(
        filterName="druidWebStatFilter",
        urlPatterns= {"/*"},
        initParams= {
                @WebInitParam(name="exclusions",value="*.js,*.jpg,*.png,*.gif,*.ico,*.css,/druid/*")//配置本過濾器放行的請求字尾
        }
)
public class DruidStatFilter extends WebStatFilter {
}

六、 配置掃描

package org.sicau.iotworksexhibition;

import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan //druid用於掃描所有的Servlet、filter、listener+
@MapperScan("org.sicau.iotworksexhibition.dao") //掃描mybatis的mapper
public class IotWorksExhibitionApplication {
    public static void main(String[] args) {
        SpringApplication.run(IotWorksExhibitionApplication.class, args);
    }
}

當我們以上配置完了就可以看效果了,我覺得druid最強大的一點就在於資料庫的監控,我們啟動專案,並訪問http://localhost:8080/druid/login.html,會出現下面的頁面,我們使用DruidStatViewServlet處配置的使用者名稱密碼登入進入。 在這裡插入圖片描述

然後我們就可以使用它強大的監聽功能了 在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述