28.Hibernate-HQL查询.md
目录
1.概述
1)Get/load主键查询
2)对象导航查询
3)HQL查询, Hibernate Query language hibernate 提供的面向对象的查询语言。
4)Criteria 查询, 完全面向对象的查询(Query By Criteria ,QBC)
5)SQLQuery, 本地SQL查询
缺点:不能跨数据库平台:如果该了数据库,sql语句有肯能要改
使用场景: 对于复杂sql,hql实现不了的情况,可以使用本地sql查询。
2.HQL实例
public class App {
private static SessionFactory sf;
static {
sf = new Configuration()
.configure()
.addClass(Dept.class)
.addClass(Employee.class) // 测试时候使用
.buildSessionFactory();
}
/*
* 1) Get/load主键查询
2) 对象导航查询
3) HQL查询, Hibernate Query language hibernate 提供的面向对象的查询语言。
4) Criteria 查询, 完全面向对象的查询(Query By Criteria ,QBC)
5) SQLQuery, 本地SQL查询
*/
@Test
public void all() {
Session session = sf.openSession();
session.beginTransaction();
//1) 主键查询
// Dept dept =(Dept) session.get(Dept.class, 12);
// Dept dept =(Dept) session.load(Dept.class, 12);
//2) 对象导航查询
// Dept dept =(Dept) session.get(Dept.class, 12);
// System.out.println(dept.getDeptName());
// System.out.println(dept.getEmps());
// 3) HQL查询
// 注意:使用hql查询的时候 auto-import="true" 要设置true,
// 如果是false,写hql的时候,要指定类的全名
// Query q = session.createQuery("from Dept");
// System.out.println(q.list());
// a. 查询全部列
// Query q = session.createQuery("from Dept"); //OK
// Query q = session.createQuery("select * from Dept"); //NOK, 错误,不支持*
// Query q = session.createQuery("select d from Dept d"); // OK
// System.out.println(q.list());
// b. 查询指定的列 【返回对象数据Object[] 】
// Query q = session.createQuery("select d.deptId,d.deptName from Dept d");
// System.out.println(q.list());
// c. 查询指定的列, 自动封装为对象 【必须要提供带参数构造器】
// Query q = session.createQuery("select new Dept(d.deptId,d.deptName) from Dept d");
// System.out.println(q.list());
// d. 条件查询: 一个条件/多个条件and or/between and/模糊查询
// 条件查询: 占位符
// Query q = session.createQuery("from Dept d where deptName=?");
// q.setString(0, "财务部");
// q.setParameter(0, "财务部");
// System.out.println(q.list());
// 条件查询: 命名参数
// Query q = session.createQuery("from Dept d where deptId=:myId or deptName=:name");
// q.setParameter("myId", 12);
// q.setParameter("name", "财务部");
// System.out.println(q.list());
// 范围
// Query q = session.createQuery("from Dept d where deptId between ? and ?");
// q.setParameter(0, 1);
// q.setParameter(1, 20);
// System.out.println(q.list());
// 模糊
// Query q = session.createQuery("from Dept d where deptName like ?");
// q.setString(0, "%部%");
// System.out.println(q.list());
// e. 聚合函数统计
// Query q = session.createQuery("select count(*) from Dept");
// Long num = (Long) q.uniqueResult();
// System.out.println(num);
// f. 分组查询
//-- 统计t_employee表中,每个部门的人数
//数据库写法:SELECT dept_id,COUNT(*) FROM t_employee GROUP BY dept_id;
// HQL写法
// Query q = session.createQuery("select e.dept, count(*) from Employee e group by e.dept");
// System.out.println(q.list());
session.getTransaction().commit();
session.close();
}
// g. 连接查询
@Test
public void join() {
Session session = sf.openSession();
session.beginTransaction();
//1) 内连接 【映射已经配置好了关系,关联的时候,直接写对象的属性即可】
// Query q = session.createQuery("from Dept d inner join d.emps");
//2) 左外连接
// Query q = session.createQuery("from Dept d left join d.emps");
//3) 右外连接
Query q = session.createQuery("from Employee e right join e.dept");
q.list();
session.getTransaction().commit();
session.close();
}
// g. 连接查询 - 迫切连接
@Test
public void fetch() {
Session session = sf.openSession();
session.beginTransaction();
//1) 迫切内连接 【使用fetch, 会把右表的数据,填充到左表对象中!】
// Query q = session.createQuery("from Dept d inner join fetch d.emps");
// q.list();
//2) 迫切左外连接
Query q = session.createQuery("from Dept d left join fetch d.emps");
q.list();
session.getTransaction().commit();
session.close();
}
// HQL查询优化
@Test
public void hql_other() {
Session session = sf.openSession();
session.beginTransaction();
// HQL写死
// Query q = session.createQuery("from Dept d where deptId < 10 ");
// HQL 放到映射文件中
Query q = session.getNamedQuery("getAllDept");
q.setParameter(0, 10);
System.out.println(q.list());
session.getTransaction().commit();
session.close();
}
}
3.Criteria 查询
//4) Criteria 查询,
@Test
public void criteria() {
Session session = sf.openSession();
session.beginTransaction();
Criteria criteria = session.createCriteria(Employee.class);
// 构建条件
criteria.add(Restrictions.eq("empId", 12));
// criteria.add(Restrictions.idEq(12)); // 主键查询
System.out.println(criteria.list());
session.getTransaction().commit();
session.close();
}
4.SQL本地查询
5.分页
// 5) SQLQuery, 本地SQL查询
// 不能跨数据库平台: 如果该了数据库,sql语句有肯能要改。
@Test
public void sql() {
Session session = sf.openSession();
session.beginTransaction();
SQLQuery q = session.createSQLQuery("SELECT * FROM t_Dept limit 5;")
.addEntity(Dept.class); // 也可以自动封装
System.out.println(q.list());
session.getTransaction().commit();
session.close();
}
28.Hibernate-HQL查询.md的更多相关文章
- Hibernate HQL查询:
Hibernate HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查 ...
- Hibernate HQL查询语句总结
Hibernate HQL查询语句总结 1. 实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql="from User user ";L ...
- 转: Hibernate HQL查询 插入 更新(update)实例
1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...
- 第六讲(二) Hibernate HQL查询
HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibe ...
- Hibernate HQL查询的参数绑定
参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: ...
- Hibernate学习笔记-Hibernate HQL查询
Session是持久层操作的基础,相当于JDBC中的Connection,通过Session会话来保存.更新.查找数据.session是Hibernate运作的中心,对象的生命周期.事务的管理.数据库 ...
- hibernate HQL查询参数设置
Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: Prepa ...
- Hibernate HQL查询 插入 更新(update)实例
1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...
- Hibernate HQL查询(2)
hql是面向对象查询,格式:from + 类名 + 类对象 + where + 对象的属性 sql是面向数据库表查询,格式:from + 表名 + where + 表中字段 1.查询 一般在Hiber ...
- Hibernate HQL查询(1)
1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql ="from Users"; ...
随机推荐
- 剑指Offer 8. 跳台阶 (递归)
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 题目地址 https://www.nowcoder.com/pract ...
- Apple IAP Subscriptions
Apple Doc: https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/ ...
- Centos 安装 python2.7.10以及pip
安装python2.7.10 1. 下载安装包并解压 wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz tar -xf P ...
- Linux跨服务器发送文件
在要发送的文件所在的目录下,输入下列命令 第一种: scp -r test.jar root@127.0.0.1:$(pwd)/test.jar 其中root为服务器账户名,127.0.0.1为要发送 ...
- 洛谷P1605:迷宫(DFS)
题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右 ...
- oracle note
null null为无效的,未指定的,未知的活不可预知的值 null不是空格或0 包含null 的数学表达式其结果都为空值 null 永远!= null 判断某个字段为null,用 ename is ...
- 面向对象的编程思想和Java中类的概念与设计
面向对象的编程思想学习,面向对象内容的三条主线;1.java类及类的对象2.面向对象的三大特征3.其他关键字学习内容:3.1面向对象与面向过程面向对象与面向过程在应用上的区别 Java中类的概念与设计 ...
- ORA-02275: 此表中已经存在这样的引用约束条件
问题描述: 针对这个问题,发表一下我的观点.emp表和dept表使用hibernate关联查询时报的错,使用的是非注解形式,和其他一样.他们各自有entity,各自有一个hbm.xml文件,emp表这 ...
- robot framework浏览器与驱动的匹配
一.谷歌浏览器和火狐浏览器与驱动不匹配产生的问题 1.若在运行过程中出现[Unable to find a matching set of capabilities ][ WebDriverExcep ...
- zombodb安装试用
pg 数据库安装 参考如下安装 yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7-x86_64/pg ...