JPA註解項目開發總結


1.jpa開發,只要dao層繼承JpaRepository接口,xml文件配置jpa註解驅動,spring會自動把實現此接口的類註冊爲一個bean對象。

2.用戶下線,清除session,由於session中也可能存在其它對象,所以直接使用invalidate方法使用session失效

3.註解開發的時候,攔截器返回login方法,必須要配置全局結果集。
4.返回json結果集時,有自定義攔截器,package要繼承json-default,在action中使用自定義的名字,因爲要使用包中自定義的攔截器功能。
5.jpa屬性查詢需要符合一定的規則(findby方法)。query註解查詢可以自定義查詢語句,但是必須要加上modifying註解,因爲實現類默認是隻讀的。

6.JpaRepository接口底層真正的實現類是SimpleJpaRepository,默認是隻讀。只需要在service層開啓註解@Transactional即可。

底層原理:

@Transactional(readOnly = true)

public class SimpleJpaRepository<T, ID extends Serializable> implements JpaRepository<T, ID>


7.如果修改單個屬性比如用戶密碼或者用戶名,有兩種方法。
①快照更新:快照更新先查詢變成持久態,然後設置屬性

②query註解查詢:實現JpaRepository接口,在方法上增加查詢語句(即更新語句),語句可以使用jpa佔位符(1,2等,注意參數的順序)


Query註解編寫語句,其參數是JPQL語句。(類似與Hibernate的HQL或SQL)。

8.web層action註解:

①交給spring管理:註冊爲bean對象 @Controller(名稱)

        ②繼承包名@ParentPackage("自定義包名) 

③命名空間@Namespace("/") 

④多例@Scope("prototype")


9.在oracle中null的值會引發一些不必要的問題儘量避免。項目中的狀態值可以直接在實體類設置初始化值(0或者1)


10.web層開發步驟(這些步驟是死的):
①接收參數(模型驅動或者屬性驅動來封裝,所以只剩下兩步)
②調用業務層處理業務(調用service層處理,封裝數據...)
③響應頁面(返回結果集)

11.ctrl+t或者F4快速查看繼承關係,提高開發效率

12.jpa註解分頁:直接調用底層的public Page<T> findAll(Pageable pageable) 方法,只需要在action中傳入接口實現類即可。

Pageable pageable=new PageRequest(page-1, rows);

注意jpa中的page是從0開始的,page指的是當前頁,rows指的是每頁顯示的最大記錄數,PageRequest是實現類。


只需要接收頁面的兩個參數即可,一個是當前頁,一個是每頁顯示的最大數。


getTotalElements()方法:獲取總的記錄數
List<T> getContent()方法:獲取當前頁的數據列表。

分頁都需要查詢兩次,一次是總記錄數,一次是結果集。只不過底層封裝了,所以只需要查詢一次即可。

13.返回json結果集方法:
①業務處理
②封裝json數據
③壓入棧頂
④響應頁面

每個json對象就是一條記錄。


14.jpa的save方法有保存和修改的方法。如果有id的話,就查詢數據,沒有id那麼就新增數據。(id很重要,當後臺沒有id的時候需要自己手動加上隱藏域,這個可以通過debug和fireBug進行調試)


15.js拼接字符串進行批量修改:
var arry=new Array();
//row是一個字符串數組
$(rows).each(function(){
//push方法是 向數組的末尾添加一個或更多元素
arry.push(this.id);
})
//join方法是把數組轉換成一個字符串
var ids=arry.join();

16.獲取頁面參數方法

①屬性驅動獲取,設置set方法

②傳統方式:servletActionContext.getRequest.getParameter("參數")獲取


17.懶加載的問題解決方法:在不需要查詢的實體類的get方法上加上註解@JSON(serialize=false)進行排除或者在xml中配置OpenSessionInView。(存在效率問題)

OpenSessionInView機制:讓會話在請求結束之後關閉,延遲了session關閉,需要在web.xml中配置。

在request過程中維持session。延遲session的關閉,直到request結束,再自動關閉session,也就是說,直到表現層的數據全部加載完畢,再關閉Session。
注意(副作用): 如果沒有被事務管理的方法, OpenSessionInViewFilter 會將這些方法的事務變爲 readOnly 的 !
如果要做添加功能,按道理它是可寫的方法,但是這裏只會readOnly只讀的。


18.jquery的form表單沒有reset方法,需要調用Form表單的reset( )方法,$("#表單id").get(0).reset();


19.Oracle語句優化:

1.儘量避免使用*號,*號是全字段掃描,查詢效率低。
SQL優化:(where條件特別多的情況下,就有效果了)
對於and,應該儘量把假的放到右邊。
對於or,應該儘量把真的放到右邊。
SELECT COUNT(1) FROM xxx;
統計的是字符是1的這一列,效率高(原因,這一列只有一個字符,運算的時候,數據流很小,而且是固定列)


20.項目優化:
①action的常量:可以直接優化爲SUCCESS,LOGIN等,因爲字符串會在常量池中佔用,並不會銷燬。比如json的常量可以抽取到BaseAction中自定義常量來使用。

②公共代碼直接抽取

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章