關於執行效率的問題,附原始碼,請大家給點意見

custer7572發表於2007-04-17
新使用者註冊的時候,得先判斷是否存在這個使用者名稱。那麼有如下的程式碼(我隨手寫的,方法名,類名寫錯之類的暫不考慮)

在業務邏輯類裡,呼叫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;
}
}
}

相關文章