/* 前提介绍:
* 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();
}
}
}
分享到:
相关推荐
Hibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询....
我培训时用的 Hibernate 课件, 个人能力范围... 内容如下:HQL 查询;Query 接口及其主要方法;Select 子句;更新与删除;引用查询;联合查询;子查询;数据加载方式;Sql 查询;分页查询;管理 Session;ThreadLocal 接口的使用
通用查询页面中的查询项、查询出的分页列表都是自动生成的。开发简便、快速,附件中是一套完整的demo和使用说明 支持全部Hql语法格式 Awake 后续功能扩展 1.XML格式数据输出,保证了ajax用户也可以使用Awake框架...
Hibernate HQL命名参数和Query接口的分页 Hibernate HQL命名参数和Query接口的分页
高效率spring+struts+hibernate分页算法
主要介绍了Hibernate分页的两种实现方法,结合实例形式讲述了criteria分页与hql分页的实现方法,需要的朋友可以参考下
不错的分页(Hibernate+sqlserver2000分页)值得大家一看。
Hibernate+Hql实现简单单表分页查询。
hibernate通用查询,可以实现分页,排序,及一个对象的任何查询操作
用三大框架整合实现分页,附加可用,逻辑简单适合初学者
HQL:Hibernate Qusery Language HQL :是面向对象的查询语言,同SQL有些相似是Hib中最常用的方式。 查询设定各种查询条件。 支持投影查询,检索出对象的部分属性。 支持分页查询,允许使用having和group by 提供内...
使用说明: ...1、修复HQL方式日期范围查询BUG 2、添加分组分页的功能 3、添加pageSize设置功能 V1.1版本更新内容 1、实现日期范围查询 V1.0版本 1、初始版本。实现JSP+SERVLET+Hibernate基本分页
分页查询 // 6.投影查询(只获取部分字段的结果) // 7.聚集函数使用(聚合函数)(count、sum、avg、max、min等) // 8.TOP N查询(返回n条记录) // 9.命名查询 ———————————————— 原文链接:...
在hql中关键字不区分大小写,但是属性和类名区分大小写 分页查询【重要】 * setFirstResult(),从0开始 * setMaxResults,每页显示多少条数据
基于hibernate的开源通用查询框架: 1.支持全部hql语法 2.可以支持Ajax用的 xml数据结构,也可以支持jsp、jstl、struts等标签,根据配置不同的数据解析器,得到不同结构的数据。 3.集成完整的分页功能。 4....
hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置...hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式
Awake 十分钟做一个查询,分页列表,增减一列只需几秒钟(修改xml)。 网址:http://hi.baidu.com/jfheng 在软件开发中我们经常会遇到这些问题: 1. 在开发查询检索页面时,经常遇到客户要求增减查询项,这时需要修改...
Awake 十分钟做一个查询,分页列表,增减一列只需几秒钟(修改xml)。 在软件开发中我们经常会遇到这些问题: 1. 在开发查询检索页面时,经常遇到客户要求增减查询项,这时需要修改,查询页面和源代码。 2. 在开发...
User实体(id, name, age, sex, ctime),使用...2、DAO的实现类,分别采用hql查询,QBC查询,本地SQL查询实现 3、查询包括: 根据ID查询, 查询所有用户(包括:不分页、分页) 根据条件查询(包括:不分页、分页)
框架中使用hibernate分页,适合不同的数据库