作Web開發,首先要能將數據渲染到網頁中展現,其次是要獲取數據庫數據展現到視圖層,在前面的文章SpringBoot整合Thymeleaf模板引擎渲染web視圖,咱們實現了從後端數據展現到視圖層,那麼下面咱們經過使用Spring Data Jpa來實現簡單的數據庫增刪改查功能。java
<!--Web開發依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--junit測試依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--jpa依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 引入MySQL鏈接的依賴包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>
由於項目是基於Spring Boot 2.1.9.RELEASE版本的,而我本地使用的Mysql是5.X版本,因此這裏引入mysql依賴的時候添加了版本信息,這樣能夠引入相應的版本,若是不加版本信息將會引入8.X版本的Mysql,可能在運行項目測試出現錯誤。mysql
# 數據庫鏈接信息 spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver # 自動建立表結構的設置 spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop
spring.jpa.properties.hibernate.hbm2ddl.auto
是hibernate的配置屬性,其主要做用是:自動建立、更新、驗證數據庫表結構。該參數的幾種配置以下:git
建立一個User實體,包含id(主鍵)、name(姓名)、age(年齡)屬性,經過ORM框架其會被映射到數據庫表中,因爲配置了hibernate.hbm2ddl.auto
,而且配置的值爲:create-drop,在應用啓動的時候框架會自動去數據庫中建立對應的表,應用中止時則會自動刪除表信息。程序員
package com.w3cjava.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private Integer age; public User() { } public User(String name, int age) { this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
下面針對User實體建立對應的Repository
接口實現對該實體的數據訪問,以下代碼:github
package com.w3cjava.dao; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import com.w3cjava.entity.User; /** * * @class UserRepository * @version 1.0.0 * @author cos * @desc 建立對應的Repository接口實現對該實體的數據訪問 * */ public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); User findByNameAndAge(String name, Integer age); @Query("from User u where u.name=:name") User findUser(@Param("name") String name); }
經過繼承JpaRepository接口,已經實現了基礎的增(save)刪(delete)改(save)查(findAll、findOne),具體能夠查看API文檔,所以開發過程當中,基本的數據訪問層不須要開發者再本身定義。web
項目開發過程當中,每每對數據的訪問都比較複雜,這時候就須要程序員本身定義相對複雜的Sql語句。具體能夠參考API文檔。spring
Spring Data Jpa還提供了經過解析方法名建立查詢,好比上面的代碼:sql
User findByName(String name); User findByNameAndAge(String name, Integer age);
整合Spring Data Jpa所須要的基本類和配置已經準備好,下面進行簡單的單元測試。數據庫
package com.w3cjava.service; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import com.w3cjava.SpringBootSpringDataJpaApplication; import com.w3cjava.dao.UserRepository; import com.w3cjava.entity.User; @RunWith(SpringRunner.class) @SpringBootTest(classes = {SpringBootSpringDataJpaApplication.class}) public class UserServiceTest { @Autowired private UserRepository userRepository; @Test public void test() throws Exception { // 建立10條記錄 userRepository.save(new User("A", 10)); userRepository.save(new User("B", 20)); userRepository.save(new User("C", 30)); userRepository.save(new User("D", 40)); userRepository.save(new User("E", 50)); userRepository.save(new User("F", 60)); userRepository.save(new User("G", 70)); userRepository.save(new User("H", 80)); userRepository.save(new User("I", 90)); userRepository.save(new User("J", 100)); // 測試findAll, 查詢全部記錄 Assert.assertEquals(10, userRepository.findAll().size()); // 測試findByName, 查詢姓名爲FFF的User Assert.assertEquals(60, userRepository.findByName("F").getAge().longValue()); // 測試findUser, 查詢姓名爲FFF的User Assert.assertEquals(60, userRepository.findUser("F").getAge().longValue()); // 測試findByNameAndAge, 查詢姓名爲FFF而且年齡爲60的User Assert.assertEquals("F", userRepository.findByNameAndAge("F", 60).getName()); // 測試刪除姓名爲AAA的User userRepository.delete(userRepository.findByName("A")); // 測試findAll, 查詢全部記錄, 驗證上面的刪除是否成功 Assert.assertEquals(9, userRepository.findAll().size()); } }
Cannot load driver class: com.mysql.jdbc.Driver: https://blog.csdn.net/linmeng...
spring Boot--junit單元測試: https://blog.csdn.net/adminBf...
源碼:03.Spring-Boot-SpringDataJpasegmentfault
歡迎掃面下列二維碼關注「餘弦的自留地」公衆微信號萬物之中,但願至美