Spring Boot實戰(一):只需兩步!Eclipse+Maven快速構建第一個Spring Boot項目構建了第一個Spring Boot項目。html
Spring Boot實戰(二):Spring Boot鏈接MySQL數據庫鏈接了MySQL數據庫。java
本文在以前的基礎上,使用Spring Data Jpa對MySQL數據庫進行CRUD——增長(Create)、查詢(Retrieve)、更新(Update)和刪除(Delete) 操做。spring
JPA是什麼?看看百度怎麼說。JPA是Java Persistence API的簡稱,中文名Java持久層API,是JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。數據庫
JPA的整體思想和現有Hibernate、TopLink、JDO等ORM框架大致一致。總的來講,JPA包括如下3方面的技術:app
JPA支持XML和JDK5.0註解兩種元數據的形式,元數據描述對象和表之間的映射關係,框架據此將實體對象持久化到數據庫表中;框架
用來操做實體對象,執行CRUD操做,框架在後臺替代咱們完成全部的事情,開發者從繁瑣的JDBC和SQL代碼中解脫出來。dom
這是持久化操做中很重要的一個方面,經過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的SQL語句緊密耦合。post
Spirng Data Jpa是spring提供的一套簡化JPA開發的框架,按照約定好的「方法命名規則」寫Dao層接口,就能夠在不寫接口實現的狀況下,實現對數據庫的訪問和操做。學習
在學習的過程當中,查詢了許多資料,我以爲博客園的這篇總結的挺好:spring boot(五):spring data jpa的使用this
下面正式開始CRUD:
在UserController.java中添加方法:
@RequestMapping("/addUser")
@ResponseBody
public User addUser(String userName, String PassWord) {
User user = new User();
user.setUserName(userName);
user.setPassWord(PassWord);
userRepository.save(user);
return user;
}
複製代碼
使用Postman訪問http://localhost:8080//user/addUser?userName=Laplace&PassWord=math :
數據庫裏面增長了一條id爲5,username爲Laplace,password爲math的記錄:
爲了方便查詢,再利用相同的操做插入一些數據。
上一篇已經完成了簡單的findAll和findByUserName。這裏進行一些自定義查詢操做。
Spring data 大部分的SQL均可以根據方法名定義的方式來實現,也支持本身寫SQL語句來查詢。
在SQL的查詢方法上面使用@Query註解,如涉及到刪除和修改在須要加上@Modifying.也能夠根據須要添加 @Transactional 對事物的支持。
例如查詢id大於等於6的記錄,SQL語句:SELECT * FROM USER t WHERE t.id >= 6,這條語句在Navicat中新建查詢中運行是沒有問題的,添加到Dao中倒是有問題的,會拋出異常:
java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List
在Dao中添加:
@Query("SELECT * FROM USER t WHERE t.id >= 6")
List<User> getUser();
複製代碼
這是因爲Jpa沒法自動完成查詢結果到自定義實體的映射。須要改爲下面這個樣子的,寫實體類的路徑,From後面加的不是表的名字,而是對應的實體類的名字。
@Query("SELECT new com.example.demo.domain.User(t.id,t.userName,t.passWord) FROM User t WHERE t.id >= 6")
List<User> getUser();
複製代碼
還須要在實體類User.java中間添加對應的構造方法(與上面SQL語句中的保持一致),纔可以返回實體類的對象的:
public User(Long id, String userName, String passWord) {
super();
this.id = id;
this.userName = userName;
this.passWord = passWord;
}
複製代碼
userController.java 中的內容以下:
@RequestMapping("/getUser")
public List<User> getUser() {
List<User> res = userRepository.getUser();
return res;
}
複製代碼
使用Postman訪問http://localhost:8080//user/getUser :
這是數據庫中的內容:
更新可使用save方法;這裏使用自定義SQL語句進行更新,試用一下@Modifying註解。
Dao:
@Modifying
@Query("UPDATE User u SET u.userName = ?1 WHERE u.id = ?2")
void updateUserNameById(String userName, Long id);
複製代碼
Controller:
@RequestMapping("/updateUserNameById")
@Transactional
public String updateUserNameById(@RequestParam("name") String name, @RequestParam("id") Long id) {
userRepository.updateUserNameById(name, id);
return "更新成功";
}
複製代碼
使用Postman訪問http://localhost:8080//user/updateUserNameById?name=AAAAAA&id=6 :
能夠看到數據庫發生了改變:
根據id刪除記錄,直接在Controller中添加:
@RequestMapping("/deleteUserById")
public String deleteUserById(@RequestParam("id") Long id) {
userRepository.deleteById(id);
return "刪除成功";
}
複製代碼
使用Postman訪問http://localhost:8080//user/deleteUserById?id=11:
能夠完成刪除操做:
本文使用Spring Boot JPA進行數據操做,不難發現,使用JPA能夠大量減小Dao層代碼,提高開發效率。