1. SpringDataJPA的保存和更新操作
1.1 環境搭建和數據來源
參考上一篇博客SpringDataJPA分頁
1.2 操作
其實在SpringDataJPA中,保存和更新都使用的是 save(S s)方法,下面我們看demo.
我在user_info
表中添加個用戶Helena,然後修改其用戶名爲Helena1.
1.2.1 添加用戶Helena
@Test
void saveUser(){
User user = new User();
user.setUserName("Helena");
user.setPassword("123456");
user.setPhone("13110477888");
user.setEmail("[email protected]");
User addUser = userRepository.save(user);//更新操作
log.info("addUser={}",addUser);
}
輸出爲:
Hibernate: insert into user_info (email, password, phone, user_name) values (?, ?, ?, ?)
addUser=User(id=7, userName=Helena, password=123456, phone=13110477888, email=xxx@126.com)
爲了觀看方便,我刪除了日誌裏面的2020-04-29 22:52:42.902 INFO 12792 --- [ main] c.s.service.impl.UserServiceImplTest :
1.2.2 更新用戶Helena爲Helena1
@Test
void updateUser(){
User user = userRepository.findById(7).orElse(null);
user.setUserName("Helena1");
User updateUser = userRepository.save(user);//更新操作
log.info("updateUser={}",updateUser);
}
輸出爲:
Hibernate: select user0_.id as id1_0_0_, user0_.email as email2_0_0_, user0_.password as password3_0_0_, user0_.phone as phone4_0_0_, user0_.user_name as user_nam5_0_0_ from user_info user0_ where user0_.id=?
Hibernate: select user0_.id as id1_0_0_, user0_.email as email2_0_0_, user0_.password as password3_0_0_, user0_.phone as phone4_0_0_, user0_.user_name as user_nam5_0_0_ from user_info user0_ where user0_.id=?
Hibernate: update user_info set email=?, password=?, phone=?, user_name=? where id=?
updateUser=User(id=7, userName=Helena1, password=123456, phone=13110477888, email=xxx@126.com)
1.3 總結
由此可見,SpringDataJPA的添加和更新都是save(S s)
,它是根據主鍵去數據庫查詢:如果數據庫不存在這條數據,就會執行保存(即將這條數據插入到數據庫)
;如果數據庫存在這條數據,就會根據主鍵去更新這條數據