一圆米、配置DataSource(數(shù)據(jù)源)
在我們訪問數(shù)據(jù)庫時(shí)谐檀,需要先配置數(shù)據(jù)源环鲤,有下面幾種不同的數(shù)據(jù)庫配置方式:
首先喝检,在pom.xml中引入jdbc支持嗅辣。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
內(nèi)嵌式數(shù)據(jù)庫的支持
內(nèi)嵌式數(shù)據(jù)庫通常用于開發(fā)和測試環(huán)境,不推薦使用于生產(chǎn)環(huán)境挠说。Spring Boot提供自動(dòng)配置的內(nèi)嵌數(shù)據(jù)庫有H2澡谭、HSQL、Derby损俭,不需要提供任何連接配置即可使用蛙奖。
示例:典型的POM依賴如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>runtime</scope>
</dependency>
注 無論出于什么原因,你需要配置內(nèi)嵌數(shù)據(jù)庫的連接URL杆兵,一定要確保數(shù)據(jù)庫的自動(dòng)關(guān)閉是禁用的雁仲。如果使用H2,你需要設(shè)置DB_CLOSE_ON_EXIT=FALSE
琐脏。如果使用HSQLDB攒砖,你需要確保沒使用shutdown=true
。禁用數(shù)據(jù)庫的自動(dòng)關(guān)閉可以讓Spring Boot控制何時(shí)關(guān)閉數(shù)據(jù)庫日裙,因此在數(shù)據(jù)庫不需要時(shí)可以確保關(guān)閉只發(fā)生一次吹艇。
連接生產(chǎn)環(huán)境數(shù)據(jù)庫(以MySQL為例)
先引入MySQL連接的依賴包,在pom.xml
中加入:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
在src/main/resources/application.properties
中配置數(shù)據(jù)源信息
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
這里我們拋棄原本的properties配置昂拂,選擇新建一個(gè)application.yml作為配置文件受神。yml最大的好處在于其擁有天然的樹狀結(jié)構(gòu)。
1政钟、在properties文件中是以”.”進(jìn)行分割的路克, 在yml中是用”:”進(jìn)行分割;
2、yml的數(shù)據(jù)格式和json的格式很像养交,都是K-V格式精算,并且通過”:”進(jìn)行賦值;
3碎连、在yml中縮進(jìn)一定不能使用TAB灰羽,否則會(huì)報(bào)很奇怪的錯(cuò)誤;(縮進(jìn)只能用空格!A馈C蹈洹!)
4怠噪、每個(gè)k的冒號后面一定都要加一個(gè)空格恐似;
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/dbgirl?useUnicode=true&characterEncoding=utf8&useSSL=true
username: dbuser
password: dbpass
注意:其中'?useUnicode=true&characterEncoding=utf8&useSSL=true'這一條是為了指定字符編碼和使用SSL連接。
使用JdbcTemplate操作數(shù)據(jù)庫
Spring的JdbcTemplate是自動(dòng)配置的傍念,你可以直接使用@Autowired
來注入到你自己的bean中來使用矫夷。
舉例:我們在創(chuàng)建User
表,包含屬性name
憋槐、age
双藕,下面來編寫數(shù)據(jù)訪問對象和單元測試用例。
- 定義包含有插入阳仔、刪除忧陪、查詢的抽象接口UserService
public interface UserService {
/**
* 新增一個(gè)用戶
* @param name
* @param age
*/
void create(Integer id, String name, Integer age);
/**
* 根據(jù)name刪除一個(gè)用戶高
* @param name
*/
void deleteByName(String name);
/**
* 獲取用戶總量
*/
Integer getAllUsers();
/**
* 刪除所有用戶
*/
void deleteAllUsers();
}
- 通過JdbcTemplate實(shí)現(xiàn)UserService中定義的數(shù)據(jù)訪問操作
@Service
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void create(Integer id,String name, Integer age) {
jdbcTemplate.update("insert into USER(id,NAME, AGE) values(?, ?, ?)", id, name, age);
}
@Override
public void deleteByName(String name) {
jdbcTemplate.update("delete from USER where NAME = ?", name);
}
@Override
public Integer getAllUsers() {
return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class);
}
@Override
public void deleteAllUsers() {
jdbcTemplate.update("delete from USER");
}
}
那么我們?nèi)绾问褂媚兀亢唵蝸砜唇叮贕irlController類中我們可以這樣修改接口嘶摊。
@Autowired
private GirlService girlservice
@PostMapping(value="/girls")
public String postUser(@RequestBody Girl girl) {
// 處理"/users/"的POST請求,用來創(chuàng)建User
// 除了@ModelAttribute綁定參數(shù)之外评矩,還可以通過@RequestParam從頁面中傳遞參數(shù)
//girls.put(girl.getId(), girl);
girlService.create(girl.getId(),girl.getName(),girl.getCupSize());
return "success";
}
我們依舊可以用POSTMAN進(jìn)行接口測試更卒。