回顾:
多对对的关系维护
级联新增
主控方的新增
被控方的新增
cascade=save-update inverse=true
结论:主控方新增时,中间表数据是会随之发生改变的
级联删除
主控方删除 是会级联删除中间表数据的
被控方删除 如果说这条数据被中间表所应用,是会报错的
1、拿到被控方数据
2、通过被控方获取到主控方数据,然后通过主控方解除关系
2、删除被控方
-
什么是hql
HQL是Hibernate Query Language的缩写查全部
-
hql和sql区别/异同
HQL SQL
类名/属性 表名/列名
区分大小写,关键字不区分大小写 不区分大小写
别名 别名
?,从下标0开始计算位置(hibernate5之后不支持) ?,从顺序1开始计算位置
:命名参数 不支持:命名参数
面向对象的查询语言 面向结构查询语言注1:QuerySyntaxException:book is not mapped
-
处理返回的结果集
3.1 单个对象
select没有逗号
3.2 Object[]
b.bookId, b.bookName
3.3 Map
new Map(b.bookId as bid, b.bookName as bname)
3.4 new 构造方法(attr1,attr2)
new Book(b.bookId, b.price) -
hql中使用占位符
4.1 ?占位符
从下标0开始计算位置
hibernate5之后不再支持?占位符
4.2 :命名参数
-
连接查询
-
聚合函数
sum
avg
max
min
count -
hql分页
int page = 2;// 页码:page
int row = 10;// 每页行数:rows
query.setFirstResult((page - 1) * row);// 设置起始记录下标
query.setMaxResults(row);// 设置返回的最大结果集
主要测试代码
package com.zking.seven;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.zking.eight.dao.PageBean;
import com.zking.five.entity.Book;
import com.zking.two.util.SessionFactoryUtil;
public class HqlTest {
private Session session;
private Transaction beginTransaction;
@Before
public void before() {
session = SessionFactoryUtil.getSession();
beginTransaction = session.beginTransaction();
}
@After
public void after() {
beginTransaction.commit();
session.close();
}
/**
* 返回单个对象
*/
@Test
public void test1() {
String hql="from User where id=1";
Query query = session.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj.getClass().getName());
System.out.println(obj);
}
/**
* 返回多个对象
*/
@Test
public void test2() {
String hql="from User";
Query query = session.createQuery(hql);
List list = query.list();
for (Object object : list) {
System.out.println(object);
}
}
/**
* 返回字符串
*/
@Test
public void test3() {
String hql="select userName from User where id=1";
Query query = session.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj.getClass().getName());
System.out.println(obj);
}
/**
* 返回数组
*/
@Test
public void test4() {
String hql="select userName,userPwd from User where id=1";
Query query = session.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj.getClass().getName());
System.out.println(Arrays.toString((Object[]) obj));
}
/**
* 返回map集合
*/
@Test
public void test5() {
String hql="select new map(userName as userName,userPwd as userPwd) from User where id=1";
Query query = session.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj.getClass().getName());
System.out.println(obj);
}
/**
* 返回user对象
*/
@Test
public void test6() {
String hql="select new User(userName,userPwd) from User where id=1";
Query query = session.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj.getClass().getName());
System.out.println(obj);
}
/**hql中的命名参数
* query.setParameter("id", 2);
*/
@Test
public void test7() {
String hql="select new User(userName,userPwd) from User where id in :ids";
Query query = session.createQuery(hql);
List<Integer>ids=new ArrayList<>();
ids.add(1);
ids.add(2);
// query.setParameter("id", 2);
query.setParameterList("ids", ids);
// Object obj = query.getSingleResult();
// System.out.println(obj.getClass().getName());
// System.out.println(obj);
List list = query.list();
for (Object object : list) {
System.out.println(object);
}
}
/**
* 连接查询
*/
@Test
public void test8() {
String hql="select new map(o.orderNo as a,oi.quantity as b) from Order o,OrderItem oi where o=oi.order";
Query query = session.createQuery(hql);
List list = query.list();
for (Object object : list) {
System.out.println(object);
}
}
/**
* 聚合函数
*/
@Test
public void test9() {
String hql="select count(*) from User";
Query query = session.createQuery(hql);
Object obj = query.getSingleResult();
System.out.println(obj.getClass().getName());
System.out.println(obj);
}
/**
* 分页
*/
@Test
public void test10() {
String hql="from User";
Query query = session.createQuery(hql);
int page=1;
int offset=3;
query.setFirstResult((page-1)*offset);
query.setMaxResults(offset);
List list = query.list();
for (Object object : list) {
System.out.println(object);
}
}
}