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();				
    		}
    	}					
    }
    
  • 相关阅读:
    xpath 获取表单的值
    更改Linux语言环境
    推送证书p12文件转换成pem的命令
    隐藏响应的server,X-Powered-By
    多维数组自定义排序
    Docker:Windows7下使用docker toolbox(1)
    FluentScheduler:开源轻量级定时任务调度架构
    IdentityServer3:.NET开源OpenID和OAuth2架构
    .NET拾忆:FormData文件上传
    正则表达式:各类数值
  • 原文地址:https://www.cnblogs.com/cloudwind2011/p/8810347.html
Copyright © 2011-2022 走看看