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


    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();				
    		}
    	}					
    }
    
  • 相关阅读:
    Lambada. 计算和
    adb server version (31) doesn't match this client (39) 解决方案
    python爬虫beautifulsoup4系列2
    python爬虫beautifulsoup4系列1
    利用Python攻破12306的最后一道防线
    python自动化17-JS处理滚动条
    python多线程
    python接口自动化2-发送post请求
    python接口自动化1-发送get请求 前言
    jenkens其实是代码上传工具
  • 原文地址:https://www.cnblogs.com/cloudwind2011/p/8810347.html
Copyright © 2020-2023  润新知