4、Hibenrate中HQL的10中查询方式
二、具体事例如下:
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中查询方式的更多相关文章
- Hibernate学习10——Hibernate 查询方式
本章主要是以查询Student的例子: Student.java: package com.cy.model; public class Student { private int id; priva ...
- hibernate中HQL多对多的查询
现有三张表 TLXPURCHASE.采购事项审批表,TLXPURCHASEACTIVITY.采购招标活动对应表,TLXACTIVITY.招标活动表,采购事项审批表和采购活动表是多对多关系.java中定 ...
- NHibernte教程(10)--关联查询
本节内容 关联查询引入 一对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 关联查询引入 在NHibernate中提供了三种查询方式给我们选择:NH ...
- hibernate学习笔记6--Criteria查询方式、完整小练习(开发步骤)
一.Criteria查询方式没有sql语了,因此更加面向对象一些.Criteria是一种比HQL更面向对象的查询方式:Criteria的创建方式: Criteria c = s.createCrite ...
- Hibernate中Hql查询
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
- Django 1.10 中文文档------3.2.2 查询操作making queries
3.2.2 查询操作 6.15章节包含所有模型相关的API解释. 后面的内容基于如下的一个博客应用模型: from django.db import models class Blog(models. ...
- hibernate(七) hibernate中查询方式详解
序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...
- Hibernate学习(七)———— hibernate中查询方式详解
序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等 --WH 一.hibernate中的5种 ...
- EF中使用语句 或存储过程 查询(转)
EF中使用语句 或存储过程 查询 1.无参数查询 var model = db.Database.SqlQuery("select* from UserInfoes ").ToLi ...
随机推荐
- arm指令集
http://blog.chinaunix.net/uid-20769502-id-112445.html
- Python网络编程学习_Day11
一.协程 1.理论知识 协程,又称伪线程,是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈. ...
- Java中不定参的使用规则
Java中有时候会使用到不定参数,它的使用规则有2项: 一个方法中只能使用一个不定参数. 不定参数必须是方法中最后一个参数. 不定参数在传入的过程中会行成一个数组传入,如果不会放在最后一个,虚拟机无法 ...
- 升级ruby
1.安装 RVM RVM:Ruby Version Manager,Ruby版本管理器,包括Ruby的版本管理和Gem库管理(gemset) $ curl -L get.rvm.io | bash - ...
- HTML5学习之Web存储
在客户端存储数据 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 之前, ...
- [HMLY]4.CocoaPods详解----制作
作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/20067595 转载请注明出处 学会使用别人的pods依赖库后,你一 ...
- [HMLY]1.CocoaPods详解----使用
作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/18737437 转载请注明出处 一.什么是cocoaPods 1.为 ...
- 汇总前端最最常用的JS代码片段-你值得收藏
原始出处,可拷贝:http://www.w3cfuns.com/notes/25068/1d0d350a974d879e63f1115cf80a3288.html 摘自:http://www.love ...
- [UWP小白日记-2]SQLite数据库DOME
数据库说简单点就是增删改查,但是对新手来说也是要爆肝的.作为一个新手爆肝无数次啊, 血的教训啊现在UWP的教程又少,说多了都是泪.留下来免得以后又爆肝.还有:一定要写注释!一定要写注释!一定要写注释! ...
- ubuntu搭建git服务器
1.准备两台ubuntu虚拟机,其中一个作为server,另一个作为client.检查是否安装ssh,如果没有安装:sudo apt-get install openssh-server, 然后在se ...