欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hibernate的三种查询方式Criteria,SQLQuery,Query

程序员文章站 2024-03-02 18:39:52
...

Hibernate提供了三种查询的方式:

hql(hibernate query language):hibernate自定义的一种查询方式,语法和sql相似。

Criteria(query by criteria):一种完全面向对象的查询方式,对pojo类操作。

SQLQuery:通过sql查询。

Criteria

Critercia由session创建:

	                //创建Criteria对象
			Criteria criteria = session.createCriteria(User.class);
			List<User> userList = criteria.list();
			for (User user : userList) {
				System.out.println(user.toString());
			}

利用Restrictions 

可以通过criteria.add(Criterion age);方法为criteria对象添加条件,其中Criterion实例可以有工具类Restrictions 创建:

		        //添加组合or条件
			Criterion criterion = Restrictions.or(Restrictions.like("name", "%污染"), Restrictions.like("name", "调查"));
			criteria.add(criterion);
			//添加查某ID查询条件
			criteria.add(Restrictions.idEq(2));
			//查询age值大于等于13,ge是大于等于,gt是大于,eq是等于,le是小于等于
			criteria.add(Restrictions.ge("age", 13));
			//查询name在某集合里
			criteria.add(Restrictions.in("name", new String[]{"是","调查"}));

利用Projections

通过Projections实例对查询的结果进行统计:

			//统计id的行记录
			criteria.setProjection(Projections.count("id"));
			Object ageCount = criteria.uniqueResult();
			System.out.println(ageCount.toString());

其余还有:avg(),rowCount(),countDistinct(),max(),min(),sum(),分组groupProperty()

分组后统计行数

			ProjectionList projections=Projections.projectionList();
			projections.add(Projections.groupProperty("age"));
			projections.add(Projections.count("age"));
			criteria.setProjection(projections);
			List userList = criteria.list();
			//遍历返回User集合
			Iterator iterator=userList.iterator();
			while(iterator.hasNext()){
				Object[] object=(Object[]) iterator.next();
				System.out.println(object[0]+":"+object[1]);
			}

为Criteria对象添加排序条件,排序可以通过Order实例实现:

			//添加根据id倒序排序,asc为从大到小
			criteria.addOrder(Order.desc("id"));

为Criter对象设置分页

	                //设置从第几条记录开始
			criteria.setFirstResult(1);
			//设置每页的记录数
			criteria.setMaxResults(10);
			//执行查询
			List<User> userList = criteria.list();

hql(Hibernate Query Language

创建Query对象
                        //创建Query对象
			Query query = session.createQuery("from User");

			List<User> userList = query.list();
			for (User user : userList) {
				System.out.println(user.toString());
			}

from User中的User为实体类,hql对实体类操作

占位符条件查询

	                //占位符条件查询
			Query query = session.createQuery("from User where name=?");
			//占位符下标从0开始,也可用setParameter,当Integer类型时用setInteger
			query.setString(0, "调查");
			List<User> userList = query.list();
			for (User user : userList) {
				System.out.println(user.toString());
			}          

查询某结果封装Map

                       //查询某结果封装Map
			Query query = session.createQuery("select new map(name as username,job as userage) from User");
			//占位符下标从0开始,也可用setParameter,当Integer类型时用setInteger
			//query.setString(0, "调查");
			List<Map<String,String>> userList = query.list();
			for (Map<String, String> user : userList) {
				System.out.println(user.get("username")+":"+user.get("userage"));
			}

其他关键字

排序

from User Order by id desc

分组

select COUNT(user) from User user GROUP BY user.age

还有其他or,and,left join,right join 等于sql相似。

为Query对象设置分页

query.setFirstResult(1); //设置起点,默认为0
query.setMaxResults(3);  //设置每页记录数

SQLQuery

                        SQLQuery query = session.createSQLQuery("select * from user");
			//query.setEntity(0, User.class);
			List objectValue =query.list(); //返回为List<Object>
			for (Object object : objectValue) {
				Object[] objectvalue=(Object[])object;  //object强转数组类型
				for (Object value : objectvalue) {
					System.out.print(value+"  ");
				}
				System.out.println();
			}

实体查询

query.addEntity(User.class);
限制指定行
query.addScalar("age");

将结果转换类型

query.setResultTransformer(Transformers.aliasToBean(UserPart.class)); //UserPart中的属性与返回结果中的属性名一致,即addScalar中的实参

SQLQuery设置分页

query.setFirstResult(1);
query.setMaxResults(2);


相关标签: Hibernate Criteria