`
everlxq
  • 浏览: 108611 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

BaseDao BaseDaoHibernate

 
阅读更多
package com.web.base;

import java.io.File;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

/**
 * Generic DAO (Data Access Object) with common methods to CRUD POJOs.
 * 
 * <p>
 * Extend this interface if you want typesafe (no casting necessary) DAO's for
 * your domain objects.
 * 
 * @author <a href="mailto:bwnoll@gmail.com">Bryan Noll</a>
 * @param <T>
 *            a type variable
 * @param <PK>
 *            the primary key for that type
 */
public interface BaseDao<T, PK extends Serializable> {

	/**
	 * Generic method used to get all objects of a particular type. This is the
	 * same as lookup up all rows in a table.
	 * 
	 * @return List of populated objects
	 */
	List<T> getAll();

	/**
	 * Generic method to get an object based on class and identifier. An
	 * ObjectRetrievalFailureException Runtime Exception is thrown if nothing is
	 * found.
	 * 
	 * @param id
	 *            the identifier (primary key) of the object to get
	 * @return a populated object
	 * @see org.springframework.orm.ObjectRetrievalFailureException
	 */
	T get(PK id);

	/**
	 * Checks for existence of an object of type T using the id arg.
	 * 
	 * @param id
	 *            the id of the entity
	 * @return - true if it exists, false if it doesn't
	 */
	boolean exists(PK id);

	/**
	 * Generic method to save an object - handles both update and insert.
	 * 
	 * @param object
	 *            the object to save
	 * @return the persisted object
	 */
	T save(T object);

	/**
	 * Generic method to delete an object based on class and id
	 * 
	 * @param id
	 *            the identifier (primary key) of the object to remove
	 */
	void remove(PK id);
	
	public void removes(PK[] ids);
	
    void remove1(PK id);
	
	public void removes1(PK[] ids);

	/**
	 * Gets all records without duplicates.
	 * <p>
	 * Note that if you use this method, it is imperative that your model
	 * classes correctly implement the hashcode/equals methods
	 * </p>
	 * 
	 * @return List of populated objects
	 */
	List<T> getAllDistinct();

	/**
	 * Find a list of records by using a named query
	 * 
	 * @param queryName
	 *            query name of the named query
	 * @param queryParams
	 *            a map of the query names and the values
	 * @return a list of the records found
	 */
	List<T> findByNamedQuery(String queryName, Map<String, Object> queryParams);
	
	List<T> getByHql(String hql,Object[] objs);
	
	public void updateQuery(final String hql,final Map map);
	
    public List<T> getPageData(final String hql, final Map map, final int page, final int pageSize);
	
	public int getPageSize(final String hql,final Map map);
	
	public List<T> getPageData(final String hql,final Map map);
	
	public  List getAllByHql(String hql,Object[] objs);
	
	public List getBySql(final String sql, Class c);
	
	public BigDecimal getTotalCount(String hql, Map map);
	
	public void saveUploadFile(String eid,File[] files,String[] filesFileName,String[] filesContentType,int[] yxxz);
	
	public void saveUploadFile2(String eid,File[] files,String[] filesFileName,String[] filesContentType,int[] yxxz,String fjlx,String fjlxid);

	public void removes2(PK[] ids,Map session);
}





package com.web.base;

import java.io.File;
import org.apache.struts2.interceptor.SessionAware;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import net.sf.json.JSONObject;

import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import com.web.core.utils.EaModelContent;
import com.web.event.vo.Sjfjb;
import com.web.sys.vo.Changelog;
import com.web.sys.vo.Department;
import com.web.sys.vo.Table;
import com.web.sys.vo.TableColumn;
import com.web.utils.FileUtil;
import com.web.utils.Tools;

public class BaseDaoHibernate<T, PK extends Serializable> extends
		HibernateDaoSupport implements BaseDao<T, PK> {
	/**
	 * Log variable for all child classes. Uses LogFactory.getLog(getClass())
	 * from Commons Logging
	 */
	protected final Log log = LogFactory.getLog(getClass());

	private Class<T> persistentClass;

	/**
	 * Constructor that takes in a class to see which type of entity to persist
	 * 
	 * @param persistentClass
	 *            the class type you'd like to persist
	 */
	public BaseDaoHibernate(final Class<T> persistentClass) {
		this.persistentClass = persistentClass;
	}

	/**
	 * {@inheritDoc}
	 */
	@SuppressWarnings("unchecked")
	public List<T> getAll() {
		return super.getHibernateTemplate().loadAll(this.persistentClass);
	}

	/**
	 * {@inheritDoc}
	 */
	@SuppressWarnings("unchecked")
	public List<T> getAllDistinct() {
		Collection result = new LinkedHashSet(getAll());
		return new ArrayList(result);
	}

	/**
	 * {@inheritDoc}
	 */
	@SuppressWarnings("unchecked")
	public T get(PK id) {
		T entity = (T) super.getHibernateTemplate().get(this.persistentClass,
				id);
// if (entity == null) {
// log.warn("Uh oh, '" + this.persistentClass + "' object with id '"
// + id + "' not found...");
// throw new ObjectRetrievalFailureException(this.persistentClass, id);
// }

		return entity;
	}

	/**
	 * {@inheritDoc}
	 */
	@SuppressWarnings("unchecked")
	public boolean exists(PK id) {
		T entity = (T) super.getHibernateTemplate().get(this.persistentClass,
				id);
		return entity != null;
	}

	/**
	 * {@inheritDoc}
	 */
	@SuppressWarnings("unchecked")
	public T save(T object) {
		String type=EaModelContent.OPERATE_INSERT;
		BaseVo bv=(BaseVo)object;
		if(bv!=null&&bv.getId()!=null)
			type=EaModelContent.OPERATE_UPDATE;
		
		T entity = (T) super.getHibernateTemplate().merge(object);
		
		saveLog((BaseVo)entity, type);
		return entity;
	}

	/**
	 * {@inheritDoc}
	 */
	public void remove(PK id) {
		T entity = this.get(id);
		if(entity!=null)
			super.getHibernateTemplate().delete(entity);

		BaseVo bv=(BaseVo)entity;
		saveLog(bv,EaModelContent.OPERATE_DELETE);
	}	
	public void removes(PK[] ids) {
		for(PK id:ids){
			remove(id);
		}
	}
	public void removes2(PK[] ids,Map session) {
		Map map = new HashMap();
		String hql = "from PK t where t.aid=:id ";
		List<Department> departments = (List<Department>) session.get("departments");
		for(PK id:ids){
			map.put("id", id);
			Department d=(Department) super.getHibernateTemplate().load(hql,(Serializable) map);
		departments.remove(d);
		}
		
	}


	public void remove1(PK id) {
		String hql="update "+this.persistentClass.getName().toString()+" t set t.remove=1 where t.id=:id";
		Map map=new HashMap();
		map.put("id", id);
		updateQuery(hql,map);
		
		T entity = this.get(id);
		BaseVo bv=(BaseVo)entity;
		saveLog(bv,EaModelContent.OPERATE_DELETE1);
	}
	public void removes1(PK[] ids) {
		String hql="update "+this.persistentClass.getName().toString()+" t set t.remove=1 where t.id in (:ids)";
		Map map=new HashMap();
		map.put("ids", ids);
		updateQuery(hql,map);		
	}

	public void saveLog(BaseVo bv, String operateType) {
		String classname = persistentClass.getName();
		Table table = EaModelContent.logTableMap.get(classname);
		Date nowdate = Tools.getNowDate();
		try {
			if (table != null) {
				JSONObject json = new JSONObject();
				List<TableColumn> tableColumnList = table.getTableColumnList();
				if (tableColumnList != null) {
					for (TableColumn column : tableColumnList) {
						Object value = PropertyUtils.getProperty(bv, column.getAttributename());
						json.put(column.getName(), value);

					}
				}				
				HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
				Changelog log = new Changelog();
				log.setRequestUrl(request.getRequestURI());
				log.setOperateType(operateType);
				log.setCreated(nowdate);
				log.setCreatedby(bv.getUpdatedby());
				log.setInfo(json.toString());
				Object pk = PropertyUtils.getProperty(bv, "id");
				if (pk != null)
					log.setPk((Long) pk);
				if (StringUtils.isNotEmpty(table.getBupk())) {
					Object buPk = PropertyUtils
							.getProperty(bv, table.getBupk());
					if (buPk != null)
						log.setBuPk(buPk.toString());
				}
				log.setTableId(table.getId());
				getHibernateTemplate().save(log);
			}
		} catch (Exception e) {
			logger.error("插入操作日志异常", e);
			e.printStackTrace();
		}
	}

	/**
	 * {@inheritDoc}
	 */
	@SuppressWarnings("unchecked")
	public List<T> findByNamedQuery(String queryName,
			Map<String, Object> queryParams) {
		String[] params = new String[queryParams.size()];
		Object[] values = new Object[queryParams.size()];
		int index = 0;
		Iterator<String> i = queryParams.keySet().iterator();
		while (i.hasNext()) {
			String key = i.next();
			params[index] = key;
			values[index++] = queryParams.get(key);
		}
		return getHibernateTemplate().findByNamedQueryAndNamedParam(queryName,
				params, values);
	}
	
	@SuppressWarnings("unchecked")
	public List<T> getByHql(String hql, Object[] objs) {
		return getHibernateTemplate().find(hql, objs);
	}
	
	public void updateQuery(final String hql,final Map map) {
		try {
			this.getHibernateTemplate().execute(new HibernateCallback() {
				public Object doInHibernate(Session session)
						throws SQLException, HibernateException {
					try {
						Query query = session.createQuery(hql).setProperties(map);
						query.executeUpdate();
						session.close();
						return null;
					} catch (Exception e) {
						session.close();
						return null;
					}
				}
			});
		} catch (RuntimeException re) {
			throw re;
		}
	}
	
	@SuppressWarnings("unchecked")
	public List<T> getPageData(final String hql,final Map map,final int page,final int pageSize){
		List<T> list=getHibernateTemplate().executeFind(new HibernateCallback()
		{
			public Object doInHibernate(Session session) throws HibernateException,SQLException
			{
				int pageNumber=page;
				if(pageNumber==0)
					pageNumber=1;
				List result=session.createQuery(hql).setProperties(map).setFirstResult((pageNumber-1)*pageSize).setMaxResults(pageSize).list();
				return result;
			}			
		});
		return list;
	}
	
	@SuppressWarnings("unchecked")
	public List<T> getPageData(final String hql,final Map map){
		List<T> list=getHibernateTemplate().executeFind(new HibernateCallback()
		{
			public Object doInHibernate(Session session) throws HibernateException,SQLException
			{
				List result=session.createQuery(hql).setProperties(map).list();
				return result;
			}			
		});
		return list;
	}

	public int getPageSize(final String hql,final Map map) {
		List list=getHibernateTemplate().executeFind(new HibernateCallback()
		{
			public Object doInHibernate(Session session) throws HibernateException,SQLException
			{   
				String hq = hql;
				HashMap hm = (HashMap)map;
				List result=session.createQuery(hql).setProperties(map).list();
				return result;
			}			
		});
		if(list!=null&&list.size()>0)
			return Integer.parseInt(list.get(0).toString());
		else return 0;
	}

	public List getAllByHql(String hql, Object[] objs) {
		return getHibernateTemplate().find(hql, objs);
	}

	public List getBySql(final String sql,Class c) {
		return this.getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery(sql).addEntity(c).list();
	}
	public BigDecimal getTotalCount(final String hql, final Map map) {
		List list=getHibernateTemplate().executeFind(new HibernateCallback()
		{
			public Object doInHibernate(Session session) throws HibernateException,SQLException
			{
				List result=session.createQuery(hql).setProperties(map).list();
				return result;
			}			
		});
		if(list!=null&&list.size()>0)
			return new BigDecimal(list.get(0).toString());
		else return null;
	}

	public void saveUploadFile(String eid, File[] files, String[] filesFileName, String[] filesContentType,int[] yxxz) {
		String path = EaModelContent.uploadfilepath+File.separator+eid;  // 写到指定的路径中   
		File dir = new File(path);  //如果指定的路径没有就创建
		if (!dir.exists()) { 
			dir.mkdirs();
		} 		
		if(files==null)
			return;
		for(int i=0;i<files.length;i++){
			try{
				if(files[i]!=null){
					String wjkzm=FileUtil.getExtensionName(filesFileName[i]);
					String cclj=Tools.getNowTime()+"-"+Tools.getRandom(System.nanoTime())+"."+wjkzm;
					String wjdx=FileUtil.getFileSize(files[i]);
					FileUtils.copyFile(files[i], new File(dir, cclj));
					
					Sjfjb sjfjb=new Sjfjb();
					sjfjb.setEid(eid);
					sjfjb.setWjmc(filesFileName[i]);
					sjfjb.setWjkzm(wjkzm);
					sjfjb.setContenttype(filesContentType[i]);
					sjfjb.setCclj(cclj);
					sjfjb.setWjdx(wjdx);
					sjfjb.setYxxz(yxxz[i]);
					//sjfjb.setXzcs(xzcs);
					getHibernateTemplate().save(sjfjb);
				}				
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}
	
	public void saveUploadFile2(String eid, File[] files, String[] filesFileName, String[] filesContentType,int[] yxxz,String fjlx,String fjlxid) {
		String path = EaModelContent.uploadfilepath+File.separator+eid;  // 写到指定的路径中   
		File dir = new File(path);  //如果指定的路径没有就创建
		if (!dir.exists()) { 
			dir.mkdirs();
		} 		
		if(files==null)
			return;
		for(int i=0;i<files.length;i++){
			try{
				if(files[i]!=null){
					String wjkzm=FileUtil.getExtensionName(filesFileName[i]);
					String cclj=Tools.getNowTime()+"-"+Tools.getRandom(System.nanoTime())+"."+wjkzm;
					String wjdx=FileUtil.getFileSize(files[i]);
					FileUtils.copyFile(files[i], new File(dir, cclj));
					
					Sjfjb sjfjb=new Sjfjb();
					sjfjb.setEid(eid);
					sjfjb.setWjmc(filesFileName[i]);
					sjfjb.setWjkzm(wjkzm);
					sjfjb.setContenttype(filesContentType[i]);
					sjfjb.setCclj(cclj);
					sjfjb.setWjdx(wjdx);
					sjfjb.setYxxz(yxxz[i]);
					//sjfjb.setXzcs(xzcs);
					sjfjb.setFjlx(fjlx);
					sjfjb.setFjlxid(fjlxid);
					getHibernateTemplate().save(sjfjb);
				}				
			}catch(IOException e){
				e.printStackTrace();
			}
		}
	}

}

分享到:
评论

相关推荐

    basedao_basedao数据库_

    "基于BaseDao的手动数据库操作"是一个常见的话题,尤其在Java开发中。BaseDao是一种设计模式,它通常被用来作为数据库访问对象(DAO)的基础,用于封装数据库的基本CRUD(创建、读取、更新、删除)操作。这种模式...

    NC65通过BaseDAO操作数据库

    NC65通过BaseDAO操作数据库,包含接口类及接口实现类: /** * 获取baseDAO * @return */ public BaseDAO getBaseDAO() { if(baseDAO == null){ baseDAO = new BaseDAO(); } return baseDAO; } public ...

    hibernate>>BaseDAO

    `BaseDAO`是许多项目中常见的一种设计模式,它代表了数据访问对象(Data Access Object)的基础类,用于封装对数据库的通用操作。现在我们来深入探讨`hibernate`中的`BaseDAO`及其相关知识点。 首先,DAO设计模式是...

    基于hibernate的baseDao

    **基于Hibernate的BaseDAO** 在Java企业级开发中,数据访问层(DAO,Data Access Object)是连接业务逻辑层和数据库的重要桥梁。BaseDAO是一种通用的设计模式,它封装了Hibernate框架的基本操作,使得业务逻辑层...

    常用的BaseDAO及其实现

    "常用的BaseDAO及其实现" BaseDAO是Java中一种常用的数据访问对象(DAO),它提供了统一的数据访问接口,封装了数据访问的基本操作。BaseDAO通常是通过继承HibernateDaoSupport类实现的。 BaseDAO的主要功能包括:...

    java泛型BaseDao与BaseService

    在Java开发中,BaseDao和BaseService是常见的设计模式,用于实现数据访问层(DAO)和业务逻辑层(Service)的抽象基类。通过结合泛型,我们可以创建更通用、灵活的代码,减少冗余并提高代码质量。 首先,我们来理解...

    SpringBoot_BaseDao.zip

    "SpringBoot_BaseDao.zip"这个压缩包文件显然与SpringBoot相关的数据库操作有关,特别是关于BaseDao的基础使用和实现。在Java开发中,Dao(Data Access Object)层是负责处理数据访问的,通常用于与数据库进行交互。...

    mybatis basedao

    MyBatis BaseDAO 是一种基于 MyBatis 框架的工具类库,它旨在简化数据库操作,通过封装常见的CRUD(Create、Read、Update、Delete)方法,为开发者提供便利,减少重复代码,提高开发效率。在Java Web 开发中,...

    ssh+baseDao实现分页

    在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而BaseDao是常用于数据访问层的一个基类设计。本话题主要围绕如何利用SSH框架结合BaseDao实现分页功能来展开。 首先,让我们了解...

    Spring声明式事务及BaseDao完整版

    本篇将重点讲解Spring的声明式事务管理和BaseDao的设计与实现。 一、Spring声明式事务管理 1. **什么是事务**:事务是数据库操作的基本单元,它保证了数据的一致性和完整性。一个事务中的所有操作要么全部成功,...

    java BaseDao

    在Java编程语言中,BaseDao(基础数据访问对象)是一个常见的设计模式,它为数据库操作提供了一种统一的接口。BaseDao通常包含了CRUD(创建、读取、更新、删除)的基本方法,使得开发者可以方便地对数据库进行操作,...

    企业通用BaseDao方法集

    在企业级软件开发中,通用BaseDao方法集是提高代码复用性和开发效率的重要工具。BaseDao(Base Data Access Object)通常是一个基类,它包含了数据库操作的基本方法,供其他具体的DAO类继承使用。BaseDao的设计理念...

    java公共类basedao

    这个是一个公共的basedao类。需要使用的话直接复制。内容看看就明白了

    BaseDao的封装

    在IT行业中,数据库操作是应用程序的核心部分,而`BaseDao`的封装则是一种常见的设计模式,用于简化数据库访问层(DAO)的实现。这个模式的主要目的是提高代码的可复用性和可维护性,减少重复的SQL操作代码。下面...

    hibernate BASEDAO

    在Java的持久化框架Hibernate中,BaseDAO(Base Data Access Object)是一种常见的设计模式,用于封装数据库操作,提供一套标准的方法来实现CRUD(Create、Read、Update、Delete)操作。这种模式使得业务层可以更加...

    jdbcBaseDao

    `jdbcBaseDao` 是一个基于Java的数据库访问层基础类,它封装了JDBC(Java Database Connectivity)的一些常见操作,如增、删、改、查等,旨在简化数据库交互过程,提高代码的可读性和可维护性。对于初学者来说,理解...

    dbutils封装ORM 实现BaseDAO

    `BaseDAO` 的封装则是一种常见的设计模式,用于简化数据访问对象(DAO)的实现,使得业务代码更加简洁、可维护。 `dbutils` 主要包含以下几个核心概念和功能: 1. **QueryRunner**: QueryRunner类是dbutils的主要...

    SSH集成查询分页处理BaseDao

    在标题提到的"SSH集成查询分页处理BaseDao"中,我们主要关注的是如何在SSH框架下实现数据的分页查询。 分页是大型Web应用中必不可少的功能,它能够帮助用户更有效地浏览和管理大量数据。在这个场景中,"BaseDao...

    基于SpringJDBC的BaseDAO

    ### 基于Spring JDBC的BaseDAO实现与应用 #### 概述 在Java开发领域,尤其是企业级应用开发中,持久层框架是至关重要的组件之一。Spring框架提供了多种方式来处理数据库操作,其中Spring JDBC模块是轻量级且功能...

    基于hibernate封装的BaseDao

    基于hibernate封装的BaseDao,有完整的增删改查,分页,执行hql sql 方法 约 20个方法,详情地址 https://blog.csdn.net/qq_41861261/article/details/85595872

Global site tag (gtag.js) - Google Analytics