12、整合JDBC、Druid、Mybatis
SpringData簡介
對于數(shù)據(jù)庫訪問,無論是SQL(關(guān)系型數(shù)據(jù)庫)還是NOSQL(非關(guān)系型),SpringBoot底層都是采用Spring Data的方式進(jìn)行 統(tǒng)一處理。
Spring Boot 底層都是采用 Spring Data 的方式進(jìn)行統(tǒng)一處理各種數(shù)據(jù)庫,Spring Data 也是 Spring 中與 Spring Boot、Spring Cloud 等齊名的知名項目。
Sping Data 官網(wǎng):https://spring.io/projects/spring-data
數(shù)據(jù)庫相關(guān)的啟動器 :可以參考官方文檔:
https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/htmlsingle/#using-boot-starter
整合JDBC
創(chuàng)建測試項目測試數(shù)據(jù)源
1、新建一個項目springboot-04-data ,引入相應(yīng)模塊!

2、項目建好之后,發(fā)現(xiàn)自動幫我們導(dǎo)入如下的啟動器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
3、編寫yaml配置文件連接數(shù)據(jù)庫
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3308/vueblog?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
4、配置完這一些東西后,我們就可以直接去使用了,因為SpringBoot已經(jīng)默認(rèn)幫我們進(jìn)行了自動配置;去測試類測試一下
@SpringBootTest
class Springboot04DataApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
//查看一下默認(rèn)數(shù)據(jù)源
System.out.println(dataSource.getClass());
//獲得連接
Connection connection = dataSource.getConnection();
System.out.println(connection);
//關(guān)閉連接
connection.close();
}
}
結(jié)果:我們可以看到他默認(rèn)給我們配置的數(shù)據(jù)源為 : class com.zaxxer.hikari.HikariDataSource , 我們并沒有手動配置
我們來全局搜索一下,找到數(shù)據(jù)源的所有自動配置都在 :DataSourceAutoConfiguration文件:
@Import({Hikari.class, Tomcat.class, Dbcp2.class, OracleUcp.class, Generic.class, DataSourceJmxConfiguration.class})
protected static class PooledDataSourceConfiguration {
protected PooledDataSourceConfiguration() {
}
}
這里導(dǎo)入的類都在 DataSourceConfiguration 配置類下,可以看出 Spring Boot 2.4.4 默認(rèn)使用HikariDataSource 數(shù)據(jù)源,而以前版本,如 Spring Boot 1.5 默認(rèn)使用 org.apache.tomcat.jdbc.pool.DataSource 作為數(shù)據(jù)源;
HikariDataSource 號稱 Java WEB 當(dāng)前速度最快的數(shù)據(jù)源,相比于傳統(tǒng)的 C3P0 、DBCP、Tomcat jdbc 等連接池更加優(yōu)秀;
可以使用 spring.datasource.type 指定自定義的數(shù)據(jù)源類型,值為 要使用的連接池實現(xiàn)的完全限定名。
關(guān)于數(shù)據(jù)源我們并不做介紹,有了數(shù)據(jù)庫連接,顯然就可以 CRUD 操作數(shù)據(jù)庫了。但是我們需要先了解一個對象 JdbcTemplate
JdbcTemplate
1、有了數(shù)據(jù)源(com.zaxxer.hikari.HikariDataSource),然后可以拿到數(shù)據(jù)庫連接(java.sql.Connection),有了連接,就可以使用原生的 JDBC 語句來操作數(shù)據(jù)庫;
2、即使不使用第三方第數(shù)據(jù)庫操作框架,如 MyBatis等,Spring 本身也對原生的JDBC 做了輕量級的封裝,即JdbcTemplate。
3、數(shù)據(jù)庫操作的所有 CRUD 方法都在 JdbcTemplate 中。
4、Spring Boot 不僅提供了默認(rèn)的數(shù)據(jù)源,同時默認(rèn)已經(jīng)配置好了 JdbcTemplate 放在了容器中,程序員只需自己注入即可使用
5、JdbcTemplate 的自動配置是依賴 org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration 類
JdbcTemplate主要提供以下幾類方法:
- execute方法:可以用于執(zhí)行任何SQL語句,一般用于執(zhí)行DDL語句;
- update方法及batchUpdate方法:update方法用于執(zhí)行新增、修改、刪除等語句;batchUpdate方法用于執(zhí)行批處理相關(guān)語句;
- query方法及queryForXXX方法:用于執(zhí)行查詢相關(guān)語句;
- call方法:用于執(zhí)行存儲過程、函數(shù)相關(guān)語句。
測試
編寫一個Controller,注入 jdbcTemplate,編寫測試方法進(jìn)行訪問測試;
package com.sen.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/jdbc")
public class JdbcController {
/**
* Spring Boot 默認(rèn)提供了數(shù)據(jù)源,默認(rèn)提供了 org.springframework.jdbc.core.JdbcTemplate
* JdbcTemplate 中會自己注入數(shù)據(jù)源,用于簡化 JDBC操作
* 還能避免一些常見的錯誤,使用起來也不用再自己來關(guān)閉數(shù)據(jù)庫連接
*/
@Autowired
JdbcTemplate jdbcTemplate;
//查詢employee表中所有數(shù)據(jù)
//List 中的1個 Map 對應(yīng)數(shù)據(jù)庫的 1行數(shù)據(jù)
//Map 中的 key 對應(yīng)數(shù)據(jù)庫的字段名,value 對應(yīng)數(shù)據(jù)庫的字段值
@GetMapping("/blogs")
public List<Map<String, Object>> list(){
String sql = "select * from vueblog.m_blog";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
return maps;
}
//新增一個用戶
@GetMapping("/add")
public String addUser(){
//插入語句,注意時間問題
String sql = "insert into mybatis.user(id, name, pwd)" +
" values (4,'小三',123456)";
jdbcTemplate.update(sql);
//查詢
return "addOk";
}
//修改用戶信息
@GetMapping("/update/{id}")
public String updateUser(@PathVariable("id") int id){
//插入語句,注意時間問題
String sql = "update mybatis.user set name=? , pwd=? where id="+id ;
//數(shù)據(jù)
Object[] objects = new Object[2];
objects[0] = "小尼姑";
objects[1] = "123456";
jdbcTemplate.update(sql,objects);
//查詢
return "updateOk";
}
//刪除一個用戶
@GetMapping("/delete/{id}")
public String addUser(@PathVariable("id") int id){
//插入語句,注意時間問題
String sql = "delete from mybatis.user where id=?";
jdbcTemplate.update(sql,id);
//查詢
return "deleteOk";
}
}
測試請求,結(jié)果正常;
整合Druid【重點】
Druid簡介
Java程序很大一部分要操作數(shù)據(jù)庫,為了提高性能操作數(shù)據(jù)庫的時候,又不得不使用數(shù)據(jù)庫連接池。
Druid 是阿里巴巴開源平臺上一個數(shù)據(jù)庫連接池實現(xiàn),結(jié)合了 C3P0、DBCP 等 DB 池的優(yōu)點,同時加入了日志監(jiān)控。
Druid 可以很好的監(jiān)控 DB 池連接和 SQL 的執(zhí)行情況,天生就是針對監(jiān)控而生的 DB 連接池。
Druid已經(jīng)在阿里巴巴部署了超過600個應(yīng)用,經(jīng)過一年多生產(chǎn)環(huán)境大規(guī)模部署的嚴(yán)苛考驗。
Spring Boot 2.0 以上默認(rèn)使用 Hikari 數(shù)據(jù)源,可以說 Hikari 與 Driud 都是當(dāng)前 Java Web 上最優(yōu)秀的數(shù)據(jù)源,我們來重點介紹 Spring Boot 如何集成 Druid 數(shù)據(jù)源,如何實現(xiàn)數(shù)據(jù)庫監(jiān)控。
Github地址:https://github.com/alibaba/druid/
com.alibaba.druid.pool.DruidDataSource 基本配置參數(shù)如下:
| 配置 | 缺省值 | 說明 |
|---|---|---|
| name | 配置這個屬性的意義在于,如果存在多個數(shù)據(jù)源,監(jiān)控的時候可以通過名字來區(qū)分開來。如果沒有配置,將會生成一個名字,格式是:"DataSource-" + System.identityHashCode(this). 另外配置此屬性至少在1.0.5版本中是不起作用的,強(qiáng)行設(shè)置name會出錯。詳情-點此處。 | |
| url | 連接數(shù)據(jù)庫的url,不同數(shù)據(jù)庫不一樣。例如: mysql : jdbc:mysql://10.20.153.104:3306/druid2 oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto | |
| username | 連接數(shù)據(jù)庫的用戶名 | |
| password | 連接數(shù)據(jù)庫的密碼。如果你不希望密碼直接寫在配置文件中,可以使用ConfigFilter。詳細(xì)看這里 | |
| driverClassName | 根據(jù)url自動識別 | 這一項可配可不配,如果不配置druid會根據(jù)url自動識別dbType,然后選擇相應(yīng)的driverClassName |
| initialSize | 0 | 初始化時建立物理連接的個數(shù)。初始化發(fā)生在顯示調(diào)用init方法,或者第一次getConnection時 |
| maxActive | 8 | 最大連接池數(shù)量 |
| maxIdle | 8 | 已經(jīng)不再使用,配置了也沒效果 |
| minIdle | 最小連接池數(shù)量 | |
| maxWait | 獲取連接時最大等待時間,單位毫秒。配置了maxWait之后,缺省啟用公平鎖,并發(fā)效率會有所下降,如果需要可以通過配置useUnfairLock屬性為true使用非公平鎖。 | |
| poolPreparedStatements | false | 是否緩存preparedStatement,也就是PSCache。PSCache對支持游標(biāo)的數(shù)據(jù)庫性能提升巨大,比如說oracle。在mysql下建議關(guān)閉。 |
| maxPoolPreparedStatementPerConnectionSize | -1 | 要啟用PSCache,必須配置大于0,當(dāng)大于0時,poolPreparedStatements自動觸發(fā)修改為true。在Druid中,不會存在Oracle下PSCache占用內(nèi)存過多的問題,可以把這個數(shù)值配置大一些,比如說100 |
| validationQuery | 用來檢測連接是否有效的sql,要求是一個查詢語句,常用select 'x'。如果validationQuery為null,testOnBorrow、testOnReturn、testWhileIdle都不會起作用。 | |
| validationQueryTimeout | 單位:秒,檢測連接是否有效的超時時間。底層調(diào)用jdbc Statement對象的void setQueryTimeout(int seconds)方法 | |
| testOnBorrow | true | 申請連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。 |
| testOnReturn | false | 歸還連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。 |
| testWhileIdle | false | 建議配置為true,不影響性能,并且保證安全性。申請連接的時候檢測,如果空閑時間大于timeBetweenEvictionRunsMillis,執(zhí)行validationQuery檢測連接是否有效。 |
| keepAlive | false (1.0.28) | 連接池中的minIdle數(shù)量以內(nèi)的連接,空閑時間超過minEvictableIdleTimeMillis,則會執(zhí)行keepAlive操作。 |
| timeBetweenEvictionRunsMillis | 1分鐘(1.0.14) | 有兩個含義: 1) Destroy線程會檢測連接的間隔時間,如果連接空閑時間大于等于minEvictableIdleTimeMillis則關(guān)閉物理連接。 2) testWhileIdle的判斷依據(jù),詳細(xì)看testWhileIdle屬性的說明 |
| numTestsPerEvictionRun | 30分鐘(1.0.14) | 不再使用,一個DruidDataSource只支持一個EvictionRun |
| minEvictableIdleTimeMillis | 連接保持空閑而不被驅(qū)逐的最小時間 | |
| connectionInitSqls | 物理連接初始化的時候執(zhí)行的sql | |
| exceptionSorter | 根據(jù)dbType自動識別 | 當(dāng)數(shù)據(jù)庫拋出一些不可恢復(fù)的異常時,拋棄連接 |
| filters | 屬性類型是字符串,通過別名的方式配置擴(kuò)展插件,常用的插件有: 監(jiān)控統(tǒng)計用的filter:stat 日志用的filter:log4j 防御sql注入的filter:wall | |
| proxyFilters | 類型是List<com.alibaba.druid.filter.Filter>,如果同時配置了filters和proxyFilters,是組合關(guān)系,并非替換關(guān)系 |
配置數(shù)據(jù)源
1、添上Druid數(shù)據(jù)源依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.5</version>
</dependency>
2、切換數(shù)據(jù)源:之前說 Spring Boot以上 默認(rèn)使用com.zaxxer.hikari.HikariDataSource 數(shù)據(jù)源,但可以 通過 spring.datasource.type 指定數(shù)據(jù)源。
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3308/mybatis?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
3、數(shù)據(jù)源切換之后,在測試類中注入 DataSource,然后獲取到它,輸出一看便知是否成功切換;

4、切換成功!既然切換成功,就可以設(shè)置數(shù)據(jù)源連接初始化大小、最大連接數(shù)、等待時間、最小連接數(shù) 等設(shè)置項;可以查看源碼
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3308/mybatis?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#Spring Boot 默認(rèn)是不注入這些屬性值的,需要自己綁定
#druid 數(shù)據(jù)源專有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置監(jiān)控統(tǒng)計攔截的filters,stat:監(jiān)控統(tǒng)計、log4j:日志記錄、wall:防御sql注入
#如果允許時報錯 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#則導(dǎo)入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
5、導(dǎo)入Log4j 的依賴
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
6、現(xiàn)在需要程序員自己為 DruidDataSource 綁定全局配置文件中的參數(shù),再添加到容器中,而不再使用 Spring Boot 的自動生成了;我們需要 自己添加 DruidDataSource 組件到容器中,并綁定屬性;
package com.sen.config;
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 javax.sql.DataSource;
@Configuration
public class DruidConfig {
/*
將自定義的 Druid數(shù)據(jù)源添加到容器中,不再讓 Spring Boot 自動創(chuàng)建
綁定全局配置文件中的 druid 數(shù)據(jù)源屬性到 com.alibaba.druid.pool.DruidDataSource從而讓它們生效
@ConfigurationProperties(prefix = "spring.datasource"):作用就是將 全局配置文件中
前綴為 spring.datasource的屬性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名參數(shù)中
*/
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource() {
return new DruidDataSource();
}
}
7、去測試類中測試一下;看是否成功!
package com.sen;
import com.alibaba.druid.pool.DruidDataSource;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@SpringBootTest
class Springboot04DataApplicationTests {
@Autowired
DataSource dataSource;
@Test
void contextLoads() throws SQLException {
//查看一下默認(rèn)數(shù)據(jù)源
System.out.println(dataSource.getClass());
//獲得連接
Connection connection = dataSource.getConnection();
System.out.println(connection);
DruidDataSource druidDataSource = (DruidDataSource) dataSource;
System.out.println("druidDataSource 數(shù)據(jù)源最大連接數(shù):" + druidDataSource.getMaxActive());
System.out.println("druidDataSource 數(shù)據(jù)源初始化連接數(shù):" + druidDataSource.getInitialSize());
//關(guān)閉連接
connection.close();
}
}
輸出結(jié)果 :可見配置參數(shù)已經(jīng)生效!

配置Druid數(shù)據(jù)源監(jiān)控
Druid 數(shù)據(jù)源具有監(jiān)控的功能,并提供了一個 web 界面方便用戶查看,類似安裝 路由器 時,人家也提供了一個默認(rèn)的 web 頁面。
所以第一步需要設(shè)置 Druid 的后臺管理頁面,比如 登錄賬號、密碼 等;配置后臺管理;
//配置 Druid 監(jiān)控管理后臺的Servlet;
//內(nèi)置 Servlet 容器時沒有web.xml文件,所以使用 Spring Boot 的注冊 Servlet 方式
@Bean
public ServletRegistrationBean statViewServlet() {
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
// 這些參數(shù)可以在 com.alibaba.druid.support.http.StatViewServlet
// 的父類 com.alibaba.druid.support.http.ResourceServlet 中找到
Map<String, String> initParams = new HashMap<>();
initParams.put("loginUsername", "admin"); //后臺管理界面的登錄賬號
initParams.put("loginPassword", "123456"); //后臺管理界面的登錄密碼
//后臺允許誰可以訪問
//initParams.put("allow", "localhost"):表示只有本機(jī)可以訪問
//initParams.put("allow", ""):為空或者為null時,表示允許所有訪問
initParams.put("allow", "");
//deny:Druid 后臺拒絕誰訪問
//initParams.put("kuangshen", "192.168.1.20");表示禁止此ip訪問
//設(shè)置初始化參數(shù)
bean.setInitParameters(initParams);
return bean;
}
配置完畢后,我們可以選擇訪問 :http://localhost:8080/druid/login.html

配置 Druid web 監(jiān)控 filter 過濾器
//配置 Druid 監(jiān)控 之 web 監(jiān)控的 filter
//WebStatFilter:用于配置Web和Druid數(shù)據(jù)源之間的管理關(guān)聯(lián)監(jiān)控統(tǒng)計
@Bean
public FilterRegistrationBean webStatFilter() {
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
//exclusions:設(shè)置哪些請求進(jìn)行過濾排除掉,從而不進(jìn)行統(tǒng)計
Map<String, String> initParams = new HashMap<>();
initParams.put("exclusions", "*.js,*.css,/druid/*,/jdbc/*");
bean.setInitParameters(initParams);
//"/*" 表示過濾所有請求
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
平時在工作中,按需求進(jìn)行配置即可,主要用作監(jiān)控!
整合Mybatis【重點】
官方文檔:http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
Maven倉庫地址:https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter/2.1.1
整合測試
1、導(dǎo)入Mybatis所需要的依賴
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
2、配置數(shù)據(jù)庫連接信息
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3308/mybatis?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
#Spring Boot 默認(rèn)是不注入這些屬性值的,需要自己綁定
#druid 數(shù)據(jù)源專有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置監(jiān)控統(tǒng)計攔截的filters,stat:監(jiān)控統(tǒng)計、log4j:日志記錄、wall:防御sql注入
#如果允許時報錯 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#則導(dǎo)入 log4j 依賴即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#整合mybatis
mybatis:
type-aliases-package: com.sen.entity
mapper-locations: classpath:mybatis/mapper/*.xml
3、測試數(shù)據(jù)庫是否連接成功!
@Test
void contextLoads() throws SQLException {
//查看一下默認(rèn)數(shù)據(jù)源
System.out.println(dataSource.getClass());
//獲得連接
Connection connection = dataSource.getConnection();
System.out.println(connection);
//關(guān)閉連接
connection.close();
}
4、創(chuàng)建實體類,導(dǎo)入 Lombok!
package com.sen.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Teacher {
private Integer id;
private String name;
}
5、創(chuàng)建mapper目錄以及對應(yīng)的 Mapper 接口
TeacherMapper.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.sen.mapper.TeacherMapper">
<select id="getTeachers" resultType="Teacher">
select * from mybatis.teacher;
</select>
<select id="getTeacherById" resultType="Teacher" parameterType="int">
select * from mybatis.teacher where id = #{id};
</select>
</mapper>
7、maven配置資源過濾問題
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
8、在application.yaml中配置mybatis
#配置mybatis
mybatis:
#指定xml掃描路徑
mapper-locations: classpath:com/sen/mapper/*.xml
#指定掃描別名下的包
type-aliases-package: com.sen.entity
9、編寫 TeacherController 進(jìn)行測試!
package com.sen.controller;
import com.sen.entity.Teacher;
import com.sen.mapper.TeacherMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class TeacherController {
@Autowired
TeacherMapper teacherMapper;
//獲取所有部門信息
@GetMapping("/getTeachers")
public List<Teacher> getTeachers(){
return teacherMapper.getTeachers();
}
//通過id獲得部門
@GetMapping("/getTeacher/{id}")
public Teacher getTeacherById(@PathVariable("id") Integer id){
return teacherMapper.getTeacherById(id);
}
}
**啟動項目訪問進(jìn)行測試!