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 ...
随机推荐
- Windows 上的应用程序在运行期间可以给自己改名(可以做 OTA 自我更新)
原文:Windows 上的应用程序在运行期间可以给自己改名(可以做 OTA 自我更新) 程序如何自己更新自己呢?你可能会想到启动一个新的程序或者脚本来更新自己.然而 Windows 操作系统允许一个应 ...
- Golang/Go goroutine调度器原理/实现【原】
Go语言在2016年再次拿下TIBOE年度编程语言称号,这充分证明了Go语言这几年在全世界范围内的受欢迎程度.如果要对世界范围内的gopher发起一次“你究竟喜欢Go的哪一点”的调查,我相信很多Gop ...
- jdk命令行工具系列
虚拟机堆转储快照分析工具使用jmap等方法生成java的堆文件后jhat:虚拟机堆转储快照分析工具 导出程序执行的堆信息 jps jps -l jmap -dump:format=b,file=D:/ ...
- python3中try异常调试 raise 异常抛出
一.什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在Python无法正常处理程序时就会发生一个异常. 异常是Python对象,表示一个错误. 当Py ...
- LCD 驱动 S3C2440A
LCD Control 1 Register 以16BPP为例 LCD Control 2 Register LCD Control 3 Register LCD Control 4 Register ...
- HttpClient使用详解与实战一:普通的GET和POST请求
简介 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的.最新的.功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议. Htt ...
- restframework中根据请求的类型修改序列化类
只要在视图中重写get_serializer_class方法就可以,用if对请求的类型进行判断 def get_serializer_class(self): if self.action == &q ...
- Hive使用过程中踩过的坑
hive启动时错误1 Cannot execute statement:impossible to write to binary long since BINLOG_FORMAT = STATEME ...
- python smtp登陆邮箱失败
>>> server.connect('smtp.163.com') (220, b'163.com Anti-spam GT for Coremail System (163com ...
- UVA572 Oil Deposits DFS求解
小白书上经典DFS题目. 1. 递归实现 // from: https://www.cnblogs.com/huaszjh/p/4686092.html #include <stdio.h> ...