關於執行效率的問題,附原始碼,請大家給點意見
新使用者註冊的時候,得先判斷是否存在這個使用者名稱。那麼有如下的程式碼(我隨手寫的,方法名,類名寫錯之類的暫不考慮)
在業務邏輯類裡,呼叫DAO類,先後開啟並關閉2次session,這樣的程式碼雖然簡潔明瞭,但會降低程式執行的效率,當然,把邏輯程式碼寫在DAO裡,讓一個session去做驗證和插入兩件事,顯然不是一個好方法,因為邏輯經常要變動的,有沒有什麼好的方法可以解決呢?
servlet類--RegServlet.java
public class RegServlet extends HttpServlet{
public doPost(HttpSerlevtRequest request,HttpServletResponse response){
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
User user = new User(username,pwd);
if(UserManager.addNew(user)){
reponse.sendreciderict("success.html");
}else{
reponse.sendreciderict("error.html");
}
}
}
//業務邏輯處理類
class UserManager{
public static boolean addNew(User user){
//先進行有沒有這個使用者的存在的判斷,第一次操作開啟並關閉session
User temp = UserDAO.loadUserByName(user.getName());
if(temp!=null){
return false;
}
//再進行插入操作,第二次操作開啟並關閉session
return UserDAO.save();
}
}
//持久層類
class UserDAO{
//為簡單,假設username就是主鍵,透過主鍵查詢
public static UserDAO loadUserByName(String username){
Session session = null;
Transaction tx =null;
User temp = null;
try{
session = HibernateUtil.createSession();
tx = session.beginTransaction();
temp = (User)session.load(username);
tx.commit();
}catch(Exception e){
if(tx!=null){
tx.rollback();
}
}finally{
HibernateUtil.closeSession();
return temp ;
}
}
//持久化儲存物件
public static boolean save(User user){
Session session = null;
Transaction tx =null;
boolean r= false;
try{
session = HibernateUtil.createSession();
tx = session.beginTransaction();
session.save(user);
tx.commit();
r = true;
}catch(Exception e){
if(tx!=null){
tx.rollback();
}
}finally{
HibernateUtil.closeSession();
return r;
}
}
}
在業務邏輯類裡,呼叫DAO類,先後開啟並關閉2次session,這樣的程式碼雖然簡潔明瞭,但會降低程式執行的效率,當然,把邏輯程式碼寫在DAO裡,讓一個session去做驗證和插入兩件事,顯然不是一個好方法,因為邏輯經常要變動的,有沒有什麼好的方法可以解決呢?
servlet類--RegServlet.java
public class RegServlet extends HttpServlet{
public doPost(HttpSerlevtRequest request,HttpServletResponse response){
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
User user = new User(username,pwd);
if(UserManager.addNew(user)){
reponse.sendreciderict("success.html");
}else{
reponse.sendreciderict("error.html");
}
}
}
//業務邏輯處理類
class UserManager{
public static boolean addNew(User user){
//先進行有沒有這個使用者的存在的判斷,第一次操作開啟並關閉session
User temp = UserDAO.loadUserByName(user.getName());
if(temp!=null){
return false;
}
//再進行插入操作,第二次操作開啟並關閉session
return UserDAO.save();
}
}
//持久層類
class UserDAO{
//為簡單,假設username就是主鍵,透過主鍵查詢
public static UserDAO loadUserByName(String username){
Session session = null;
Transaction tx =null;
User temp = null;
try{
session = HibernateUtil.createSession();
tx = session.beginTransaction();
temp = (User)session.load(username);
tx.commit();
}catch(Exception e){
if(tx!=null){
tx.rollback();
}
}finally{
HibernateUtil.closeSession();
return temp ;
}
}
//持久化儲存物件
public static boolean save(User user){
Session session = null;
Transaction tx =null;
boolean r= false;
try{
session = HibernateUtil.createSession();
tx = session.beginTransaction();
session.save(user);
tx.commit();
r = true;
}catch(Exception e){
if(tx!=null){
tx.rollback();
}
}finally{
HibernateUtil.closeSession();
return r;
}
}
}
相關文章
- 關於程式碼如何執行的五個問題
- 關於ERP,中臺和低程式碼,我的幾點意見
- 關於js執行緒問題的解讀JS執行緒
- 關於物件導向的方法並行執行的問題物件並行
- 請教個問題執行 httprunner 遇到的問題HTTP
- 關於原始碼防洩密的本質問題原始碼
- 關於原始碼防洩漏的本質問題原始碼
- 有關程式碼執行效率提升的小例子
- [諮詢問題] 有關 Allure 報告的技術問題,希望大家給點思路和具體的實現方法。
- 關於使用JupyterNotebook執行程式碼執行到一半會閃退的問題行程
- 有個關於多執行緒的識別問題執行緒
- 關於非同步AJAX請求執行速度過快問題非同步
- 請問大家如何進行提效?
- 關於ImageView的幾個常見問題View
- MySQL關於事務常見的問題MySql
- J2SE - 關於SimpleDateFonnat的執行緒安全問題執行緒
- 關於 AppCrawler 執行過程中的幾個小問題APP
- 關於痛經問題, 送給 IT 女同胞的關懷。
- 最近讀了點 nsq 的原始碼,寫了兩篇文章給大家分享下。原始碼
- Mybatis【2.2】-- Mybatis關於建立SqlSession原始碼分析的幾點疑問?MyBatisSQLSession原始碼
- 關於HTTP和HTTPS常見問題HTTP
- 關於CleanMyMac常見問題與解答Mac
- 關於 Angular Universal 應用執行時需要 Browser API 的問題AngularAPI
- 關於MySQL的知識點與面試常見問題都在這裡MySql面試
- 關於如何看原始碼的一點思考原始碼
- 關於程式碼簽名證書10個常見問題
- JDk1.7 HashMap原始碼解析——執行緒安全問題JDKHashMap原始碼執行緒
- 回覆關於原始碼沙盒防洩密的四個問題原始碼
- 多執行緒相關問題執行緒
- 關於執行緒池的面試題執行緒面試題
- python關於執行緒的一點介紹Python執行緒
- 關於比特幣最大的問題:何時見頂?比特幣
- Java面試中,一些常見的有關多執行緒問題!Java面試執行緒
- api 介面欄位規範的問題,請教大家API
- fastapi 關於執行緒池、同步、非同步的問題解答彙總ASTAPI執行緒非同步
- 關於在request請求時,處理請求引數的問題
- 這次給大家帶來複雜點的ajax請求該如何破?
- 關於Oracle災備書籍的意見徵集Oracle
- 關於vue請求laravel介面跨域問題VueLaravel跨域