关于运行效率的问题,附源码,请大家给点意见

07-04-17 custer7572

新用户注册的时候,得先判断是否存在这个用户名。那么有如下的代码(我随手写的,方法名,类名写错之类的暂不考虑)

在业务逻辑类里,调用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;
}
}
}

banq
2007-04-17 15:26

使用Open Session in view (OSIV)模式 但是也有优缺点。

http://www.jdon.com/jivejdon/thread/22374.html