zoukankan      html  css  js  c++  java
  • 使用模板方法模式+私有内部类+匿名类解决各个方法间代码结构类似的问题。

    package org.hibernate.dao;
    
    import org.hibernate.*;
    import org.hibernate.entity.*;
    //使用模板方法模式+私有内部类+匿名类解决各个方法间代码结构类似的问题。
    public class UserDAOImpl implements UserDAO {
    	private abstract class UserDAOTemplate{
    		abstract protected Object operateSession(Session session,Object arg);
    		final public Object operateSessionInTransaction(Object arg){
    			Object result=null;
    			Session session= HibernateUtil.getSession();	
    			Transaction tx = session.beginTransaction();	
    			try{
    				result=operateSession(session,arg);						
    				tx.commit();								
    			} catch(Exception e){
    				e.printStackTrace();
    				tx.rollback();
    				result=null;
    			}finally{
    				HibernateUtil. closeSession();				
    			}
    			return result;
    		}
    	}
    	public void save(User user){
    		new UserDAOTemplate(){
    			protected Object operateSession(Session session,Object arg){
    				session.save(arg);	
    				return null;
    			}
    		}.operateSessionInTransaction(user);
    	}
    	
    	public User findById(int id){	 
    		User user=null;
    		user=(User)new UserDAOTemplate(){
    			protected Object operateSession(Session session,Object arg){
    				return session.get(User.class,(Serializable)arg);		
    			}
    		}.operateSessionInTransaction(id);
    		return user;	
    	}
    	
    	public void delete(User user){
    		new UserDAOTemplate(){
    			protected Object operateSession(Session session,Object arg){	
    				session.delete(arg);	
    				return null;
    			}
    		}.operateSessionInTransaction(user);
    	}					
    	//对比参考用
    	public void update(User user){
    		Session session= HibernateUtil.getSession();	
    		Transaction tx = session.beginTransaction();	
    		try{
    			session.update(user);						
    			tx.commit();								
    		} catch(Exception e){
    			e.printStackTrace();
    			tx.rollback();								
    		}finally{
    		     HibernateUtil. closeSession();				
    		}
    	}					
    }
    
  • 相关阅读:
    构建CMDB的一些启发
    一个NB的安全认证机制
    SQLAlchemy
    Tornado基本使用
    Tornado源码探寻(请求到来)
    Tornado源码探寻(准备阶段)
    Tornado源码探寻(开篇)
    我的个人博客网站
    IDEA/AS快捷键收集&习惯
    ubuntu命令收集
  • 原文地址:https://www.cnblogs.com/cloudwind2011/p/8810347.html
Copyright © 2011-2022 走看看