二、具体事例如下:

2.0 编写如下sql语句

 create table teacher(tid number not null primary key,tname varchar2(20));
create sequence seq_teacher;
insert into teacher values(seq_teacher.nextval,'holly');
insert into teacher values(seq_teacher.nextval,'石头');
commit;
insert into teacher values(seq_teacher.nextval,'holly1');
insert into teacher values(seq_teacher.nextval,'holly2');
commit;

2.1 创建如下的javaweb项目并添加jar文件

2.2 在项目的src下创建hibernate.cfg.xml主配置文件

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<property name="connection.username">scott</property>
<property name="connection.password">tiger</property>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="com/entity/Teacher.hbm.xml"/>
</session-factory>
</hibernate-configuration>

2.3 在项目的com.entity包下创建Teacher.java类

 package com.entity;

 public class Teacher {
private int tid;
private String tname; public Teacher() {
} public Teacher(String tname) {
this.tname = tname;
} public Teacher(int tid, String tname) {
this.tid = tid;
this.tname = tname;
} public int getTid() {
return tid;
} public void setTid(int tid) {
this.tid = tid;
} public String getTname() {
return tname;
} public void setTname(String tname) {
this.tname = tname;
} @Override
public String toString() {
return "Teacher [tid=" + tid + ", tname=" + tname + "]";
} }

2.4 在项目的com.entity包下创建Teacher.hbm.xm文件

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
<class name="com.entity.Teacher" table="TEACHER">
<id name="tid" type="java.lang.Integer" column="TID">
<generator class="sequence">
<param name="sequence">seq_teacher</param>
</generator>
</id>
<property name="tname" type="java.lang.String" column="TNAME"/>
</class>
</hibernate-mapping>

2.5 在项目的com.util包下创建HibernateUtil.java类

 package com.util;

 import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static ThreadLocal<Session> thread=new ThreadLocal<Session>();
private static Configuration config=null;
private static SessionFactory factory=null; static{
try {
config=new Configuration().configure("/hibernate.cfg.xml");
factory=config.buildSessionFactory();
} catch (HibernateException e) {
System.out.println("读取配置文件或创建工厂失败");
e.printStackTrace();
}
} public static Session getSession(){
Session session =thread.get();
if(session==null){
session =factory.openSession();
thread.set(session);
}
return session;
}
public static void closeSession(){
Session session =thread.get();
thread.set(null);
session.close(); } }

2.6 在项目的com.dao包下创建TeacherDao.java类

 package com.dao;

 import java.util.Iterator;
import java.util.List; import org.hibernate.Query;
import org.hibernate.Session; import com.entity.Teacher;
import com.util.HibernateUtil; public class TeacherDao {
/**
* 1.iterate() 延时加载查询一堆
* 得到1+N条sql
* 1是查询所有的sql
* n根据id查询的n条sql
* 延迟加载(用时在查询),关闭session的时机是读取完数据之后再关闭
*/
public static Iterator<Teacher> hqlItertor() {
Session session=HibernateUtil.getSession();
//定义hql语句
String hql="from Teacher"; //创建Query查询接口对象
Query query=session.createQuery(hql); //使用list方法查询所有返回list集合
Iterator<Teacher> it=query.iterate(); return it;
}
/**
* 2. list()立即加载
* 一条sql
* 立即加载(一次性查询出所有内容(关联)放入内存)
*
*/
public static List<Teacher> hqlList() {
Session session=HibernateUtil.getSession();
//定义hql语句
String hql="from Teacher"; //创建Query查询接口对象
Query query=session.createQuery(hql); //使用list方法查询所有返回list集合
List<Teacher> list=query.list(); HibernateUtil.closeSession();
return list; }
/**
* 3.根据条件查询返回集合
* @param tname
* @return
*/
public static List<Teacher> hqlIf(String tname) {
Session session=HibernateUtil.getSession();
//定义hql语句
String hql="from Teacher where tname='"+tname+"'"; //创建Query查询接口对象
Query query=session.createQuery(hql); //使用list方法查询所有返回list集合
List<Teacher> list=query.list(); HibernateUtil.closeSession();
return list;
}
/**
* 4. 占位符的使用(模糊查询)
* @param string
* @return
*/
public static List<Teacher> hqlLike(String name) {
Session session=HibernateUtil.getSession();
//定义hql语句
String hql="from Teacher where tname like ?"; //创建Query查询接口对象
Query query=session.createQuery(hql);
String str="%"+name+"%";
query.setString(0, str); //使用list方法查询所有返回list集合
List<Teacher> list=query.list(); HibernateUtil.closeSession();
return list;
}
/**
* 5. 按照参数名称使用(模糊查询)
* @param string
* @return
*/
public static List<Teacher> hqlLikeName(String name) {
Session session=HibernateUtil.getSession();
//定义hql语句
String hql="from Teacher where tname like :pname"; //创建Query查询接口对象
Query query=session.createQuery(hql);
String str="%"+name+"%";
query.setString("pname", str); //使用list方法查询所有返回list集合
List<Teacher> list=query.list(); HibernateUtil.closeSession();
return list;
}
/**
* 6. 条件查询绑定任意类型的参数:命名参数
* @param string
* @return
*/
public static List<Teacher> hqlSetParam(String name) {
Session session=HibernateUtil.getSession();
//定义hql语句
String hql="from Teacher where tname like :pname"; //创建Query查询接口对象
Query query=session.createQuery(hql);
String str="%"+name+"%"; query.setParameter("pname", str); //使用list方法查询所有返回list集合
List<Teacher> list=query.list(); HibernateUtil.closeSession();
return list;
}
/**
* 7. 条件查询绑定任意类型的参数:占位符
* @param string
* @return
*/
public static List<Teacher> hqlSetParamXx(String name) {
Session session=HibernateUtil.getSession();
//定义hql语句
String hql="from Teacher where tname like ?"; //创建Query查询接口对象
Query query=session.createQuery(hql);
String str="%"+name+"%"; query.setParameter(0, str); //使用list方法查询所有返回list集合
List<Teacher> list=query.list(); HibernateUtil.closeSession();
return list;
} /**
* 8.条件动态:通过对象属性去给命名参数赋值
* @param name
* @return
*/
public static List<Teacher> hqlSetProte(Teacher teacher) { Session session=HibernateUtil.getSession();
//定义hql语句
StringBuilder hql=new StringBuilder("from Teacher as t where 1=1"); if(teacher.getTname()!=null){
hql.append(" and t.tname=:tname");
} //创建Query查询接口对象
Query query=session.createQuery(hql.toString());
query.setProperties(teacher); //使用list方法查询所有返回list集合
List<Teacher> list=query.list(); HibernateUtil.closeSession();
return list;
}
/**
* 9.查询单条数据
* @return
*/
public static Teacher hhqlGetTeacher(String name) {
Session session=HibernateUtil.getSession();
//定义hql语句
String hql="from Teacher where tname=:pname"; //创建Query查询接口对象
Query query=session.createQuery(hql.toString());
query.setParameter("pname", name); //使用
Teacher teacher=(Teacher) query.uniqueResult(); HibernateUtil.closeSession();
return teacher;
}
/**
* 10. 分页查询
* @param i
* @param j
* @return
*/
public static List<Teacher> hqlPage(int pageSize, int pageNo) {
Session session=HibernateUtil.getSession(); //1.获取中条数
//定义中条数的hql语句
String hqlcount="select count(*) from Teacher";
Query countQuery=session.createQuery(hqlcount); //uniqueResult()得到总条数
Integer totalCount=Integer.parseInt(countQuery.uniqueResult().toString());
System.out.println("总条数:"+totalCount); //2.计算总页数
int totalPage=totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1;
System.out.println("总页数:"+totalPage); //3.查询的最大记录数(每页查询几条)
String hql="from Teacher";
Query query=session.createQuery(hql); query.setMaxResults(pageSize); //4.确定查询查询的起点
query.setFirstResult((pageNo-1)*pageSize); //5.查询分页数据
List<Teacher> list=query.list();
HibernateUtil.closeSession();
return list;
}
}

2.7 在项目的com.test包下创建Test.java类

 package com.test;

 import java.util.Iterator;
import java.util.List; import com.dao.TeacherDao;
import com.entity.Teacher;
import com.util.HibernateUtil; public class Test { public static void main(String[] args) {
// System.out.println("--------------1.使用list查询所有-----------");
// List<Teacher> list=TeacherDao.hqlList();
// for (Teacher teacher : list) {
// System.out.println(teacher);
// }
// System.out.println("--------------2.使用Itertor查询所有-----------");
// Iterator<Teacher> it=TeacherDao.hqlItertor();
// Teacher te=null;
// while (it.hasNext()) {
// te=it.next();
// System.out.println(te);
// }
// HibernateUtil.closeSession();
//
// System.out.println("----------3.条件拼接查询-----------");
// List<Teacher> iflist=TeacherDao.hqlIf("holly");
// for (Teacher teacher : iflist) {
// System.out.println(teacher);
// }
//
// System.out.println("----------4.条件查询模糊查询:按照参数位置-----------");
// List<Teacher> likelist=TeacherDao.hqlLike("holly");
// for (Teacher teacher : likelist) {
// System.out.println(teacher);
// }
// System.out.println("----------5.条件查询模糊查询:按照名称-----------");
// List<Teacher> likeNamelist=TeacherDao.hqlLikeName("holly");
// for (Teacher teacher : likeNamelist) {
// System.out.println(teacher);
// } // System.out.println("----------6.条件查询绑定任意类型的参数-----------");
// List<Teacher> SetParamlist=TeacherDao.hqlSetParam("holly");
// for (Teacher teacher : SetParamlist) {
// System.out.println(teacher);
// }
// System.out.println("----------7.条件查询绑定任意类型的参数:占位符-----------");
// List<Teacher> SetParamXx=TeacherDao.hqlSetParamXx("holly");
// for (Teacher teacher : SetParamXx) {
// System.out.println(teacher);
// }
System.out.println("----------8.条件动态:命名参数-----------");
// Teacher te=new Teacher("holly");
// List<Teacher> SetProte=TeacherDao.hqlSetProte(te);
// for (Teacher teacher : SetProte) {
// System.out.println(teacher);
// } System.out.println("------------9.查询单条数据-----------");
// Teacher teacher=TeacherDao.hhqlGetTeacher("holly");
// System.out.println(teacher); System.out.println("---------10.分页查询------------");
List<Teacher> list=TeacherDao.hqlPage(2,2);
System.out.println("页面大小:"+2+",当前页:"+2);
for (Teacher teacher : list) {
System.out.println(teacher);
} } }

2.8  效果自己试试就知道

4、Hibenrate中HQL的10中查询方式的更多相关文章

  1. Hibernate学习10——Hibernate 查询方式

    本章主要是以查询Student的例子: Student.java: package com.cy.model; public class Student { private int id; priva ...

  2. hibernate中HQL多对多的查询

    现有三张表 TLXPURCHASE.采购事项审批表,TLXPURCHASEACTIVITY.采购招标活动对应表,TLXACTIVITY.招标活动表,采购事项审批表和采购活动表是多对多关系.java中定 ...

  3. NHibernte教程(10)--关联查询

    本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...

  4. hibernate学习笔记6--Criteria查询方式、完整小练习(开发步骤)

    一.Criteria查询方式没有sql语了,因此更加面向对象一些.Criteria是一种比HQL更面向对象的查询方式:Criteria的创建方式: Criteria c = s.createCrite ...

  5. Hibernate中Hql查询

    这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...

  6. Django 1.10 中文文档------3.2.2 查询操作making queries

    3.2.2 查询操作 6.15章节包含所有模型相关的API解释. 后面的内容基于如下的一个博客应用模型: from django.db import models class Blog(models. ...

  7. hibernate(七) hibernate中查询方式详解

    序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...

  8. Hibernate学习(七)———— hibernate中查询方式详解

    序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等 --WH 一.hibernate中的5种 ...

  9. EF中使用语句 或存储过程 查询(转)

    EF中使用语句 或存储过程 查询 1.无参数查询 var model = db.Database.SqlQuery("select* from UserInfoes ").ToLi ...

随机推荐

  1. 关于web多标签多条件筛选的思考以及缓存的正确使用方法(上)

    做项目的过程中,发现一次远程链接数据库的耗时大概是300ms~400ms,切身体会到了前辈们经常说的减少链接的重要性,用了缓存后页面的打开时间从1.5s减少到400ms 前提: 那么来说一说正题,we ...

  2. 开通域名绑定DDNS

    一.初衷 我想要有一个自己的域名,然后有自己的server,在server上搭一个网站或者开通一个ftp服务,我想通过这个域名来访问它. 二.什么是DDNS DDNS 动态dns,电信宽带采用拨号联网 ...

  3. python 数组过滤

    arr = [1,2,3,4,5,6,7,8,None]arr = [elem for elem in arr if elem != None]

  4. C语言 · 分解质因数

    问题描述 求出区间[a,b]中所有整数的质因数分解. 输入格式 输入两个整数a,b. 输出格式 每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小 ...

  5. 洞穴勘测(bzoj 2049)

    Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...

  6. 图片切换效果,纯js

    公司有个技术很牛x的“老腊肉”,我向他请教,他给了我个网址,上面蛮多效果的,于是乎~我决定照着效果看能不能自己敲出来,我要变大神X3,重要的事说3遍. 它完成的效果是这样的: 好吧,一步一步来,先把框 ...

  7. 【NOIP2013提高组】货车运输

    货车运输  (truck.cpp/c/pas) [问题描述]  A国有n座城市,编号从1到n,城市之间有m条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有q辆货车在运输货物,司机们想知道每辆 ...

  8. 6.MyBaits的分页和缓存查询

    1. 创建javaweb项目MyBaits_Page_CaChe 2.在项目的WebRoot下的WEB-INF下的lib文件下加入jar文件 log4j-1.2.17.jar mybatis-3.2. ...

  9. C# 语言规范_版本5.0 (第12章 数组)

    1. 数组 数组是一种包含若干变量的数据结构,这些变量都可以通过计算索引进行访问.数组中包含的变量(又称数组的元素)具有相同的类型,该类型称为数组的元素类型. 数组有一个“秩”,它确定和每个数组元素关 ...

  10. 基于AFN的多张图片上传

    不废话,直接上代码 NSString *urlString = [NSString stringWithFormat:@"http://192.168.1.166:8080/Discipli ...