-
什么是hql
HQL是Hibernate Query Language的缩写 -
hql和sql区别/异同
注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);// 设置返回的最大结果集
以上知识点均在下面代码中使用:
public class BookDao extends BaseDao{
public Integer add(Book book) {
Session session = SessionFactoryUtils.getSession();
Transaction transaction = session.beginTransaction();
Integer bid =(Integer)session.save(book);
transaction.commit();
session.close();
return bid;
}
public void del(Book book) {
Session session = SessionFactoryUtils.getSession();
Transaction transaction = session.beginTransaction();
session.delete(book);
transaction.commit();
session.close();
}
}
`public class BookDaoTest {
/**
* 级联新增
* book.hbm.xml:inverse=false
* vategory.hbm.xml:inverse=true
* inverse:反方
* 指是是将级联关系的维护的责任交个book对象
*
* jdbc:
* this.bookDao.add
* this.bookCategoryDao.add
*
* hibernate
* this.bookDao.add
*
* 在多对多的关系维护中,hibernate管理的是持久太对象
*/
@Test
public void testAdd1() {
Book book=new Book();
book.setBookName("不死不灭1");
book.setPrice(45f);
Category category=new Category();
category.setCategoryId(3);
book.getCategories().add(this.categoryDao.get(category));
this.bookDao.add(book);
}
/**
* 添加一个新的类别,绑定原有的某个书籍
*/
@Test
public void testAdd2() {
Category category=new Category();
category.setCategoryName("玄幻");
Book book=new Book();
book.setBookId(7);
category.getBooks().add(this.bookDao.get(book));
this.categoryDao.add(category);
}
/**
* book.hbm.xml:inverse=true
* vategory.hbm.xml:inverse=true
*/
@Test
public void testAdd3() {
Book book=new Book();
book.setBookName("不死");
book.setPrice(45f);
Category category=new Category();
category.setCategoryId(4);
book.getCategories().add(this.categoryDao.get(category));
this.bookDao.add(book);
}
/**
* 主控方删除
* 需求: 删除有关联的一本书
* 删除: 不死不灭的这本书, 目前这本书在中间表引用
* jdbc:
* this.bookVategoryDao.delete
* this.bookDao.delete
* hibernate
* this.bookDao.delete
*/
@Test
public void testDel1() {
Book book=new Book();;
book.setBookId(5);
this.bookDao.del(book);
}
/**
* 被控方删除
* 需求: 删除有关联的一个类别,包括该类别下的所以数据
* 删除玄幻这个类别, 目前这个类在中间表引用
* jdbc:
* this.bookVategoryDao.delete
* this.bookDao.delete
* hibernate
* this.bookDao.delete
*/
@Test
public void testDel2() {
Category category=new Category();
category.setCategoryId(4);
this.categoryDao.del(category);
}
}
```