本章主要是以查询Student的例子:

Student.java:

package com.cy.model;

public class Student {
private int id;
private String name;
private int age; public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
} }

Student.hbm.xml:

<hibernate-mapping package="com.cy.model">

    <class name="Student" table="t_student">
<id name="id" column="stuId">
<generator class="native"></generator>
</id>
<property name="name" column="stuName"></property>
<property name="age" column="stuAge"></property>
</class> </hibernate-mapping>

数据库中student数据:

第一节:Hibernate 查询方式简介                                    

导航对象图是说from Student s where s.name = xxx and s.age = xxx这样可以对象.属性这样子;
OID查询方式:比如Session.get(Student.class, 1);根据ID查询这样子;
 
 
第二节:本地SQL 查询方式                                  
/**
* 本地sql查询,不带参数
*/
@Test
public void testSQLQuery(){
String sql = "select * from t_student";
Query query = session.createSQLQuery(sql).addEntity(Student.class); //查询student,绑定Student实体
List<Student> studentList = query.list();
for(Student s: studentList){
System.out.println(s);
} /**
* Hibernate: select * from t_student
Student [id=1, name=张三, age=10]
Student [id=2, name=李四, age=15]
Student [id=3, name=王五, age=13]
*/
} /**
* 本地sql查询,带参数
* 查询姓名张开头,且10岁
*/
@Test
public void testSQLQuery2(){
String sql = "select * from t_student where stuName like :stuName and stuAge = :stuAge";
Query query = session.createSQLQuery(sql).addEntity(Student.class); //查询student,绑定Student实体
query.setString("stuName", "张%");
query.setInteger("stuAge", 10);
List<Student> studentList = query.list();
for(Student s: studentList){
System.out.println(s);
} /*
* Hibernate: select * from t_student where stuName like ? and stuAge = ?
Student [id=1, name=张三, age=10]
*/
}

第三节:HQL 查询方式                                        

package com.cy.service;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.cy.model.Student;
import com.cy.util.HibernateUtil; public class StudentTest { private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
private Session session; @Before
public void setUp() throws Exception {
session=sessionFactory.openSession();
session.beginTransaction();
} @After
public void tearDown() throws Exception {
session.getTransaction().commit();
session.close();
} /**
* 本地sql查询,不带参数
*/
@Test
public void testSQLQuery(){
String sql = "select * from t_student";
Query query = session.createSQLQuery(sql).addEntity(Student.class); //查询student,绑定Student实体
List<Student> studentList = query.list();
for(Student s: studentList){
System.out.println(s);
} /**
* Hibernate: select * from t_student
Student [id=1, name=张三, age=10]
Student [id=2, name=李四, age=15]
Student [id=3, name=王五, age=13]
*/
} /**
* 本地sql查询,带参数
* 查询姓名张开头,且10岁
*/
@Test
public void testSQLQuery2(){
String sql = "select * from t_student where stuName like :stuName and stuAge = :stuAge";
Query query = session.createSQLQuery(sql).addEntity(Student.class); //查询student,绑定Student实体
query.setString("stuName", "张%");
query.setInteger("stuAge", 10);
List<Student> studentList = query.list();
for(Student s: studentList){
System.out.println(s);
} /*
* Hibernate: select * from t_student where stuName like ? and stuAge = ?
Student [id=1, name=张三, age=10]
*/
} /**
* HQL查询
*/
@Test
public void testHQLQuery(){
String hql = "from Student";
Query query = session.createQuery(hql);
List<Student> studentList = query.list();
for(Student s : studentList){
System.out.println(s);
} /*
* Hibernate: select student0_.stuId as stuId1_0_, student0_.stuName as stuName2_0_, student0_.stuAge as stuAge3_0_ from t_student student0_
Student [id=1, name=张三, age=10]
Student [id=2, name=李四, age=15]
Student [id=3, name=王五, age=13]
*/
} /**
* HQL 带条件查询
*/
@Test
public void testHQLQuery2(){
String hql = "from Student where name like :stuName and age = :stuAge ";
Query query = session.createQuery(hql);
query.setString("stuName", "张%");
query.setInteger("stuAge", 10);
List<Student> studentList = query.list();
for(Student s : studentList){
System.out.println(s);
} /*
* Hibernate: select student0_.stuId as stuId1_0_, student0_.stuName as stuName2_0_, student0_.stuAge as stuAge3_0_ from t_student student0_ where (student0_.stuName like ?) and student0_.stuAge=?
Student [id=1, name=张三, age=10]
*/
} /**
* HQL 使用别名
* from Student as s
* 或者
* from Student s
*/
@Test
public void testHQLQuery3(){
String hql="from Student as s where s.name like :stuName and s.age=:stuAge";
Query query=session.createQuery(hql);
query.setString("stuName", "张%");
query.setInteger("stuAge", 10);
List<Student> studentList= query.list();
for(Student s : studentList){
System.out.println(s);
}
} /**
* HQL查询 对结果排序
* 按照年龄降序排列
*/
@Test
public void testHQLQuery4(){
String hql = "from Student order by age desc";
Query query = session.createQuery(hql);
List<Student> studentList = query.list();
for(Student s : studentList){
System.out.println(s);
} /*
* Hibernate: select student0_.stuId as stuId1_0_, student0_.stuName as stuName2_0_, student0_.stuAge as stuAge3_0_ from t_student student0_ order by student0_.stuAge desc
Student [id=2, name=李四, age=15]
Student [id=3, name=王五, age=13]
Student [id=1, name=张三, age=10]
*/
} /**
* HQL查询 分页查询
*/
@Test
public void testHQLQuery5(){
String hql="from Student";
Query query=session.createQuery(hql);
//第1条记录开始,取2条;
query.setFirstResult(1);
query.setMaxResults(2);
List<Student> studentList = query.list();
for(Student s : studentList){
System.out.println(s);
} /*
* Hibernate: select student0_.stuId as stuId1_0_, student0_.stuName as stuName2_0_, student0_.stuAge as stuAge3_0_ from t_student student0_ limit ?, ?
Student [id=2, name=李四, age=15]
Student [id=3, name=王五, age=13]
*/
} /**
* HQL查询 查询单个对象
* 查询出一条记录,完全能确定是一条记录,这里就不是list了,uniqueResult
* 比如查询总记录数,就可以用uniqueResult
*/
@Test
public void testHQLQuery6() {
String hql="from Student";
Query query=session.createQuery(hql);
query.setFirstResult(1);
query.setMaxResults(1);
Student s = (Student) query.uniqueResult();
System.out.println(s); /*
* Hibernate: select student0_.stuId as stuId1_0_, student0_.stuName as stuName2_0_, student0_.stuAge as stuAge3_0_ from t_student student0_ limit ?, ?
Student [id=2, name=李四, age=15]
*/
} /**
* HQL 链式写法
*/
@SuppressWarnings("unchecked")
@Test
public void testHQLQuery7() {
String hql = "from Student s where s.name like :stuName and s.age = :stuAge";
List<Student> studentList = session.createQuery(hql)
.setString("stuName", "李%")
.setInteger("stuAge", 15)
.list();
for(Student s : studentList){
System.out.println(s);
} /*
* Student [id=2, name=李四, age=15]
*/
} }

第四节:QBC 查询方式                                              

package com.cy.service;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import com.cy.model.Student;
import com.cy.util.HibernateUtil; public class StudentTest { private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
private Session session; @Before
public void setUp() throws Exception {
session=sessionFactory.openSession();
session.beginTransaction();
} @After
public void tearDown() throws Exception {
session.getTransaction().commit();
session.close();
} /**
* QBC查询
*/
@Test
public void testQBCQuery(){
Criteria criteria = session.createCriteria(Student.class);
List<Student> stuList = criteria.list();
for(Student s : stuList){
System.out.println(s);
} /*
* Hibernate: select this_.stuId as stuId1_0_0_, this_.stuName as stuName2_0_0_, this_.stuAge as stuAge3_0_0_ from t_student this_
Student [id=1, name=张三, age=10]
Student [id=2, name=李四, age=15]
Student [id=3, name=王五, age=13]
*/
} /**
* QBC 带条件查询
*/
@Test
public void testQBCQuery2(){
Criteria criteria = session.createCriteria(Student.class);
Criterion c1 = Restrictions.like("name", "李%");
Criterion c2 = Restrictions.eq("age", 15);
criteria.add(c1);
criteria.add(c2);
List<Student> stuList = criteria.list();
for(Student s : stuList){
System.out.println(s);
}
/*
* Hibernate: select this_.stuId as stuId1_0_0_, this_.stuName as stuName2_0_0_, this_.stuAge as stuAge3_0_0_ from t_student this_ where this_.stuName like ? and this_.stuAge=?
Student [id=2, name=李四, age=15]
*/
} /**
* QBC 对结果排序
*/
@Test
public void testQBCQuery3(){
Criteria criteria = session.createCriteria(Student.class);
criteria.addOrder(Order.desc("age"));
List<Student> stuList = criteria.list();
for(Student s : stuList){
System.out.println(s);
} /*
* Student [id=2, name=李四, age=15]
Student [id=3, name=王五, age=13]
Student [id=1, name=张三, age=10]
*/
} /**
* QBC 分页查询
*/
@Test
public void testQBCQuery4(){
Criteria criteria = session.createCriteria(Student.class);
criteria.setFirstResult(0); //从第0条记录开始
criteria.setMaxResults(2); //查询2条
List<Student> stuList = criteria.list();
for(Student s : stuList){
System.out.println(s);
} /*
* Hibernate: select this_.stuId as stuId1_0_0_, this_.stuName as stuName2_0_0_, this_.stuAge as stuAge3_0_0_ from t_student this_ limit ?
Student [id=1, name=张三, age=10]
Student [id=2, name=李四, age=15]
*/
} /**
* QBC 查询单个对象
* 因为这里只取一条记录,uniqueResult
*/
@Test
public void testQBCQuery5(){
Criteria criteria = session.createCriteria(Student.class);
criteria.setFirstResult(2);
criteria.setMaxResults(1);
Student s = (Student) criteria.uniqueResult();
System.out.println(s); /*
* Hibernate: select this_.stuId as stuId1_0_0_, this_.stuName as stuName2_0_0_, this_.stuAge as stuAge3_0_0_ from t_student this_ limit ?, ?
Student [id=3, name=王五, age=13]
*/
} /**
* QBC 链式写法
*/
@SuppressWarnings("unchecked")
@Test
public void testQBCQuery6(){
Criterion c1 = Restrictions.like("name", "李%");
Criterion c2 = Restrictions.eq("age", 15);
List<Student> stuList = session.createCriteria(Student.class)
.add(c1)
.add(c2)
.list();
for(Student s : stuList){
System.out.println(s);
}
} }

Hibernate学习10——Hibernate 查询方式的更多相关文章

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

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

  2. hibernate的三种查询方式

    hibernate的三种查询方式 目录 hibernate的三种查询方式 1.HQL查询 1.1.SQL概述 1.2.实体查询 1.3.带where的查询 1.3.属性查询 1.4.实体的更新和删除 ...

  3. Hibernate学习笔记-Hibernate HQL查询

    Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...

  4. Hibernate学习笔记四 查询

    HQL语法 1.基本语法 String hql = " from com.yyb.domain.Customer ";//完整写法 String hql2 = " fro ...

  5. Hibernate学习笔记--------4.查询

    一.Get/Load Get方法是立即检索,而load是延迟检索,他们都是根据主键进行查询.在<class>标签中,若把lazy属性改为false,load方法就会立即检索,class中的 ...

  6. Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

    Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...

  7. Hibernate第四天——查询方式

    Hibernate入门最后一天第四天,我们进行查询方式的更进一步的细化: 先看一下大致的Hibernate的提供的查询的方式: 1.对象导航查询 2.OID查询 3.HQL查询 4.QBC查询 5.本 ...

  8. Hibernate之HQL检索(查询)方式

    HQL(Hibernate Query Language)是面向对象的查询语言,与SQL非常相似.在Hibernate中,HQL是使用最广泛的检索方式. 具有下面经常使用功能: (1)在查询语句中,能 ...

  9. Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询

    HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...

随机推荐

  1. 【zzuli-1923】表达式求值

    题目描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式.2. 如果 X 和 Y 是 表达式,则 X+Y, X*Y 也是表达式; *优先级高于+.3. 如果 X 和 Y 是 表达式,则 ...

  2. TeamView

    1.TeamView TeamViewer是一个能在任何防火墙和NAT代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行 TeamV ...

  3. 如何在 js 代码中使用 jsp 标签或 Java 代码

    JSP 标签还是很方便的,比如 Struts.Spring 等提供给我们的 JSP 标签,可以用它们来获取变量或进行一些计算.比如 struts2 的 <s:url value="/a ...

  4. Python报错IOError: [Errno 22] invalid mode ('r') or filename

    IOError: [Errno 22] invalid mode ('r') or filename: 这种错误的出现是在使用built-in函数file()或者open()的时候. 或者是因为文件的 ...

  5. C# 超级狗 二次开发 读写数据 激活验证 存储数据库连接字符串

    本文主要讲解如果使用C#语言来对超级狗进行二次开发,如果仅仅是做个激活的功能,可以参照另一篇博客,地址:http://www.cnblogs.com/dathlin/p/8487842.html 如果 ...

  6. Wireshark小技巧

    抓头部: 时间格式设置: 自定义颜色: 快速过滤TCP/UDP: 过滤一个TCP/UDP Stream: 根据感兴趣内容生成表达式:如果右击的是Apply as Filter则生成表达式并自动执行

  7. wireshark的一些快捷键

    恢复原来的大小   ‘crtl’+‘=’  即按住crtl建和=键(backspace左边那个键) 缩小 ‘crtl’+‘-’ 即按住crtl建和-键(backspace左边第二个键) 放大 ‘crt ...

  8. Xcode5.1.1支持低版本和image not found和Couldn't register XXXX with the bootstrap server. Error: unknown error code.

    一:问题  targets中证书的设置 1.项目支持多设备(Xcode5.1.1支持低版本) 2.真机测试要确保Code Siging 设置没问题 支持的最低版本 二 :问题:image  not f ...

  9. 2013-05-25 14:04 zend studio10正式版如何汉化?

    选择Help菜单->Install New Software...在Work with框中复制此地 址:http://download.eclipse.org/technology/babel/ ...

  10. 去除inline-block元素间间距的N种方法(转)

    一.现象描述 真正意义上的inline-block水平呈现的元素间,换行显示或空格分隔的情况下会有间距,很简单的个例子: <input /> <input type="su ...