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

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