发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA

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

2007-04-17 14:08
赞助商链接

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

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

2007-04-17 15:26

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

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

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com