数据查询

原创 2016年08月31日 09:32:12

package common.interfaces.impl;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.hikvision.test.usermanager.common.interfaces.BaseDao;

/**
 * Dao超类
 * @author shenjingyi
 *
 */
public class BaseDaoImpl extends HibernateDaoSupport implements BaseDao {

	/**
	 * 添加一条数据
	 */
	public boolean add(Object obj) {
		try {
			getHibernateTemplate().save(obj);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 删除一条数据
	 */
	public boolean delete(Object obj) {
		try {
			getHibernateTemplate().delete(obj);
			return true;
		} catch (Exception e) {
			return false;
		}
	}
	
	/**
	 * 删除一组数据
	 */
	public boolean deleteAll(List<?> list) {
		try {
			getHibernateTemplate().deleteAll(list);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 通过主键删除一条数据
	 */
	@SuppressWarnings("unchecked")
	public boolean deleteById(Class model, int id) {
		Object obj = findById(model, id);
		if (obj == null) {
			return false;
		} else {
			getHibernateTemplate().delete(obj);
			return true;
		}
	}

	/**
	 * 获得所有数据
	 */
	@SuppressWarnings("unchecked")
	public List<?> findAll(Class model) {
		return getHibernateTemplate().find("from " + model.getSimpleName());
	}

	/**
	 * 通过id获得对应的那条数据
	 */
	@SuppressWarnings("unchecked")
	public Object findById(Class model, int id) {
		return getHibernateTemplate().get(model.getName(), id);
	}

	/**
	 * 通过单属性获得对应的所有数据
	 */
	@SuppressWarnings("unchecked")
	public List<?> findByProperty(Class model, String propertyName,
			Object propertValue) {
		String query = "from " + model.getSimpleName() + " as m where m." + propertyName
			+ "=?";
		System.out.println("*********" + query + "***********" + propertValue);
		return getHibernateTemplate().find(query, propertValue);
	}
	
	/**
	 * 通过多属性获得对应的所有数据
	 */
	@SuppressWarnings("unchecked")
	public List<?> findByMulProperty(Class model, String[] propertyName, Object[] propertValue) {
		String query = "from " + model.getSimpleName() + " as m where m." + propertyName[0]
		+ "=? and m." + propertyName[1] + "=?";
		System.out.println("*********" + query + "***********" + propertValue);
		return getHibernateTemplate().find(query, propertValue);
	}

	/**
	 * 模糊查询
	 */
	@SuppressWarnings("unchecked")
	public List<?> findByLikeQuery(Class model, String propertyName, String str) {
		String query = "from " + model.getSimpleName() + " as m where m." + propertyName
			+ " like '" + str + "%'";
		System.out.println("*********" + query + "***********");
		return getHibernateTemplate().find(query);
	}
	
	/**
	 * 查询数据的总条数
	 */
	@SuppressWarnings("unchecked")
	public Integer getRows(Class model) {
		StringBuffer hql = new StringBuffer();
	    hql.append("select count(m) from " + model.getSimpleName());
	    Query query = this.getSession().createQuery(hql.substring(0));
	    return (Integer)query.uniqueResult();
	}

	/**
	 * 修改特定数据
	 */
	public boolean update(Object obj) {
		try {
			getHibernateTemplate().update(obj);
			return true;
		} catch (Exception e) {
			return false;
		}
	}
	
	
	
	/**
	 * 查询符合条件的数据条数
	 */
	@SuppressWarnings("unchecked")
	public Integer getRows(Class model, String hql, Map map) {
		hql = "select count(m) from " + model.getSimpleName() + " m" + hql;
		StringBuilder strHql = new StringBuilder(hql);
		if (map.size() != 0) {
			if (hql.indexOf("where") == -1) {
				strHql.append(" where ");
			} else {
				strHql.append(" and ");
			}
			
			Iterator<Entry<String,Object>> it = map.entrySet().iterator();
			int flag = 0;
	        while(it.hasNext()) {
	        	Entry<String,Object> entry = it.next();
	        	if (flag == 1) {
	        		strHql.append(" and");
	        	}
	        	flag = 1;
	        	if ("m.nRegionId".equals(entry.getKey())) {
	        		strHql.append(" " + entry.getKey() + "=" + entry.getValue());
	        	} else {
	        		strHql.append(" " + entry.getKey() + "='" + entry.getValue() + "'");
	        	}
	        }    
		}
		Query query = this.getSession().createQuery(strHql.toString());
		long total = (Long) query.uniqueResult();
	    return (int) total;
	}
	
	/**
	 * 分页查询符合所有条件的记录
	 * 
	 * @param pageNo 当前页数
	 * @param pageSize 每页显示的条数
	 * @param hql 查询语句
	 * @return 查询结果
	 */
	@SuppressWarnings("unchecked")
	public List<?> findPageByQuery(int pageNo, int pageSize, String hql, Map map) {
		List<Object[]> result = null;
	    try {  
	    	StringBuilder strHql = new StringBuilder(hql);
	        if (map.size() != 0) {
		        Iterator<Entry<String,Object>> it = map.entrySet().iterator();
		        while(it.hasNext()) {
		        	Entry<String,Object> entry = it.next();
		        	if ("m.nRegionId".equals(entry.getKey())) {
		        		strHql.append(" and " + entry.getKey() + "=" + entry.getValue());
		        	} else {
		        		strHql.append(" and " + entry.getKey() + "='" + entry.getValue() + "'");
		        	}
		        }    
	        }
	        Query query = this.getSession().createQuery(strHql.toString());
	        query.setFirstResult((pageNo-1)*pageSize);
	        query.setMaxResults(pageSize);
	        result = query.list();
	    } catch(RuntimeException re) {  
	    	re.printStackTrace();
	    }
	    return result;
	}

}

多表联查的时候最好不要超过两张表


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Struts2-action到jsp传值(传递查询到的所有数据)

思路: 1、action获取到数据,封装成list 2、通过ACtionContext或者Request将list放入其中 3、在jsp页面读取 底层的代码这里不讲述了,用的是myba...

SQL Assistent 查询数据工具

  • 2016年02月23日 14:28
  • 18.52MB
  • 下载

在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题

[sql] view plain copy SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data S...

15个Oracle查询数据

  • 2015年09月09日 15:03
  • 42KB
  • 下载

智软数据查询引擎使用说明

  • 2013年08月25日 16:05
  • 965KB
  • 下载

SQl查询数据库表名、表的列名、数据类型

1.获取所有数据库名:    Select Name FROM Master..SysDatabases order by Name 2.获取所有表名:     (1) Select Name ...

《数据的查询》

  • 2013年07月14日 08:47
  • 1.01MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据查询
举报原因:
原因补充:

(最多只允许输入30个字)