hibernate——笔记六

排序

分页

投影查询

分组查询

映射文件中定义命名查询语句


package com.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.Util.HibernateSessionFactory;
import com.bean.User;

public class Hql {
	private static SessionFactory sessionFactory = HibernateSessionFactory.getSessionFactory();
	
	public static void show(Query query){
		List<User> list = query.list();
		for(Object obj:list){
			System.out.println(obj.toString());
		}
	}
	
	//简单查询
	public static void query(){
		Session session = sessionFactory.openSession();
		String hql = "from User";
		session.beginTransaction();
		
		Query query = session.createQuery(hql);
		
		show(query);
		
		session.close();
	}
	
	//使用别名
	public static void query1(){
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		String hql = "from User u where u.uid=:id";
		Query query = session.createQuery(hql);
		query.setInteger("id",1);
		show(query);
		session.close();
		
	}
	
	//排序
	public static void query2(){
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		String hql = "from User order by uid desc";
		Query q = session.createQuery(hql);
		show(q);
		session.close();
	}
	
	//分页 pageNum页数 显示第几页
	public static void query3(int pageNum){
		//每页的行数
		int pageRow = 3;
		
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		String hql1 = "select count(*) from User";
		Query q1 = session.createQuery(hql1);
		//总行数
		long Count =  (long) q1.list().get(0); 
		//总页数
		int pageCount = 0;
		if(Count%pageRow==0)
			pageCount = (int) (Count/pageRow);
		else
			pageCount = (int) (Count/pageRow+1);
		//如果要显示的页数大于总页数,显示最后一页
		if(pageNum>pageCount)
			pageNum = pageCount;
		//起始行
		int satrtRow = pageNum*(pageRow-1);
		
		String hql2 = "from User";
		Query q2 = session.createQuery(hql2);
		q2.setFirstResult(satrtRow);
		q2.setMaxResults(pageRow);
		
		show(q2);
		session.close();
	}
	
	//投影查询
	public static void query4(){
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		//第一种方法
		//String hql = "select new com.bean.User(uid,name) from User";
		//Query q = session.createQuery(hql);
		//show(q);
		
		//第二种方法
		//区别在于q.list()获取的是Object[]
		String sql = "select uid,name from User";
		Query q = session.createQuery(sql);
	//	SQLQuery sq = session.createSQLQuery(sql);
	//	List list = sq.list();
		List list = q.list();
		for(Object obj:list){
			Object[] o = (Object[]) obj;
			System.out.println(o[0]+"-----"+o[1]);
		}
		
		session.close();
	}
	
	//分组查询
	public static void query5(){
		Session session = sessionFactory.openSession();
		session.beginTransaction();
		
		String sql = "select name,count(name) from User group by name";
		SQLQuery sq = session.createSQLQuery(sql);
		List list = sq.list();
		for(Object obj: list){
			Object[] item = (Object[]) obj;
			System.out.println(item[0]+"------"+item[1]);
		}
		session.close();
	}
	
	//映射文件中定义命名查询语句
	public static void query6(){
		Session session = sessionFactory.openSession();
		
		Query q = session.getNamedQuery("findUserByName");
		q.setString("name", "%o%");
		show(q);
		session.close();
	}
	
	public static void main(String[] args) {
		//query();
		//query1();
		//query2();
		//query3(1);
		//query4();
		//query5();
		query6();
	}
}



<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bean">
<!-- 
package :默认的包前缀,如果没有指定包名,则默认使用此包名 
 -->
	
	<!-- 
		当表名和类名相同时,可以省略table属性,默认以类名作为表名
	 -->
	<class name="User">
		<id name="uid" column="Uid">
		<!-- 指定ID的增长策略 -->
			<generator class="native"></generator>
		</id>
		<property name="name" column="Name"></property>
		<property name="age" column="Age"></property>
	</class>
	
<query name="findUserByName">
<![CDATA[from User u where u.name like :name]]>
</query>

</hibernate-mapping>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值