hql的运用一

  1. 什么是hql
    HQL是Hibernate Query Language的缩写

  2. hql和sql区别/异同
    在这里插入图片描述

注1:QuerySyntaxException:book is not mapped

  1. 处理返回的结果集
    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)

  2. hql中使用占位符
    4.1 ?占位符
    从下标0开始计算位置
    hibernate5之后不再支持?占位符

4.2 :命名参数

  1. 连接查询

  2. 聚合函数
    sum
    avg
    max
    min
    count

  3. 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);
		}
	}
	```

猜你喜欢

转载自blog.csdn.net/cg_9647/article/details/83546370
HQL