SpringBoot快速入門(2)之Spring Data JPA


 


作者:銹逗的大腦
原文鏈接:http://www.cnblogs.com/ocean-yh/p/8358740.html

討論QQ群:151230186


目錄:

 

備注: 此處是基於第一篇文章SpringBoot快速入門(1)之springMVC的基礎上的后續文章,如不知道如何創建一個SpringBoot項目可先參照第一篇文章

 


 

  Spring Data JPA簡介

  Spring Data JPA是Spring Data系列的一部分,可以輕松實現基於JPA的存儲庫。該模塊處理對基於JPA的數據訪問層的增強支持。這使得構建使用數據訪問技術的Spring應用程序變得更加容易。

  實現應用程序的數據訪問層已經有一段時間了。需要編寫太多的樣板代碼來執行簡單的查詢以及執行分頁和審計。Spring Data JPA旨在通過減少實際需要的數量來顯着改進數據訪問層的實現。作為一名開發人員,您可以編寫自己的存儲庫接口,包括自定義查找方法,Spring將自動提供實現。

特征

    • 基於Spring和JPA構建存儲庫的完善支持
    • 支持Querydsl謂詞,從而支持類型安全的JPA查詢
    • 域類的透明審計
    • 分頁支持,動態查詢執行,集成自定義數據訪問代碼的能力
    • @Query在引導時驗證注釋查詢
    • 支持基於XML的實體映射
    • 通過引入基於JavaConfig的存儲庫配置@EnableJpaRepositories

  


 

pom.xml文件引入的jar包

在我們的springBoot項目里引入Spring Data JPA 及 MySql數據庫連接的支持包

 1 <dependencies>
 2     <!-- (默認)SpringBoot核心模塊,包括自動配置支持、日志和YAML -->
 3     <dependency>
 4         <groupId>org.springframework.boot</groupId>
 5         <artifactId>spring-boot-starter</artifactId>
 6     </dependency>
 7     <!-- (默認)SpringBoot測試模塊,包括JUnit、Hamcrest、Mockito -->
 8     <dependency>
 9         <groupId>org.springframework.boot</groupId>
10         <artifactId>spring-boot-starter-test</artifactId>
11         <scope>test</scope>
12     </dependency>
13     <!-- 添加支持web的模塊 -->
14     <dependency>
15         <groupId>org.springframework.boot</groupId>
16         <artifactId>spring-boot-starter-web</artifactId>
17     </dependency>
18     <!-- 添加spring data jpa -->
19     <dependency>
20         <groupId>org.springframework.boot</groupId>
21         <artifactId>spring-boot-starter-data-jpa</artifactId>
22     </dependency>
23     <!-- 添加MySQL數據庫 -->
24     <dependency>
25         <groupId>mysql</groupId>
26         <artifactId>mysql-connector-java</artifactId>
27     </dependency>
28     
29 </dependencies>

 


 

數據庫、日志、jpa利用Hibernate完成自動化的各項配置

在我們的application.properties文件里加上如下各項的相關配置

 1 ########## LOG配置 ##########
 2 logging.path=E:/logs/bootDemo/
 3 logging.level.com.favorites=DEBUG
 4 logging.level.org.springframework.web=INFO
 5 logging.level.org.hibernate=ERROR
 6 
 7 ########## 數據庫配置 ##########
 8 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 9 spring.datasource.url=jdbc:mysql://localhost:3306/demo_test?useUnicode=true&characterEncoding=UTF-8
10 spring.datasource.username=root
11 spring.datasource.password=root
12 
13 ########## jpa利用Hibernate完成自動化的各項配置 ##########
14 # 自動創建|更新|驗證數據庫表結構配置
15 spring.jpa.properties.hibernate.hbm2ddl.auto=update
16 # 指定生成表名的存儲引擎為InneoDB
17 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
18 # 是否打印出自動生產的SQL,方便調試的時候查看
19 spring.jpa.show-sql= true

 


 

Spring Data JPA 的使用Demo

 

編寫model

此處不對JPA進行相關介紹,不了解的朋友可以自行查找相關的資料介紹,這里就直接使用了

 1 import javax.persistence.Column;
 2 import javax.persistence.Entity;
 3 import javax.persistence.GeneratedValue;
 4 import javax.persistence.Id;
 5 
 6 @Entity
 7 public class User {
 8 
 9     @Id
10     @GeneratedValue
11     private Long id;// ID自增長主鍵
12 
13     @Column(nullable = false, unique = true)
14     private String userName;// 用戶名,不為空,不能重復
15     
16     @Column(nullable = false)
17     private String realName;// 真實姓名,不為空
18     
19     @Column(nullable = false)
20     private String password;// 密碼,不為空
21     
22     @Column(nullable = false)
23     private Integer gender;// 性別,不為空
24     
25     public User() {
26         
27     }
28     
29     public User(String userName, String realName, String password, Integer gender) {
30         this.userName = userName;
31         this.realName = realName;
32         this.password = password;
33         this.gender= gender;
34     }
35     
36     public Long getId() {
37         return id;
38     }
39     public void setId(Long id) {
40         this.id = id;
41     }
42     public String getUserName() {
43         return userName;
44     }
45     public void setUserName(String userName) {
46         this.userName = userName;
47     }
48     public String getRealName() {
49         return realName;
50     }
51     public void setRealName(String realName) {
52         this.realName = realName;
53     }
54     public String getPassword() {
55         return password;
56     }
57     public void setPassword(String password) {
58         this.password = password;
59     }
60     public Integer getGender() {
61         return gender;
62     }
63     public void setGender(Integer gender) {
64         this.gender= gender;
65     }
66     
67 }

 

編寫dao

1 import org.springframework.data.jpa.repository.JpaRepository;
2 
3 import com.bootdemo.system.user.model.User;
4 
5 public interface UserDao extends JpaRepository<User, Long> {
6     // Spring Data JPA 為我們簡化了很多查詢SQL,直接通過findBy實體屬性名即可執行相關查詢,多個字段屬性用And/Or連接
7     User findByUserName(String userName);
8 }

 此處如果我們想使用自定義的SQL去查詢或者做其他操作可以在Dao里面這樣寫,比如根據ID更新某個字段

@Query("update User u set u.realName = ?2 where u.id = ?1")
@Modifying
int updateRealNameById(Long id, String realName);

 

編寫service

 service

 1 import java.util.List;
 2 
 3 import com.bootdemo.system.user.model.User;
 4 
 5 public interface UserService {
 6 
 7     User save(User user);
 8     
 9     List<User> findAll();
10     
11     User findOne(String userName);
12     
13     boolean delete(Long id);
14 }

 

 service實現

 1 import java.util.List;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Service;
 5 
 6 import com.bootdemo.system.user.dao.UserDao;
 7 import com.bootdemo.system.user.model.User;
 8 
 9 @Service
10 public class UserServiceImpl implements UserService {
11 
12     @Autowired
13     private UserDao userDao;
14     
15     @Override
16     public User save(User user) {
17         return userDao.save(user);
18     }
19 
20     @Override
21     public List<User> findAll() {
22         return userDao.findAll();
23     }
24 
25     @Override
26     public User findOne(String userName) {
27         return userDao.findByUserName(userName);
28     }
29 
30     @Override
31     public boolean delete(Long id) {
32         userDao.delete(id);
33         return true;
34     }
35 
36 }

 

編寫controller

 1 import java.util.List;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.web.bind.annotation.GetMapping;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.RestController;
 7 
 8 import com.bootdemo.system.user.model.User;
 9 import com.bootdemo.system.user.service.UserService;
10 
11 @RestController
12 @RequestMapping("/user")
13 public class TestUserController {
14     
15     @Autowired
16     private UserService service;
17 
18     @GetMapping("/test")
19     public String getHello() {
20         return "Hello ~ ";
21     }
22     
23     @GetMapping("/save")
24     public String saveUser(String userName) {
25         User user = new User(userName, "測試1", "123456");
26         service.save(user);
27         return "添加成功";
28     }
29     
30     @GetMapping("/query/all")
31     public List<User> findAll() {
32         return service.findAll();
33     }
34     
35     @GetMapping("/query/name")
36     public User findByUserName(String userName) {
37         return service.findOne(userName);
38     }
39     
40     @GetMapping("/delete")
41     public String delete(Long id) {
42         service.delete(id);
43         return "刪除成功";
44     }
45     
46 }

 


 

演示結果

 1. 添加

 2.根據UserName查詢單個

 

 

 3.查詢全部

 

 4.根據ID刪除

 


 

 至此我們的SpringBoot集成Spring Data JPA + MyBatis 的一個簡單Demo就完成了

是不是發現Spring Data JPA 為我們省去了很多SQL語句的編寫呢? 趕緊動手來試試吧 :)

 


 

作者:銹逗的大腦
原文鏈接:http://www.cnblogs.com/ocean-yh/p/8358740.html

如本文有不足之處還望及時指正,討論QQ群:151230186

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責任的權利。 

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM