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 ...
随机推荐
- ubuntu下update-alternatives命令的使用
在ubuntu系统中,update-alternatives是专门维护系统命令链接符的工具,其可以对某个工具的多个软件版本进行管理,通过它可以很方便的设置系统默认使用哪个命令的哪个软件版本. 在命令行 ...
- iOS-延迟操作方法总结
在实际应用中,有时候我们会需要延时执行某些操作,所以我们这里总结了四种延迟操作的方法,并简要分析了每种方法的异同. NSObject的相关方法 第一种方法是使用NSObject类的performSel ...
- js 设计模式-接口
js模拟java接口检测函数:确保子类实现接口中的方法:(出自js设计模式) 上代码: <script type="text/javascript" > <%-- ...
- linuxlab下虚拟板与主机通信
- 【转】delphi Format格式化函数
转自:http://www.cnblogs.com/mumble/archive/2011/05/25/2056462.html Format是一个很常用,却又似乎很烦的方法,本人试图对这个方法的帮助 ...
- python 之文本搜索与替换文件中的文本
#!/usr/local/env python import os, sys nargs = len(sys.argv) if not 3 <= nargs <= 5: print &qu ...
- ios 开发证书 appids 描述文件关系
当你准备进行真机测试或者发布应用到App Store上去的时候, 免不了要申请相应的证书.(Development--测试证书. Distribution--发布证书) 进入证书管理相应网站https ...
- 精通javasCRIPT-学习笔记 Features,Functions,Object
关于学习javasCRIPT的书,市面上太多了,有犀牛书,红宝书,但是他们都类似于一本书,包含js的一切,并没有站在一个高度上,看js的本质,我计划看一看jquery作者resig写的<精通ja ...
- rsync 断点续传
# rsync -avzP file root@172.20.7.219:/root/tmp (我这里file指要传送的文件)
- sqlserver和Windows资源管理器争用内存
sqlserver和Windows资源管理器在设置成相同的优先级的情况下(普通),Windows资源管理器优先于sqlserver对内存的征用.开始是