日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

Spring data JPA功能簡介

時間:2020-06-30 22:18:44 類型:JAVA
字號:    

  一、Spring data JPA簡介

  Spring data JPA是Spring在ORM框架,以及JPA規(guī)范的基礎(chǔ)上,封裝的一套JPA應(yīng)用框架,并提供了一整套的數(shù)據(jù)訪問層解決方案。

  二、Spring data JPA的功能

  Spring data JPA的功能非常的強(qiáng)大,這里我們先跳過環(huán)境搭建這一步,來一睹Spring data JPA的“芳容”。

  Spring data JPA提供給用戶使用的,主要有以下幾個接口:

  Repository:僅僅是一個標(biāo)識,表明任何繼承它的均為倉庫接口類,方便Spring自動掃描識別

  CrudRepository:繼承Repository,實現(xiàn)了一組CRUD相關(guān)的方法

  PagingAndSortingRepository:繼承CrudRepository,實現(xiàn)了一組分頁排序相關(guān)的方法

  JpaRepository:繼承PagingAndSortingRepository,實現(xiàn)一組JPA規(guī)范相關(guān)的方法

  JpaSpecificationExecutor:比較特殊,不屬于Repository體系,實現(xiàn)一組JPA Criteria查詢相關(guān)的方法

  三、Spring data JPA的接口

  1、CrudRepository接口

  建立一個Entity類:

  

@Entity
@Table(name="USER") 
public class User { 
  @Id
  @GeneratedValue
  private Integer id;    
  //賬號 
  private String account; 
  //姓名 
  private String name;    
  //密碼 
  private String password;    
  // 郵箱 
  private String email; 
}


  編寫接口,并繼承CrudRepository接口:

public interface UserRepository extends CrudRepository<User, Integer> {    
}

編寫測試類

public class UserRepositoryTest { 
  @Autowired
  private UserRepository dao; 
    
  @Test//保存 
  public void testSave(){ 
    User user = new User(); 
    user.setName("chhliu"); 
    user.setAccount("10000"); 
    user.setEmail("[email protected]"); 
    user.setPassword("123456"); 
    dao.save(user); 
  } 
    
  @Test//批量保存 
  public void testSave1(){ 
    List<User> users = new ArrayList<User>(); 
    User user = new User(); 
    user.setName("tanjie"); 
    user.setAccount("10000"); 
    user.setEmail("[email protected]"); 
    user.setPassword("123456"); 
    users.add(user); 
    user = new User(); 
    user.setName("esdong"); 
    user.setAccount("10000"); 
    user.setEmail("[email protected]"); 
    user.setPassword("123456"); 
    users.add(user); 
    user = new User(); 
    user.setName("qinhongfei"); 
    user.setAccount("10000"); 
    user.setEmail("[email protected]"); 
    user.setPassword("123456"); 
    users.add(user); 
    user = new User(); 
    user.setName("huizhang"); 
    user.setAccount("10000"); 
    user.setEmail("[email protected]"); 
    user.setPassword("123456"); 
    users.add(user); 
    user = new User(); 
    user.setName("caican"); 
    user.setAccount("10000"); 
    user.setEmail("[email protected]"); 
    user.setPassword("123456"); 
    users.add(user); 
    dao.save(users); 
  } 
    
  @Test//更新 
  public void testUpdate(){ 
    User user = dao.findOne(1); 
    user.setPassword("123890");// 要想這樣實現(xiàn)更新的功能,需要在service層加上@Transaction事物注解 
  } 
    
  @Test//刪除 
  public void testDelete(){ 
    dao.delete(2); 
  } 
    
  @Test//查詢所有 
  public void testFindAll(){ 
    List<User> users = (List<User>) dao.findAll(); 
    System.out.println(JSON.toJSONString(users)); 
  } 
    
  @Test//判斷指定的id對象是否存在 
  public void testIsExist(){ 
    boolean isExist = dao.exists(8); 
    System.out.println(isExist); 
  } 
    
  @Test//通過id列表來查詢 
  public void testFindUserByIds(){ 
    List<Integer> listIds = new ArrayList<Integer>(); 
    listIds.add(2); 
    listIds.add(4); 
    listIds.add(7); 
    List<User> users = (List<User>) dao.findAll(listIds); 
    System.out.println(JSON.toJSONString(users)); 
  } 
}

  大家可以看出,到這里,我就只寫了一個接口類,并沒有實現(xiàn)這個接口類,就可以完成基本的CRUD操作。因為這個接口會自動為域?qū)ο髣?chuàng)建增刪改查方法,供業(yè)務(wù)層直接使用。

  該接口的定義如下,總共提供了11個方法,基本上可以滿足簡單的CRUD操作以及批量操作:

@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> { 
  <S extends T> S save(S entity);//保存 
  <S extends T> Iterable<S> save(Iterable<S> entities);//批量保存 
  T findOne(ID id);//根據(jù)id查詢一個對象 
  boolean exists(ID id);//判斷對象是否存在 
  Iterable<T> findAll();//查詢所有的對象 
  Iterable<T> findAll(Iterable<ID> ids);//根據(jù)id列表查詢所有的對象 
  long count();//計算對象的總個數(shù) 
  void delete(ID id);//根據(jù)id刪除 
  void delete(T entity);//刪除對象 
  void delete(Iterable<? extends T> entities);//批量刪除 
  void deleteAll();//刪除所有 
}


<