一、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语句的更多相关文章

  1. python第六天 函数 python标准库实例大全

    今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...

  2. whdxlib

    1 数据库系统实现 实 验 指 导 书 齐心 彭彬 计算机工程与软件实验中心 2016 年 3 月2目 录实验一.JDBC 应用程序设计(2 学时) ......................... ...

  3. hibernate HQL添加语句

    1.Hibernate HQL添加语句 save();方法使用HQL语句来完成插入操作是不能实现的,不管你使用insert into....values...还是insert into.....sel ...

  4. 【.net 深呼吸】细说CodeDom(2):表达式、语句

    在上一篇文章中,老周厚着脸皮给大伙介绍了代码文档的基本结构,以及一些代码对象与CodeDom类型的对应关系. 在评论中老周看到有朋友提到了 Emit,那老周就顺便提一下.严格上说,Emit并不是针对代 ...

  5. 将表里的数据批量生成INSERT语句的存储过程 增强版

    将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...

  6. mysql学习之 sql语句的技巧及优化

    一.sql中使用正则表达式 select name,email from user where email Regexp "@163[.,]com$"; sql语句中使用Regex ...

  7. SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

    Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我 ...

  8. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  9. Oracle 数据库语句大全

    Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...

随机推荐

  1. 解决kali安装成功后没有声音的问题

    Kali Linux系统默认状态下,root用户是无法使用声卡的,也就没有声音.启用的方法如下: (1)在终端执行命令:systemctl --user enable pulseaudio (2)在/ ...

  2. redis源码分析(二)-rio(读写抽象层)

    Redis io抽象层 Redis中涉及到多种io,如socket与file,为了统一对它们的操作,redis设计了一个抽象层,即rio,使用rio可以实现将数据写入到不同的底层io,但是接口相同.r ...

  3. TCP/IP详解 IP路由选择

    TCP/IP详解 IP路由选择 在本篇文章当中, 将通过例子来说明IP路由选择器过程 如图所示, 主机A与主机B分别是处在两个不同的子网当中, 中间通过一个路由连接. 如果主机A请求与主机B进行通行, ...

  4. maven的setting配置文件中mirror和repository的区别

    当maven需要到的依赖jar包不在本地仓库时, 就需要到远程仓库下载 . 这个时候如果mavensetting.xml中配置了镜像 , 而且镜像配置的规则中匹配到目标仓库时 , maven认为目标仓 ...

  5. 《JAVA高并发编程详解》-程序可能出现死锁的场景

  6. 反射之关于MethodInfo的使用

    1.MethodInfo类是在System.Reflection命名空间底下,既然是在Reflection空间底下.故名思议关于反射相关的操作,其中比较重要的方法是Invoke()方法,它是加载相同程 ...

  7. shell编程必须要掌握的命令-xargs

    一,说xargs命令前,说一下什么是shell编程 什么是shell编程呢,说白了就是按一定的规则把各种命令组织起来,完成一定的事情.纯属个人理解,哈哈.不管是交互式的shell,还是非交互的shel ...

  8. 作用域插槽模板迭代的次数,取决于组件内部独立slot的数量

    第一种情况:内部有两个独立插槽(模板自动迭代2次) <!DOCTYPE html> <html> <head> <title> hello world ...

  9. JQ实现购物车全选跟总计全选

    //GoodsCheck购物车每个店铺的checkBox//goods-check购物车所有的checkBox//ShopCheck店铺全选的按钮//commlistFrm店铺商品的模块//allCh ...

  10. 使用SAP Cloud Application Programming模型开发OData的一个实际例子

    刚刚过去的SAP TechEd上,SAP CTO Juergen Mueller向外界传递了一个重要的信息:身处云时代大环境下的SAP从业者,在SAP云平台上该如何选择适合自己的开发方式? Juerg ...