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 ...
随机推荐
- java MD5 加密
使用javaMD5.jar ========================================== 使用java的security类 ========================== ...
- Storm 1.0.0
Storm 1.0.0版本增加了很多新的特性,可用性以及性能也得到了很大的改善,该版本是Storm发展历程上一个里程碑式的版本,主要特点如下. 性能提升 Storm 1.0.0版本最大的亮点就是性能提 ...
- 端口(port)的安全模式(security mode)
1. Cisco29系列交换机可以做基于2层的端口安全 ,即mac地址与端口进行绑定.2. Cisco3550以上交换机均可做基于2层和3层的端口安全, 即mac地址与端口绑定以及mac地址与ip地址 ...
- SQL总结之对比和备份
-----用户解锁select * from wfuser for update ----------------------修改金额select * from bp_account where ac ...
- IntelliJ Idea 14 安装 Golang 插件 google-go-lang-idea-plugin 的方法
IDEA 的编辑器都很强悍,所以现在学Go 也想用他啊,无奈这个插件搞了好久,整理了下流程记录下 1. 当然是下载 IDEA 编辑器了 http://www.jetbrains.com/idea/do ...
- Qt 外观之一 ——Qt Style Sheet
Qt Style Sheet 目录 使用 对于应用程序 创建自定义控件 QSS语法 一般选择器(selector) 伪选择器 解决冲突 使用specificity Namespace冲突 级联效应 设 ...
- MVC 的 视图中 @section 是什么作用?
可以定义一个渲染块,这个渲染块可以在LayoutPage里面引用,使用Html.RenderSection("section名称"); 可以指定一个bool参数指定如果Conten ...
- js简单固定table表头及css问题分析。
<head> <meta name="viewport" content="width=device-width" /> <tit ...
- C# 语言规范_版本5.0 (第16章 异常)
1. 异常 C# 中的异常用于处理系统级和应用程序级的错误状态,它是一种结构化的.统一的和类型安全的处理机制.C# 中的异常机制非常类似于 C++ 的异常机制,但是有一些重要的区别: 在 C# 中,所 ...
- 前端用Request Payload方式请求后台
后台接收方式: InputStream inputStream = request.getInputStream(); byte[] buff = new byte[1024]; int len = ...