在第2章節中,咱們介紹瞭如何經過Spring Boot來實現HTTP接口,以及圍繞HTTP接口相關的單元測試、文檔生成等實用技能。可是,這些內容還不足以幫助咱們構建一個動態應用的服務端程序。不論咱們是要作App、小程序、仍是傳統的Web站點,對於用戶的信息、相關業務的內容,一般都須要對其進行存儲,而不是像第2章節中那樣,把用戶信息存儲在內存中(重啓就丟了!)。html
對於信息的存儲,如今已經有很是很是多的產品能夠選擇,其中不乏許多很是優秀的開源免費產品,好比:MySQL,Redis等。接下來,在第3章節,咱們將繼續學習在使用Spring Boot開發服務端程序的時候,如何實現對各流行數據存儲產品的增刪改查操做。java
做爲數據訪問章節的第一篇,咱們將從最爲經常使用的關係型數據庫開始。經過一個簡單例子,學習在Spring Boot中最基本的數據訪問工具:JdbcTemplate。mysql
在咱們訪問數據庫的時候,須要先配置一個數據源,下面分別介紹一下幾種不一樣的數據庫配置方式。git
首先,爲了鏈接數據庫須要引入jdbc支持,在pom.xml
中引入以下配置:github
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
嵌入式數據庫一般用於開發和測試環境,不推薦用於生產環境。Spring Boot提供自動配置的嵌入式數據庫有H二、HSQL、Derby,你不須要提供任何鏈接配置就能使用。spring
好比,咱們能夠在pom.xml
中引入以下配置使用HSQLsql
<dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <scope>runtime</scope> </dependency>
以MySQL數據庫爲例,先引入MySQL鏈接的依賴包,在pom.xml
中加入:數據庫
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency>
在src/main/resources/application.properties
中配置數據源信息小程序
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
當你將應用部署於應用服務器上的時候想讓數據源由應用服務器管理,那麼可使用以下配置方式引入JNDI數據源。api
spring.datasource.jndi-name=java:jboss/datasources/customers
Spring的JdbcTemplate是自動配置的,你能夠直接使用@Autowired
或構造函數(推薦)來注入到你本身的bean中來使用。
下面就來一塊兒完成一個增刪改查的例子:
先建立User
表,包含屬性name
、age
。能夠經過執行下面的建表語句::
CREATE TABLE `User` ( `name` varchar(100) COLLATE utf8mb4_general_ci NOT NULL, `age` int NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
根據數據庫中建立的User
表,建立領域對象:
@Data @NoArgsConstructor public class User { private String name; private Integer age; }
這裏使用了Lombok的@Data
和@NoArgsConstructor
註解來自動生成各參數的Set、Get函數以及不帶參數的構造函數。若是您對Lombok還不瞭解,能夠看看這篇文章:Java開發神器Lombok的使用與原理。
public interface UserService { /** * 新增一個用戶 * * @param name * @param age */ int create(String name, Integer age); /** * 根據name查詢用戶 * * @param name * @return */ List<User> getByName(String name); /** * 根據name刪除用戶 * * @param name */ int deleteByName(String name); /** * 獲取用戶總量 */ int getAllUsers(); /** * 刪除全部用戶 */ int deleteAllUsers(); }
JdbcTemplate
實現UserService
中定義的數據訪問操做@Service public class UserServiceImpl implements UserService { private JdbcTemplate jdbcTemplate; UserServiceImpl(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } @Override public int create(String name, Integer age) { return jdbcTemplate.update("insert into USER(NAME, AGE) values(?, ?)", name, age); } @Override public List<User> getByName(String name) { List<User> users = jdbcTemplate.query("select NAME, AGE from USER where NAME = ?", (resultSet, i) -> { User user = new User(); user.setName(resultSet.getString("NAME")); user.setAge(resultSet.getInt("AGE")); return user; }, name); return users; } @Override public int deleteByName(String name) { return jdbcTemplate.update("delete from USER where NAME = ?", name); } @Override public int getAllUsers() { return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class); } @Override public int deleteAllUsers() { return jdbcTemplate.update("delete from USER"); } }
@RunWith(SpringRunner.class) @SpringBootTest public class Chapter31ApplicationTests { @Autowired private UserService userSerivce; @Before public void setUp() { // 準備,清空user表 userSerivce.deleteAllUsers(); } @Test public void test() throws Exception { // 插入5個用戶 userSerivce.create("Tom", 10); userSerivce.create("Mike", 11); userSerivce.create("Didispace", 30); userSerivce.create("Oscar", 21); userSerivce.create("Linda", 17); // 查詢名爲Oscar的用戶,判斷年齡是否匹配 List<User> userList = userSerivce.getByName("Oscar"); Assert.assertEquals(21, userList.get(0).getAge().intValue()); // 查數據庫,應該有5個用戶 Assert.assertEquals(5, userSerivce.getAllUsers()); // 刪除兩個用戶 userSerivce.deleteByName("Tom"); userSerivce.deleteByName("Mike"); // 查數據庫,應該有5個用戶 Assert.assertEquals(3, userSerivce.getAllUsers()); } }
上面介紹的JdbcTemplate
只是最基本的幾個操做,更多其餘數據訪問操做的使用請參考:JdbcTemplate API
經過上面這個簡單的例子,咱們能夠看到在Spring Boot下訪問數據庫的配置依然秉承了框架的初衷:簡單。咱們只須要在pom.xml中加入數據庫依賴,再到application.properties中配置鏈接信息,不須要像Spring應用中建立JdbcTemplate的Bean,就能夠直接在本身的對象中注入使用。
本文的相關例子能夠查看下面倉庫中的chapter3-1
目錄:
若是您以爲本文不錯,歡迎Star
支持,您的關注是我堅持的動力!
歡迎關注個人公衆號:程序猿DD,得到獨家整理的學習資源和平常乾貨推送。
若是您對個人專題內容感興趣,也能夠關注個人博客:didispace.com