1. 程式人生 > >Springboot 之 JPA對Mysql資料庫的增刪改查

Springboot 之 JPA對Mysql資料庫的增刪改查

本文章來自【知識林】

JPA對資料庫的操作又進行了更為完善的封裝,其實現的功能基本能滿足我們90%的需求。本文章只簡單實現使用者管理的功能以展示JPA對資料庫的相關操作,使用單元測試的方式實現,如果對Springboot的單元測試不清楚的可以參考我的文章《Springboot 之 單元測試》,下面就以我個人對JPA的認識做一些總結:

  • Maven依賴包及自動建表
  • 使用者實體類
@Entity
@Table(name = "t_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private
Integer id; @Column(name = "user_name") private String userName; private String password; @Column(name = "nick_name") private String nickName; private String email; ……省去Get和Set方法…… }
  • 使用者業務介面
/**
 * Created by 鍾述林 [email protected] on 2016/10/19 11:41.
 */
public
interface IUserService extends JpaRepository<User, Integer> { }

注意:要使介面擁有Jpa的功能,只需要將此介面繼承JpaRepository介面即可,JpaRespsitory介面有兩個泛型,第一個:指具體的實體物件User,第二個:指實體物件的主鍵ID的型別Integer

  • 新增資料
@SpringBootTest
@RunWith(SpringRunner.class)
@ActiveProfiles("dev")
public class UserTest {

    @Autowired
    private
IUserService userService; @Test public void testAdd() { User user = new User(); user.setEmail("[email protected]"); user.setNickName("知識林"); user.setPassword("123456"); user.setUserName("zslin"); userService.save(user); } }

注意: 這裡的save方法是從JpaRepository中繼承而來,是屬於Jpa封裝方法之一。

  • 獲取資料
@Test
public void testFind() {
    User user = userService.findOne(1);
    System.out.println("nickName : "+user.getNickName()+", email : "+user.getEmail());
}

注意: 這裡的findOne方法也是從JpaRepository中繼承而來。由於在testAdd方法中添加了一條資料,主鍵Id為1,所以在這裡可以直接在findOne中傳1獲取出相應資料,findOne的引數是物件Id。

執行testFind方法後將得到:nickName : 知識林, email : [email protected]

  • 修改資料
@Test
public void testUpdate() {
    User user = userService.findOne(1);
    user.setNickName("鍾述林");
    userService.save(user);
    System.out.println("nickName : "+user.getNickName()+", email : "+user.getEmail());
}

注意: 這裡的修改資料也是使用save方法,也就是說新增和修改都使用save方法,執行testUpdate方法後將得到:nickName : 鍾述林, email : [email protected]表示修改成功。

  • 刪除資料
@Test
public void testDelete() {
    userService.delete(1);
}

注意:這裡的delete也是繼承於JpaRepository。引數可以傳一個Id值,也可以傳一個數據物件。deleteAll()方法也可以刪除,沒有引數,是屬於清空資料表,一般不會使用。

  • 列表資料

為方便測試列表,先批量新增幾條資料到資料表中:

@Test
public void testAddBatch() {
    for(Integer i=0; i < 5; i++) {
        User user = new User();
        user.setNickName("暱稱"+i);
        user.setUserName("user"+i);
        user.setPassword("pwd"+i);
        user.setEmail("email"+i+"@domain.com");
        userService.save(user);
    }
}

獲取所有資料:

@Test
public void testFindAll() {
    List<User> list = userService.findAll();
    for(User u : list) {
        System.out.println("nickName : "+u.getNickName()+", email : "+u.getEmail());
    }
}

執行testFindAll()方法可以得到:

nickName : 暱稱0, email : email0@domain.com
nickName : 暱稱1, email : email1@domain.com
nickName : 暱稱2, email : email2@domain.com
nickName : 暱稱3, email : email3@domain.com
nickName : 暱稱4, email : email4@domain.com

以上是比較常用且比較簡單的資料庫操作方法,這些方法都是繼承於JpaRepository介面。

這是屬於基礎篇,下一篇將介紹使用自定義方式對資料庫進行修改、刪除和查詢。

本文章來自【知識林】