導航:首頁 > 凈水問答 > repository過濾

repository過濾

發布時間:2021-01-08 05:10:42

❶ jpa pagingandsortingrepository什麼情況會過濾條件查詢

AppleFramework在數據訪問控制層採用了Spring Data作為這一層的解決方案, 下面就對Spring Data相關知識作一個較為詳細的描述。 一.Spring Data所解決的問題 Spring Data :提供了一整套數據訪問層(DAO)的解決方案, 致力於減少數據訪問層(DAO)的開發量。 它使用一個叫作Repository的介面類為基礎, 它被定義為訪問底層數據模型的超級介面。 而對於某種具體的數據訪問操作,則在其子介面中定義。 public interface Repository { } 所有繼承這個介面的interface都被spring所管理,此介面作為標識介面,功能就是用來控制domain模型的。 Spring Data可以讓我們只定義介面,只要遵循spring data的規范,就無需寫實現類。 二.什麼是Repository? 二.一 Repository(資源庫):通過用來訪問領域對象的一個類似集合的介面, 在領域與數據映射層之間進行協調。這個叫法就類似於我們通常所說的DAO, 在這里,我們就按照這一習慣把數據訪問層叫Repository Spring Data給我們提供幾個Repository,基礎的Repository提供了最基本的數據訪問功能, 其幾個子介面則擴展了一些功能。它們的繼承關系如下: Repository: 僅僅是一個標識,表明任何繼承它的均為倉庫介面類,方便Spring自動掃描識別 CrudRepository: 繼承Repository,實現了一組CRUD相關的方法 PagingAndSortingRepository: 繼承CrudRepository,實現了一組分頁排序相關的方法 JpaRepository: 繼承PagingAndSortingRepository,實現一組JPA規范相關的方法 JpaSpecificationExecutor: 比較特殊,不屬於Repository體系,實現一組JPA Criteria查詢相關的方法 我們自己定義的XxxxRepository需要繼承JpaRepository, 這樣我們的XxxxRepository介面就具備了通用的數據訪問控制層的能力。 二.二 JpaRepository 所提供的基本功能 二.二.一 CrudRepository: 這個介面提供了最基本的對實體類的添刪改查操作 T save(T entity);//保存單個實體 Iterable save(Iterable entities);//保存集合 T findOne(ID id);//根據id查找實體 boolean exists(ID id);//根據id判斷實體是否存在 Iterable findAll();//查詢所有實體,不用或慎用! long count();//查詢實體數量 void delete(ID id);//根據Id刪除實體 void delete(T entity);//刪除一個實體 void delete(Iterable entities);//刪除一個實體的集合 void deleteAll();//刪除所有實體,不用或慎用! 二.二.二 PagingAndSortingRepository 這個介面提供了分頁與排序功能 Iterable findAll(Sort sort);//排序 Page findAll(Pageable pageable);//分頁查詢(含排序功能) 二.二.三 JpaRepository 這個介面提供了JPA的相關功能 List findAll();//查找所有實體 List findAll(Sort sort);//排序 查找所有實體 List save(Iterable entities);//保存集合 void flush();//執行緩存與資料庫同步 T saveAndFlush(T entity);//強制執行持久化 void deleteInBatch(Iterable entities);//刪除一個實體集合 三.Spring data 查詢 三.一 簡單條件查詢:查詢某一個實體類或者集合 按照Spring data 定義的規則,查詢方法以find|read|get開頭 涉及條件查詢時,條件的屬性用條件關鍵字連接,要注意的是:條件屬性以首字母大寫其餘字母小寫為規定。 例如:定義一個Entity實體類 class User{ private String firstname; private String lastname; } 使用And條件連接時,應這樣寫: findByLastnameAndFirstname(String lastname,String firstname); 條件的屬性名稱與個數要與參數的位置與個數一一對應 其他條件關鍵字如下表的定義: Table 三.一. Supported keywords inside method names 三.二 使用JPA NamedQueries (標准規范實現) 這種查詢是標準的JPA規范所定義的,直接聲明在Entity實體類上, 調用時採用在介面中定義與命名查詢對應的method,由Spring Data根據方法名自動完成命名查詢的尋找。 (一)在Entity實體類上使用@NamedQuery註解直接聲明命名查詢。 @Entity @NamedQuery(name = "User.findByEmailAddress", query = "select u from User u where u.emailAddress = ?一") public class User { } 註:定義多個時使用下面的註解 @NamedQueries(value = { @NamedQuery(name = User.QUERY_FIND_BY_LOGIN, query = "select u from User u where u." + User.PROP_LOGIN + " = :username"), @NamedQuery(name = "getUsernamePasswordToken", query = "select new com.aceona.weibo.vo.TokenBO(u.username,u.password) from User u where u." + User.PROP_LOGIN + " = :username")}) (二)在interface中定義與(一)對應的方法 public interface UserRepository extends JpaRepository { List findByLastname(String lastname); User findByEmailAddress(String emailAddress); } 三.三 使用@Query自定義查詢(Spring Data提供的) 這種查詢可以聲明在Repository方法中,擺脫像命名查詢那樣的約束, 將查詢直接在相應的介面方法中聲明,結構更為清晰,這是Spring data的特有實現。 例如: public interface UserRepository extends JpaRepository { @Query("select u from User u where u.emailAddress = ?一") User findByEmailAddress(String emailAddress); } 三.四 @Query與 @Modifying 執行更新操作 這兩個annotation一起聲明,可定義個性化更新操作,例如只涉及某些欄位更新時最為常用,示例如下: @Modifying @Query("update User u set u.firstname = ?一 where u.lastname = ?二") int setFixedFirstnameFor(String firstname, String lastname); 三.5 索引參數與命名參數 (一)索引參數如下所示,索引值從一開始,查詢中 」?X」 個數需要與方法定義的參數個數相一致,並且順序也要一致 @Modifying @Query("update User u set u.firstname = ?一 where u.lastname = ?二") int setFixedFirstnameFor(String firstname, String lastname); (二)命名參數(推薦使用這種方式) 可以定義好參數名,賦值時採用@Param("參數名"),而不用管順序。如下所示: public interface UserRepository extends JpaRepository { @Query("select u from User u where u.firstname = :firstname or u.lastname = :lastname") User findByLastnameOrFirstname(@Param("lastname") String lastname, @Param("firstname") String firstname); } 四. Transactionality(事務) 四.一 操作單個對象的事務 Spring Data提供了默認的事務處理方式,即所有的查詢均聲明為只讀事務,對於持久化,更新與刪除對象聲明為有事務。 參見org.springframework.data.jpa.repository.support.SimpleJpaRepository @org.springframework.stereotype.Repository @Transactional(readOnly = true) public class SimpleJpaRepository implements JpaRepository, JpaSpecificationExecutor { …… @Transactional public void delete(ID id) { delete(findOne(id)); } …… } 對於自定義的方法,如需改變spring data提供的事務默認方式,可以在方法上註解@Transactional聲明 四.二 涉及多個Repository的事務處理 進行多個Repository操作時,也應該使它們在同一個事務中處理,按照分層架構的思想,這部分屬於業務邏輯層,因此,需要在Service層實現對多個Repository的調用,並在相應的方法上聲明事務。 例如: @Service(「userManagement」) class UserManagementImpl implements UserManagement { private final UserRepository userRepository; private final RoleRepository roleRepository; @Autowired public UserManagementImpl(UserRepository userRepository, RoleRepository roleRepository) { this.userRepository = userRepository; this.roleRepository = roleRepository; } @Transactional public void addRoleToAllUsers(String roleName) { Role role = roleRepository.findByName(roleName); for (User user : userRepository.readAll()) { user.addRole(role); userRepository.save(user); } } 5.關於DAO層的規范 5.一對於不需要寫實現類的情況: 定義XxxxRepository 介面並繼承JpaRepository介面, 如果Spring data所提供的默認介面方法不夠用,可以使用@Query在其中定義個性化的介面方法。 5.二對於需要寫實現類的情況: 定義XxxxDao 介面並繼承com.aceona.appleframework.persistent.data.GenericDao 書寫XxxxDaoImpl實現類並繼承com.aceona.appleframework.persistent.data.GenericJpaDao, 同時實現XxxxDao介面中的方法 在Service層調用XxxxRepository介面與XxxxDao介面完成相應的業務邏

閱讀全文

與repository過濾相關的資料

熱點內容
污水處理廠三年規劃目標 瀏覽:630
回收二手過濾機 瀏覽:155
大車濾芯怎麼賣 瀏覽:472
半透膜蔗糖和葡萄糖液面變化 瀏覽:1000
青島市生活污水氨氮吹脫塔哪裡有 瀏覽:775
用過的君子蘭土能否回用 瀏覽:417
機油濾芯可以用什麼代替 瀏覽:634
如何拆鴻芯直飲凈水器 瀏覽:398
自製蒸餾葡萄酒 瀏覽:741
酚醛樹脂專用丁腈橡膠 瀏覽:852
超濾管3k與10k的區別 瀏覽:870
飛利浦和松下空氣凈化器怎麼樣 瀏覽:318
生活污水處理廠用什麼設備 瀏覽:574
不銹鋼蒸餾器操作視頻 瀏覽:138
水處理膜ro膜國內企業 瀏覽:951
波輪洗衣機內桶過濾網 瀏覽:680
珠海濱海社區直飲水機多少錢一台 瀏覽:951
鄭州市污水管網 瀏覽:376
藍瑟空調濾芯在什麼位置 瀏覽:666
什麼時候用凈化器 瀏覽:622