`
1140566087
  • 浏览: 547578 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18073
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:309428
Group-logo
J2ME 基础学习课程集
浏览量:17986
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17193
社区版块
存档分类
最新评论

Hibernate 分页查询 HQL查询

阅读更多
/*  前提介绍:
* SQL: 查询的直接对象是数据库中的表(表的结构)--遵循的是国际数据库公共的标准
*
* HQL: 只属于Hibernate 这个ORM 框架,查询的对象不是数据库的表,而是表对应的持久化对象;---操作的是对象
*
* QBC: 只属于ORM框架,它是没有SQL出现的查询(动态查询),查询只存在对象操作上
* 特点:查询的范围有限,只能查询一定的范围,封装性比较好,没有SQL/HQL语句;
*
* Query :  1、是HQL语句的一个专用工具 2、通过该工具对具体的参数进行设置  
* 注意:当查询语句添加条件的时候需要个对象添加别名
*
* 简单的提示:数据库中插入数据后进行commit;
*
* 难点:使用SQL进行表的关联查询;??????

* */



package com.svse.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import com.svse.entity.TDept;
import com.svse.entity.TEmp;
import com.svse.util.HibernateSessionFactoryDaoSupportImpl;

//各种查询的测试
public class QueryDao extends HibernateSessionFactoryDaoSupportImpl
{
	

	/*************************************HQL 查询*********************************************************/
	/***
	 * 类型:位置参数查询--?
	 * 条件:查询性别为男的所有员工的信息
	 */
	public List findBySex(String sex){
		List ar = new ArrayList();

		/* 第一步:通过HQL语句创建Query对象 */
		Query query = this.getSession().createQuery("FROM TEmp a inner join fetch a.TDept where a.ESex=?");

		/* 第二步:设置参数值 ? 从 0 开始 */
		query.setString(0, sex);

		/* 第三步:获取集合数据 */
		ar = query.list();

		//简写
		//ar = this.getSession().createQuery("FROM TEmp a inner join fetch a.TDept where a.ESex=?").setString(0, sex).list();

		/* 第四步:关闭 */
		this.closeAll();

		return ar;
	}

	/***
	 * 	类型:占位符查询
	 * 	条件:性别为男的所有员工信息,部门为研发部
	 */
	public List findEmpBySex_1(String sex,String dep){
		//多写
		List ar = new  ArrayList();
		Query query = this.getSession().createQuery("FROM TEmp a inner join fetch a.TDept where a.ESex=:sex and a.TDept.PName=:dep");
		query.setString("sex", sex);
		query.setString("dep",dep);
		ar = query.list();

		//简写
		//ar = this.getSession().createQuery("FROM TEmp a inner join fetch a.TDept where a.ESex=:sex").setString("sex", sex).list();

		this.closeAll();
		return ar;
	}

	/***
	 * 类型:查询部分字段
	 * 条件:查询所有
	 * 注意:因为HQL操作的是持久化对象,所有查询部分字段返回的是不完整的对象,因此返回的为Object对象的数组
	 */
	public List findSomeField(){
		List ar = this.getSession().createQuery("select a.EName ,a.ESex from TEmp a").list();
		this.closeAll();
		return ar;
	}

	/***
	 * 类型:单一值的查询
	 * 条件:查询条数、最大值、最小值、平均值
	 * 
	 */
	public double findUniqueValue(int type){
		String hql = "";
		switch (type)
		{
		case 1:
			hql = "select count(*) from TEmp";	//查询行目总数
			break;
		case 2:
			hql = "select max(EId) from TEmp";
			break;
		case 3:
			hql = "select min(EId) from TEmp";
			break;
		case 4:
			hql = "select avg(EId) from TEmp";
		}
		double value =Double.parseDouble( this.getSession().createQuery(hql).uniqueResult().toString());
		this.closeAll();
		return value;
	}

	/***
	 * 类型:模糊查询
	 * 条件:查询出名字中带‘小’的,并且是研发部的
	 */
	public List findEmpByLike(String term,String dept){
		List ar = new ArrayList();
		Query query = this.getSession().createQuery("FROM TEmp a inner join fetch a.TDept where a.EName like ? and a.TDept.PName=:dept");
		query.setString(0, '%'+term+'%');
		query.setString("dept",dept);
		ar = query.list();
		return ar;
	}
	/***************************************************************************************************/

	/********************************************* QBC 查询 **************************************************/	
	/***
	 * 类型:QBC 带条件的查询
	 * 条件:性别为男的
	 */
	public List qbc_findEmpBySex(String sex){
		List ar = new ArrayList();

		/* 第一步:得到动态工具 */
		Criteria criteria = this.getSession().createCriteria(TEmp.class);

		/* 第二步:装载参数 ,直接对应实体属性 
		 * Restrictions:限制,约束 */
		criteria.add(Restrictions.eq("ESex", sex));

		/* 表与表之间的关联 */
		criteria.createCriteria("TDept");	

		/* 获得数据对象 */
		ar = criteria.list();

		//简写
		//ar = this.getSession().createCriteria(TEmp.class).add(Restrictions.eq("ESex",sex)).createCriteria("TDept").list();
		this.closeAll();
		return ar;
	}

	/***
	 * 类型:QBC 的模糊查询
	 * 条件:名字中含有小的 ,研发部的
	 */
	public List qbc_findEmpLikeEname(String term,String dept){
		List ar = this.getSession().createCriteria(TEmp.class).add(Restrictions.like("EName",term)).createCriteria("TDept").add(Restrictions.eq("PName",dept)).list();
		this.closeAll();
		return ar;
	}

	/***
	 * 类型:集合查询
	 * 条件:查总函数,查行数
	 */
	public double qbc_collection(){
		double value = 0;
		//获取工具
		Criteria criteria = this.getSession().createCriteria(TEmp.class);
		//设置参数后去行数
		criteria.setProjection(Projections.rowCount());
		//获取单一值
		value = Double.parseDouble(criteria.uniqueResult().toString());
		return value;
	}
	/***********************************************************************************/

	/*******************************利用HQL进行数据的更改************************************************/

	/***
	 * 类型:批量的更新数据
	 * 条件:将ID 为 1 的员工的名字改为:王八蛋
	 */
	public void upEmp(String term,int aim){
		this.beginTransaction();
		Query query = this.getSession().createQuery("update TEmp a set a.EName=? where a.EId =:aim");
		query.setString(0,term);
		query.setInteger("aim",aim);
		query.executeUpdate();
		this.commitTransaction();
	}

	/**
	 * 类型:执行SQL语句
	 * 
	 */
	public void executeSQL(){
		Query query = this.getSession().createSQLQuery("select * from t_emp a ,t_dept b where b.p_id = a.p_id").addEntity(TEmp.class);
		List ar  = query.list();
		this.closeAll();
	}
	
	/**
	 * 类型:分页查询
	 * 条件:开始页数,每页最大的行数
	 * curPage:页码;
	 * lines:每页显示数据条数;
	 * ar_index:集合对应的索引;
	 * 解释:根据此规则实现页面分页效果,例如:达到每页 5 条数据,
	 * 首页:		ar_index = (curPage-1)*5 == 0 
	 * 第二页:	ar_index = (curPage-1)*5 == 5 
	 * 第三页:	ar_index = (curPage-1)*5 == 10
	 * 。。。。。。
	 */
	public List queryForPages(int curPage,int lines){
		Query query = this.getSession().createQuery("FROM TEmp a inner join fetch a.TDept");
		query.setFirstResult((curPage-1)*lines);
		query.setMaxResults(lines);
		List ar = query.list();
		this.closeAll();
		return ar;
	}
	/**  
	 * @return 数据的总条数
	 */
	public int getCounts(){
		int count = Integer.parseInt((this.getSession().createCriteria(TEmp.class).setProjection(Projections.rowCount()).uniqueResult().toString()));
		this.closeAll();
		return count;
	}


	public static void main(String[] args)
	{
		QueryDao dao = new QueryDao();
		List ar = dao.queryForPages(1, 3);
		System.out.println("*********************第一页*******************");
		for (int i = 0; i <ar.size(); i++)
		{
			TEmp emp = (TEmp) ar.get(i);
			System.out.print(emp.getEId()+"  "+emp.getEName()+"  "+emp.getTDept().getPName());
			System.out.println();
		}
		System.out.println("*********************第二页*******************");
		ar = dao.queryForPages(2, 3);
		for (int i = 0; i <ar.size(); i++)
		{
			TEmp emp = (TEmp) ar.get(i);
			System.out.print(emp.getEId()+"  "+emp.getEName()+"  "+emp.getTDept().getPName());
			System.out.println();
		}


	}
}
2
0
分享到:
评论

相关推荐

    Hibernate HQL查询 分页查询 模糊查询.docx

    Hibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询....

    Hibernate 课件_HQL

    我培训时用的 Hibernate 课件, 个人能力范围... 内容如下:HQL 查询;Query 接口及其主要方法;Select 子句;更新与删除;引用查询;联合查询;子查询;数据加载方式;Sql 查询;分页查询;管理 Session;ThreadLocal 接口的使用

    基于hibernate 通用查询框架,包含查询、分页列表 功能

    通用查询页面中的查询项、查询出的分页列表都是自动生成的。开发简便、快速,附件中是一套完整的demo和使用说明 支持全部Hql语法格式 Awake 后续功能扩展 1.XML格式数据输出,保证了ajax用户也可以使用Awake框架...

    Hibernate HQL命名参数和Query接口的分页

    Hibernate HQL命名参数和Query接口的分页 Hibernate HQL命名参数和Query接口的分页

    高效率spring+struts+hibernate分页算法

    高效率spring+struts+hibernate分页算法

    Hibernate分页的两种实现方法

    主要介绍了Hibernate分页的两种实现方法,结合实例形式讲述了criteria分页与hql分页的实现方法,需要的朋友可以参考下

    Hibernate+sqlserver2000分页

    不错的分页(Hibernate+sqlserver2000分页)值得大家一看。

    Hibernate分页

    Hibernate+Hql实现简单单表分页查询。

    hibernate通用查询

    hibernate通用查询,可以实现分页,排序,及一个对象的任何查询操作

    spring+struts2+hibernate整合实现分页

    用三大框架整合实现分页,附加可用,逻辑简单适合初学者

    HQL:Hibernate Qusery Language

    HQL:Hibernate Qusery Language HQL :是面向对象的查询语言,同SQL有些相似是Hib中最常用的方式。 查询设定各种查询条件。 支持投影查询,检索出对象的部分属性。 支持分页查询,允许使用having和group by 提供内...

    实现JSP+SERVLET+Hibernate基本分页

    使用说明: ...1、修复HQL方式日期范围查询BUG 2、添加分组分页的功能 3、添加pageSize设置功能 V1.1版本更新内容 1、实现日期范围查询 V1.0版本 1、初始版本。实现JSP+SERVLET+Hibernate基本分页

    Hibernate_HQL案例.zip

    分页查询 // 6.投影查询(只获取部分字段的结果) // 7.聚集函数使用(聚合函数)(count、sum、avg、max、min等) // 8.TOP N查询(返回n条记录) // 9.命名查询 ———————————————— 原文链接:...

    hibernate分页

    在hql中关键字不区分大小写,但是属性和类名区分大小写 分页查询【重要】 * setFirstResult(),从0开始 * setMaxResults,每页显示多少条数据

    通用查询框架(hibernate+Ajax+jstl)

    基于hibernate的开源通用查询框架: 1.支持全部hql语法 2.可以支持Ajax用的 xml数据结构,也可以支持jsp、jstl、struts等标签,根据配置不同的数据解析器,得到不同结构的数据。 3.集成完整的分页功能。 4....

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置...hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式

    基于hibernate 通用查询 框架 Awake 基础jar包

    Awake 十分钟做一个查询,分页列表,增减一列只需几秒钟(修改xml)。 网址:http://hi.baidu.com/jfheng 在软件开发中我们经常会遇到这些问题: 1. 在开发查询检索页面时,经常遇到客户要求增减查询项,这时需要修改...

    基于hibernate 通用查询 Awake 框架 Demo 网址:http://hi.baidu.com/jfheng

    Awake 十分钟做一个查询,分页列表,增减一列只需几秒钟(修改xml)。 在软件开发中我们经常会遇到这些问题: 1. 在开发查询检索页面时,经常遇到客户要求增减查询项,这时需要修改,查询页面和源代码。 2. 在开发...

    hibernate实现User的增删改查

    User实体(id, name, age, sex, ctime),使用...2、DAO的实现类,分别采用hql查询,QBC查询,本地SQL查询实现 3、查询包括: 根据ID查询, 查询所有用户(包括:不分页、分页) 根据条件查询(包括:不分页、分页)

    hql criteria分页

    框架中使用hibernate分页,适合不同的数据库

Global site tag (gtag.js) - Google Analytics