hibernateHQL语句
一、hql
1. 什么是hql
HQL是Hibernate Query Language的缩写
查全部
2. hql和sql区别/异同
HQL SQL
类名/属性 表名/列名
区分大小写,关键字不区分大小写 不区分大小写
别名 别名
?,从下标0开始计算位置(hibernate5之后不支持) ?,从顺序1开始计算位置
:命名参数 不支持:命名参数
面向对象的查询语言 面向结构查询语言
hqlTest
public class HqlTest {
Session session=null;
Transaction trans=null;
BookDao bookDao=new BookDao();
// @Before
// public void setUp() {
// session=SessionFactoryUtils.openSession();
// trans=session.beginTransaction();
// }
//
// @After
// public void tearDown() {
// trans.commit();
// SessionFactoryUtils.closeSession();
// }
@SuppressWarnings("deprecation")
@Test
public void test() {
String hql="";
//一.HQL
//1.HQL之查询返回List<T>
// hql="from Book";
// Query<Book> createQuery = session.createQuery(hql, Book.class);
// List<Book> list = createQuery.list();
// for (Book book : list) {
// System.out.println(book);
// }
//2.HQL之查询返回单个属性
// hql="select b.bookName from Book b";
// Query query = session.createQuery(hql);
// List list = query.list();
// for (Object object : list) {
// System.out.println(object);
// }
//3.HQL之查询返回多个属性
// hql="select bookId,bookName from Book";
// Query createQuery = session.createQuery(hql);
// List list = createQuery.list();
// for (Object object : list) {
// //Object==object[]
// System.out.println(Arrays.toString((Object[])object));
// }
//4.HQL之new Map
// hql="select new Map(b.bookId as bid, b.bookName as bname) from Book b";
// Query query = session.createQuery(hql);
// List<Map<String, Object>> list = query.list();
// for (Map<String, Object> map : list) {
// System.out.println(map);
// }
// 5.HQL之new 构造方法
// hql="select new Book(b.bookId,b.bookName,b.price) from Book b ";
// Query createQuery = session.createQuery(hql);
// List list = createQuery.list();
// for (Object object : list) {
// System.out.println(object);
// }
// 6.HQL之命名参数
//hql="from Book where price>:min and price<:max";
// hql="from Book where bookId in (:ids)";
// Query<Book> query = session.createQuery(hql, Book.class);
// query.setParameter("min", 40f);
// query.setParameter("max", 1000f);
// query.setParameterList("ids",new Integer[] {1,2,3});
// List<Book> list = query.list();
// for (Book book : list) {
// System.out.println(book);
// }
//7.HQL之聚合函数(count/sum/avg/min/max)
// hql="select sum(b.price) as total from Book b";
// Query createQuery = session.createQuery(hql);
// List list = createQuery.list();
// for (Object object : list) {
// System.out.println(object);
// }
// 8.HQL之连接查询
// hql="select b.bookId,b.bookName,b.price"
// + ",c.categoryId,c.categoryName from Book b inner join "
// + "b.categroies c";
// Query query = session.createQuery(hql);
// List list = query.list();
// for (Object object : list) {
// System.out.println(Arrays.toString((Object[])object));
// }
// 9.HQL之分页查询
// int page=1;
// int rows=2;
//
// hql="from Book";
// Query<Book> query = session.createQuery(hql, Book.class);
// query.setFirstResult((page-1)* rows);
// query.setMaxResults(rows);
// List<Book> list = query.list();
// for (Book book : list) {
// System.out.println(book);
// }
//二.原生sql
//1.原生sql查询返回Object[]
String sql="";
// sql="select book_id,book_name,price from t_book_hb";
// NativeQuery query = session.createNativeQuery(sql);
// List list = query.list();
// for (Object object : list) {
// System.out.println(Arrays.toString((Object[])object));
// }
//2.原生sql返回list<T>
// sql="select book_id,book_name,price from t_book_hb";
// NativeQuery<Book> query = session.createNativeQuery(sql, Book.class);
// List<Book> list = query.list();
// for (Book book : list) {
// System.out.println(book);
// }
//3.原生sql查询返回单个属性
// sql="select book_name from t_book_hb";
// NativeQuery query = session.createNativeQuery(sql);
// List list = query.list();
// for (Object object : list) {
// System.out.println(object);
// }
//4.原生sql查询返回List<Map>,适用于多表联查返回结果
sql="SELECT * FROM t_book_hb b,t_book_category_hb bc,t_category_hb c\r\n" +
"WHERE b.`book_id`=bc.`bid` AND bc.`cid`=c.`category_id`";
NativeQuery query = session.createNativeQuery(sql);
//将结果集转换为Map集合
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
List<Map<String,Object>> list= query.list();
for (Map<String,Object> map : list) {
System.out.println(map);
}
}
BaseDao
public Session getSession() {
return SessionFactoryUtils.openSession();
}
/**
* 设置Query的查询参数
* @param params
* @param query
* @return
*/
public void setParamters(Map<String,Object> params,Query query) {
if(null==params||0==params.size())
return;
Set<Entry<String, Object>> set = params.entrySet();
String name=null;
Object value=null;
for (Entry<String, Object> entry : set) {
name=entry.getKey();
value=entry.getValue();
//判断参数是否是Collection,一般用于List/Set集合参数时使用
if(value instanceof Collection)
query.setParameterList(name, (Collection)value);
//判断参数是否是Object[]
else if(value instanceof Object[])
query.setParameterList(name, (Object[])value);
else
query.setParameter(name, value);
}
}
/**
* 将普通hql语句转换成查询总记录数的hql语句
* @param hql
* @return
*/
public String countSql(String hql) {
//from Book
//select * from Book
int start=hql.toUpperCase().indexOf("FROM");
return "select count(1) "+hql.substring(start);
}
/**
* 查询(支持分页)
* @param hql 普通hql语句
* @param params 请求参数
* @param pageBean 分页对象
* @return
*/
@SuppressWarnings("rawtypes")
public List executeQuery(String hql,Map<String,Object> params,PageBean pageBean) {
Session session=getSession();
Query query=null;
//1.根据满足条件查询总记录数
if(null!=pageBean&&pageBean.isPagination()) {
//select count(1) from Book where
String countHql=this.countSql(hql);
query = session.createQuery(countHql);
this.setParamters(params, query);
}
query=session.createQuery(hql);
//2.根据满足条件查询分页记录
if(null!=pageBean&&pageBean.isPagination()) {
query.setFirstResult(pageBean.getStartIndex());
query.setMaxResults(pageBean.getRows());
}
this.setParamters(params, query);
return query.list();
}
BookDao
public class BookDao extends BaseDao{
public void addBook(Book book) {
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
//保存
session.save(book);
transaction.commit();
SessionFactoryUtils.closeSession();
}
public Book get(Book book) {
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
//保存
Book b = session.get(Book.class, book.getBookId());
if(b!=null) {
Hibernate.initialize(b.getCategroies());
}
transaction.commit();
SessionFactoryUtils.closeSession();
return b;
}
//被控方
public void delBook(Book book) {
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
Book b = session.get(Book.class, book.getBookId());
if(null!=b) {
//解除关联关系
Set<Category> categroies = b.getCategroies();
for (Category category : categroies) {
b.getCategroies().remove(category);
}
session.delete(b);
}
transaction.commit();
SessionFactoryUtils.closeSession();
}
/***************************通用查询***************************/
public List<Book> list1(Book book,PageBean pageBean) {
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
//下面代码处理的是book实体类的条件查询
String bookName= book.getBookName();
//sql语句where后面可以直接写true,而hql不能出现true
String hql= "from Book where 1=1";
if(StringUtils.isNotBlank(bookName)) {
hql +=" and bookName like :bookName";
}
Query query=session.createQuery(hql);
if(StringUtils.isNotBlank(bookName)) {
query.setParameter("bookName",bookName);
}
//处理的是分页
if(pageBean !=null && pageBean.isPagination()) {
query.setFirstResult(pageBean.getStartIndex());
query.setMaxResults(pageBean.getRows());
}
List list = query.list();
transaction.commit();
session.close();
return list;
}
public List<Book> list2(Book book, PageBean pageBean) {
Session session = SessionFactoryUtils.openSession();
Transaction transaction = session.beginTransaction();
// 下面的代码处理的是book实体类的条件查询
String bookName = book.getBookName();
Map<String , Object> map = new HashMap<String, Object>();
// sql语句where后面可以直接写true,而hql语句不能出现true
String hql = "from Book where 1=1";
if(StringUtils.isNotBlank(bookName)) {
hql += " and bookName like :bookName";
map.put("bookName", bookName);
}
List list = super.executeQuery(hql, map, pageBean);
transaction.commit();
session.close();
return list;
}
}
测试
@Test
public void testList1() {
Book book = new Book();
// book.setBookName("T226");
PageBean pageBean = new PageBean();
pageBean.setPage(2);
List<Book> list1 = this.bookDao.list1(book, pageBean);
for (Book b : list1) {
System.out.println(b);
}
}

@Test
public void testList2() {
Book book = new Book();
book.setBookName("%西游记%");
PageBean pageBean = new PageBean();
// pageBean.setPage(2);
List<Book> list1 = bookDao.list2(book, pageBean);
for (Book b : list1) {
System.out.println(b);
}
}

hibernateHQL语句的更多相关文章
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- whdxlib
1 数据库系统实现 实 验 指 导 书 齐心 彭彬 计算机工程与软件实验中心 2016 年 3 月2目 录实验一.JDBC 应用程序设计(2 学时) ......................... ...
- hibernate HQL添加语句
1.Hibernate HQL添加语句 save();方法使用HQL语句来完成插入操作是不能实现的,不管你使用insert into....values...还是insert into.....sel ...
- 【.net 深呼吸】细说CodeDom(2):表达式、语句
在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系. 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下.严格上说,Emit并不是针对代 ...
- 将表里的数据批量生成INSERT语句的存储过程 增强版
将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...
- mysql学习之 sql语句的技巧及优化
一.sql中使用正则表达式 select name,email from user where email Regexp "@163[.,]com$"; sql语句中使用Regex ...
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- Oracle 数据库语句大全
Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...
随机推荐
- Linux下C++酒店管理系统
功能要求: 相关源码:码云:传送门,GitHub:传送门 相关图片: 拆分版 make编译 ./hotel运行 输入2,进入开房模块 相关源码: class.cpp #include ...
- CentOS7安装rabbitmq集群(二进制)
一.RabbiMQ简介 RabbiMQ是用Erang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡. RabbiMQ模式 RabbitMQ模式大概分为以下三种: ...
- [UOJ #393]【NOI2018】归程
题目大意:有一张$n$个点$m$条边的图,每个边有两个属性$a_i,b_i$.有$Q$个询问,每个询问给出$v,p$,表示所有边中$b_i\leqslant p$的边会被标记,在点$v$,可以通过不被 ...
- Flask框架 请求与响应 & 模板语法
目录 Flask框架 请求与响应 & 模板语法 简单了解Flask框架 Flask 框架 与 Django 框架对比 简单使用Flask提供服务 Flask 中的 Response(响应) F ...
- Appscan漏洞 之 加密会话(SSL)Cookie 中缺少 Secure 属性
近期 Appscan扫描出漏洞 加密会话(SSL)Cookie 中缺少 Secure 属性,已做修复,现进行总结如下: 1.1.攻击原理 任何以明文形式发送到服务器的 cookie.会话令牌或用户凭证 ...
- leetcode 学习心得 (1) (24~300)
源代码地址:https://github.com/hopebo/hopelee 语言:C++ 24.Swap Nodes in Pairs Given a linked list, swap ever ...
- 使用python模拟实现KNN算法
一.KNN简介 1.KNN算法也称为K邻近算法,是数据挖掘分类技术之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. 2.KNN算法的核心思想是如果一个样本 ...
- 根据不同配置.env获取不同的配置文件的配置
env 不同环境 1. 安装扩展 composer require vlucas/phpdotenv 2 . 创建文件 .env .env.test .env.production .env.exam ...
- 【函数】wm_concat包的订制
[函数]wm_concat包的订制 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道 ...
- Python学习日记(三十四) Mysql数据库篇 二
外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...