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