Hibernate HQL 语言用法

一:实体对象查询

from Book  或者  指定一个别名 from Book book

测试用例:查询Book对象的所有信息

private static void HibernateHqlQuery() {
		 Session session = HibernateUtil.getSession(); 
		 Query query = session.createQuery("from Book");  
	     List<Book> stus = query.list();  
	     for (Book book : stus) {  
	        System.out.println(book.getName());  
	     }  
		
	}

控制台打印结果:


查看下数据库表的数据是否一致



二:条件查询

private static void HibernateHqlQuery() {
		 Session session = HibernateUtil.getSession(); 
	     Query query = session.createQuery("from Book book where book.id=1001");  
	     List<Book> stus = query.list();  
	     for (Book book : stus) {  
	        System.out.println(book.getName());  
	     }  
		
	}


三:HQL参数绑定

1:利用顺序占位符?代替具体参数(不提倡

private static void HibernateHqlQuery() {
		 Session session = HibernateUtil.getSession(); 
		 Query query = session.createQuery("from Book book where book.name=?");
		 query.setParameter(0, "英语");		 
	     List<Book> stus = query.list();  
	     for (Book book : stus) {  
	        System.out.println(book.getName());  
	        System.out.println(book.getId());  
	     }  
		
	}


2:引用占位符  :parameter,也就是 : 与自定义参数名的组合

private static void HibernateHqlQuery() {
		 Session session = HibernateUtil.getSession(); 
		 Query query = session.createQuery("from Book book where book.name=:name");
		 query.setParameter("name", "英语");
		 
	     List<Book> stus = query.list();  
	     for (Book book : stus) {  
	        System.out.println(book.getName());  
	        System.out.println(book.getId());  
	     }  	
	}


四:HQL排序查询

asc正序,desc降序

Query query = session.createQuery("from Book book order by book.id asc"); 

五:分组方法

Query query = session.createQuery("select stu.sex, count(*) from Student stu group by stu.sex"); 
		 List list = query.list();  
		 Iterator it = list.iterator();
		 while (it.hasNext()) {
			Object[] object = (Object[]) it.next();
	        System.out.println("性别:" + object[0]);  
	        System.out.println("人数:" + object[1]);  
		}



六:联合查询

公民表与身份证一对一映射关系,HQL左连接查询获取关联信息,前几篇博客介绍了映射关系,这里直接查看已经建立好的映射关系数据表的信息,如图



HQL左连接查询方式:

Query query = session.createQuery("select peo.id, peo.name, peo.sex, peo.age, c.idcard_code from People peo left join peo.idcard c"); 
		 List list = query.list();  
		 Iterator it = list.iterator();
		 while (it.hasNext()) {
			Object[] object = (Object[]) it.next();
			
	        System.out.println(object[0]);  
	        System.out.println(object[1]);  
	        System.out.println(object[2]);  
	        System.out.println(object[3]);  
	        System.out.println(object[4]);  
		}
      
		HibernateUtil.closeSession();


控制台结果打印:



七:子查询

子查询必须被()圆括号包围起来

例如:利用子查询获取

Query query = session.createQuery("from Student stu where stu.id = (select min(id) from Student)"); 
		 List<Student> stus = query.list();  
	     for (Student book : stus) {  
	        System.out.println(book.getName());  
	        System.out.println(book.getId());  
	        System.out.println(book.getSex());
	        System.out.println(book.getAge());
	        System.out.println(book.getSno());
	        System.out.println(book.getSchool());
	     } 


数据库数据



控制台打印结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值