hibernate笔记3--hql查询
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查询的更多相关文章
- Hibernate中关于HQL查询返回List<Object>数据的结果集问题
---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...
- hibernate学习(7)——HQL查询
1.HQL查询定义 Hibernate查询分类: 1. get/load 根据OID检索 2. 对象视图检索 c.getOrders 3. Sql语句 createSqlQuery 4. Hql语句 ...
- 【Hibernate步步为营】--hql查询小介
HQL 是指Hibernate Query Language,它是Hibernate的查询语言,拥有一套自己的查询机制,它的查询语句和SQL非常类似.在使用的时候可以非常快上手.HQL提供了基本上SQ ...
- Hibernate框架之HQL查询与Criteria 查询的区别
Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...
- Hibernate用到HQL查询时的错误
Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: student is ...
- Hibernate学习笔记(十) — HQL查询
一.HQL的一对多查询 班级(1)->(多)学生 /** * 实现Classes与Student的内连接 * * SELECT c.*,s.* * from classes c INNER JO ...
- Java_Web三大框架之Hibernate+jsp+selvect+HQL查询数据
俗话说:"好记性不如烂笔头".本人学习Hibernate也有一个星期了,对Hibernate也有一个初步的了解.下面对Hibernate显示数据做个笔记,使用租房系统的Hibern ...
- Hibernate中的HQL查询与缓存机制
HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...
- Hibernate学习之hql查询语句
* 页面上数据的字段和数据库中字段差不多,这个时候,采用迫切连接 结构比较好,如果页面上的字段很少,要按照需求加载数据,采用带构造函数的select查询 实例讲解:转自:http://www.cn ...
- Hibernate(十二):HQL查询(一)
概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...
随机推荐
- Stream接口
数据读写可以看作是事件模式(Event)的特例,不断发送的数据块好比一个个的事件.读数据是read事件,写数据是write事件,而数据块是事件附带的信息.Node 为这类情况提供了一个特殊接口Stre ...
- 在Visual Studio开发的项目中引用GAC中的dll
Open the windows Run dialog (Windows Key + r) Type C:\Windows\assembly\gac_msil. This is some sort o ...
- UITableViewCell 的复用机制
cell重用机制 http://blog.cnrainbird.com/index.php/2012/03/20/guan_yu_uitableview_de_cell_fu_yong_tan_tan ...
- 理解linux服务器mcelog如何工作
What are Machine Check Exceptions (or MCE)? A machine check exception is an error dedected by your s ...
- CEPH安装教程(下)
创建 CEPH 文件系统 创建存储池 # ceph osd pool create cephfs_data 64 # ceph osd pool create cephfs_metadata 64 创 ...
- 使用urllib获取一个网页内所有a标签的href属性
import re, urllib.request, urllib.parse, urllib.error page = input('Enter - ') fhand = urllib.reques ...
- webpack@3.6.0(4) -- 配置模块化开发
本篇内容 watch 版权插件 hash.chunkhash.contenthash的区别 watch 修改文件时自动打包 webpack --watch //webpack.config.js,与d ...
- C#中参数值传递和址传递
概论 我认为的形参和实参是这样的,形参是形式上的参量,和"抽象类"的概念差不多,不是实际存在的.不用的时候不占用内存,被调用的时候分配内存,调用结束,释放内存.类似于"抽 ...
- 51nod1118(递推)
题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1118 题意: 中文题诶~ 思路: 因为机器人只能往下或者右 ...
- 洛谷P3043 [USACO12JAN]牛联盟Bovine Alliance
P3043 [USACO12JAN]牛联盟Bovine Alliance 题目描述 Bessie and her bovine pals from nearby farms have finally ...