1.Query:他是一种比较面向对象的查询方式,query查询也叫做hql查询(hibernate query language),使用query查询,需要接受一个
         hql语句进行查询
         查询全部,分页查询,统计查询,条件查询,排序查询,投影查询
         sql:查询的是数据表和表中的字段
         hql:查询的是实体类和类中的属性
         * sql 和 hql 的语法极其类似

代码演示:

1.建库;

2.导入jar包(required/log4j/mysqlconnector)

2.建实体类(注意持久化类的编写规则);

3.编制映射关系文件(Linkman.hbm.xml);

4.编制核心配置文件(hibernate.cfg.xml);

5.编写工具类(HibernateUtils.java),增加getCurrentSession方法;

6.编写测试代码;

----------------------------------------------

5.编写工具类(HibernateUtils.java),增加getCurrentSession方法;

  1 package utils;
2
3 import org.hibernate.Session;
4 import org.hibernate.SessionFactory;
5 import org.hibernate.cfg.Configuration;
6
7 public class HibernateUtils {
8 private static SessionFactory factory;
9
10 static {
11 // 加载配置文件
12 Configuration cfg = new Configuration();
13 cfg.configure();
14 // 构建sessionFactory
15 factory = cfg.buildSessionFactory();
16 }
17
18 public static Session getSession() {
19 return factory.openSession();
20 }
21
22 // 获取与当前线程绑定的session
23 public static Session getCurrentSession() {
24 return factory.getCurrentSession();
25 }
26
27 }
28

6.编写测试代码;

  1 package demo;
2
3 import java.util.List;
4
5 import org.hibernate.Query;
6 import org.hibernate.Session;
7 import org.hibernate.Transaction;
8 import org.junit.Test;
9
10 import utils.HibernateUtils;
11
12 //hql查询数据库
13 public class Demo02 {
14 @Test
15 // 查询全部
16 // sql:select * from cst_linkman
17 // hql:from Linkman
18 public void findAll() {
19 // 获取session
20 Session cs = HibernateUtils.getCurrentSession();
21 // 开启事务,并返回事务对象
22 Transaction tx = cs.beginTransaction();
23 // hql语句
24 String hql = "from Linkman";
25 // 执行hql语句,并获取query对象
26 Query query = cs.createQuery(hql);
27 // 获取结果集,并输出
28 List list = query.list();
29 for (Object object : list) {
30 System.out.println(object);
31 }
32 // 提交事务
33 tx.commit();
34 }
35
36 // 条件查询
37 // sql:select * from csl_linkman where id=3;
38 // hql:from Linkman where id=3
39 @Test
40 public void findWithCondition() {
41 // 获取当前线程session
42 Session cs = HibernateUtils.getCurrentSession();
43 // 开启事务,返回事务对象
44 Transaction tx = cs.beginTransaction();
45 // 执行hql,并返回query对象
46 Query query = cs.createQuery("from Linkman where lkmId=?");
47 // 为占位符赋值,从左往右,第1个?为0,第2个为1....
48 query.setParameter(0, 3L);
49 // 获取结果集并输出
50 Object obj = query.uniqueResult();
51 System.out.println(obj);
52 // 提交事务
53 tx.commit();
54 }
55
56 // 具名查询
57 @Test
58 public void findWithConditionOther() {
59 // 获取当前线程session
60 Session cs = HibernateUtils.getCurrentSession();
61 // 开启事务,返回事务对象
62 Transaction tx = cs.beginTransaction();
63 // 编写hql语句
64 String hql = "from Linkman where lkmName like :lkmName";
65 // 执行hql,并返回query对象
66 Query query = cs.createQuery(hql);
67 // 为占位符赋值,具名方式
68 query.setString("lkmName", "R%");
69 // 获取结果集
70 Object obj = query.uniqueResult();
71 // 输出
72 System.out.println(obj);
73 // 提交事务
74 tx.commit();
75 }
76
77 // 分页查询
78 @Test
79 public void findWithPage() {
80 // 获取当前线程session
81 Session cs = HibernateUtils.getCurrentSession();
82 // 开启事务,并返回事务对象
83 Transaction tx = cs.beginTransaction();
84 // 编写hql
85 String hql = "from Linkman";
86 // 执行hql并返回query对象
87 Query query = cs.createQuery(hql);
88 // 为占位符赋值
89 query.setFirstResult(0);
90 query.setMaxResults(2);
91 // 获取结果集
92 List list = query.list();
93 for (Object object : list) {
94 System.out.println(object);
95 }
96 // 提交事务
97 tx.commit();
98 }
99
100 // 排序查询-id倒序
101 @Test
102 public void findByOrder() {
103 // 获取当前线程session
104 Session cs = HibernateUtils.getCurrentSession();
105 // 开启事务,并返回事务对象
106 Transaction tx = cs.beginTransaction();
107 // 编写hql
108 String hql = "from Linkman order by lkmId desc";
109 // 执行并返回query对象
110 Query query = cs.createQuery(hql);
111 // 获取结果集
112 List list = query.list();
113 for (Object object : list) {
114 System.out.println(object);
115 }
116 // 提交事务
117 tx.commit();
118 }
119
120 // 统计查询
121 @Test
122 public void findWithCount() {
123 // 获取当前线程session
124 Session cs = HibernateUtils.getCurrentSession();
125 // 开启事务,并返回事务对象
126 Transaction tx = cs.beginTransaction();
127 // 编写hql
128 String hql = "select count(lkmId) from Linkman";
129 // 执行并返回query对象
130 Query query = cs.createQuery(hql);
131 // 获取结果集,并输出
132 Object obj = query.uniqueResult();
133 System.out.println(obj);
134 // 提交事务
135 tx.commit();
136 }
137
138 // 投影查询
139 @Test
140 public void findProjection() {
141 // 获取当前线程session
142 Session cs = HibernateUtils.getCurrentSession();
143 // 开启事务,并返回事务对象
144 Transaction tx = cs.beginTransaction();
145 // 编写hql
146 String hql = "select new Linkman(lkmId,lkmName) from Linkman";
147 // 执行hql并返回query对象
148 Query query = cs.createQuery(hql);
149 // 获取结果集并输出
150 List list = query.list();
151 for (Object object : list) {
152 System.out.println(object);
153 }
154 // 提交事务
155 tx.commit();
156 }
157 }
158

hibernate笔记3--hql查询的更多相关文章

  1. Hibernate中关于HQL查询返回List<Object>数据的结果集问题

    ---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...

  2. hibernate学习(7)——HQL查询

    1.HQL查询定义 Hibernate查询分类: 1. get/load 根据OID检索 2. 对象视图检索 c.getOrders 3. Sql语句 createSqlQuery 4. Hql语句 ...

  3. 【Hibernate步步为营】--hql查询小介

    HQL 是指Hibernate Query Language,它是Hibernate的查询语言,拥有一套自己的查询机制,它的查询语句和SQL非常类似.在使用的时候可以非常快上手.HQL提供了基本上SQ ...

  4. Hibernate框架之HQL查询与Criteria 查询的区别

    Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...

  5. Hibernate用到HQL查询时的错误

    Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: student is ...

  6. Hibernate学习笔记(十) — HQL查询

    一.HQL的一对多查询 班级(1)->(多)学生 /** * 实现Classes与Student的内连接 * * SELECT c.*,s.* * from classes c INNER JO ...

  7. Java_Web三大框架之Hibernate+jsp+selvect+HQL查询数据

    俗话说:"好记性不如烂笔头".本人学习Hibernate也有一个星期了,对Hibernate也有一个初步的了解.下面对Hibernate显示数据做个笔记,使用租房系统的Hibern ...

  8. Hibernate中的HQL查询与缓存机制

    HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...

  9. Hibernate学习之hql查询语句

    *  页面上数据的字段和数据库中字段差不多,这个时候,采用迫切连接  结构比较好,如果页面上的字段很少,要按照需求加载数据,采用带构造函数的select查询 实例讲解:转自:http://www.cn ...

  10. Hibernate(十二):HQL查询(一)

    概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...

随机推荐

  1. Ubuntu使用crontab 使用举例

    除了这些固定值外,还可以配合星号(*),逗号(,),和斜线(/)来表示一些其他的含义:     星号          表示任意值,比如在小时部分填写 * 代表任意小时(每小时)   逗号      ...

  2. Jmeter连接MySQL配置(能执行多条sql语句)

    Database URL为MySQL的连接串,如果要执行多条SQL语句,后面还要添加“?allowMultiQueries=true”

  3. 22.ThinkPHP5框架缺陷导致远程命令执行

    前言: 昨天爆出了ThinkPHP5框架缺陷导致远程命令执行,大佬们都赶上潮流挖洞,小白还是默默学习一下这个漏洞 漏洞影响范围: Thinkphp 5.1.0 - 5.1.31 Thinkphp 5. ...

  4. [CentOS7] 常用工具 之 差异备份工具 rdiff-backup

    差异备份: rdiff-backup ==> 用于累积差异备份,加上自己写的shell script,每日备份,效果更佳 先用yum search rdiff-backup看看是否yum源含有r ...

  5. 解决Navicat无法连接到Mysql

    Navicat无法连接到Mysql,返回的错误码是Lost connection to MySQL server at ‘reading initial communication packet’, ...

  6. servlet之doPost()、doGet()

    1.doGet和doPost方法的具体应用?即在什么时候程序调用doGet方法,什么时候程序执行doPost方法? HttpServlet是从GenericServlet继承而来,因此HttpServ ...

  7. c/c++/c# 快速计算 Cumulative Normal Distribution 正态累积函数CDF

    链接: http://stackoverflow.com/questions/2328258/cumulative-normal-distribution-function-in-c-c http:/ ...

  8. 面向对象OO第三单元总结

    第三单元OO总结博客 1 梳理JML语言的理论基础.应用工具链情况 由于篇幅原因,这里只梳理几个在本单元常用的 注释结构 行注释://@annotation 块注释:/* @ annotation @ ...

  9. windows cmd命令 mkdir生成多个文件bug问题

    [问题现象] 有这样一个bat脚本,目的是为了根据时间创建文件夹 执行后却发现生产的文件夹有两个,名字被分开了,很是纳闷,一度以为自己哪里写错了 [问题原因] 经过查阅资料,一点一点的定位.发现是因为 ...

  10. 日志记录:MySQL系列之十一

    一.SQL命令历史 ~/.mysql_history 记录了在mysql中执行的命令历史 二.事务日志 transaction log:事务型存储引擎自行管理和使用 在一个事务提交后还没有存到磁盘的情 ...