数据查询

原创 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;
	}

}

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


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

DataGridView查询数据

萨芬
  • ggibenben1314
  • ggibenben1314
  • 2013年07月23日 10:41
  • 2054

数据库 - 连接查询、嵌套查询、集合查询

连接查询连接查询:同时涉及多个表的查询 连接条件或连接谓词:用来连接两个表的条件 一般格式: [.] [.] [.] BETWEEN [.] AND [.]连接字段:连接谓词中的列名称...
  • wangzi11322
  • wangzi11322
  • 2015年05月05日 13:32
  • 8669

关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法。 语法回顾 SELECT [ALL|DISTINCT] [,]… FRO...
  • SeayXu
  • SeayXu
  • 2016年06月03日 17:32
  • 1525

C#txt文件读取数据list查询最大值最小值

  • 2018年01月13日 22:50
  • 62KB
  • 下载

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

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

《数据的查询》

  • 2013年07月14日 08:47
  • 1.01MB
  • 下载

自定缓存, 在查询修改频率较少的数据,存入缓存中,有帮助提高效率

  • 2017年08月08日 18:05
  • 1KB
  • 下载

Greenplum 8.2数据词典-查询指定用户下的表和表的字段

  • 2017年08月02日 23:51
  • 2KB
  • 下载

数据结构实习之电话号码查询系统

  • 2017年12月19日 16:24
  • 1.92MB
  • 下载

iClient for Android数据集ID查询功能

  • 2017年12月14日 16:02
  • 8.47MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据查询
举报原因:
原因补充:

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