ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Hibernate学习笔记三(HQL查询)

2019-05-20 22:51:02  阅读:201  来源: 互联网

标签:语句 Hibernate list 笔记 transaction session HQL User query


HQL语句

在Hibernate中,虽然简单的主键查询语句我们可以直接使用API让Hibernate帮我们生成,但是复杂的查询语句就需要我们自己手写,Hibernate就提供了一种HQL语句给我们使用,HQL是Hibernate Query Language的缩写,HQL是一种比较接近SQL的语句,只不过我们查询的对象不再是数据库的表,而是持久化类。

  • 全查语句
	/**
	 * 	全查操作
	 */
	@Test
	public void test1() {
		//通过自定义工具类获取session,详情见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		/**
		 * 	创建查询语句
		 * 	全查意思是将表中所有数据都查出来
		 * 	使用的HQL语句是“from 类名”,这里的User是持久化类的类名,注意不是表名
		 * 	不能使用select * 
		 */
		Query query = session.createQuery("from User");
		/**
		 * 	获取所有数据,返回的是list集合,集合放的是持久化类的对象
		 */
		List<User> list = query.list();
		/**
		 * 	遍历打印每一条数据
		 */
		for (User user : list) {
			System.out.println(user);
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 单列查询
/**
	 * 	单列查找操作
	 */
	@Test
	public void test2() {
		//通过自定义工具类获取session,详情见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		/**
		 * 	创建查询语句
		 * 	单列查找意思是将表中某一列的所有数据都查出来
		 * 	使用的HQL语句是“select 类属性名 from 类名”,
		 * 	这里的User是持久化类的类名,注意不是表名,uname是类中的属性名
		 */
		Query query = session.createQuery("select uname from User");
		/**
		 * 	获取所有数据,返回的是list集合,集合放的是Object对象
		 */
		List<Object> list = query.list();
		/**
		 * 	遍历打印每一条数据
		 */
		for (Object object : list) {
			System.out.println(object);
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 多列查询
/**
	 * 	多列查找操作
	 */
	@Test
	public void test3() {
		//通过自定义工具类获取session,详情见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		/**
		 * 	创建查询语句
		 * 	多列查找意思是将表中多列的所有数据都查出来
		 * 	使用的HQL语句是“select 类属性名,类属性名 from 类名”,
		 * 	这里的User是持久化类的类名,注意不是表名,uid,uname是类中的属性名
		 */
		Query query = session.createQuery("select uid,uname from User");
		/**
		 * 	获取所有数据,返回的是list集合,集合放的是Object数组对象
		 */
		List<Object[]> list = query.list();
		/**
		 * 	遍历打印每一条数据
		 */
		for (Object[] object : list) {
			System.out.println(Arrays.toString(object));
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 条件查询
/**
	 * 	条件查找操作
	 */
	@Test
	public void test4() {
		//通过自定义工具类获取session,详情见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		/**
		 * 	创建查询语句
		 * 	条件查找意思是将表中符合条件的所有数据都查出来
		 * 	使用的HQL语句是“from 类名 where + 条件”,这里可以使用?占位符
		 * 	这里的User是持久化类的类名,注意不是表名,条件的使用与SQL语句类似
		 */
		Query query = session.createQuery("from User where uname like ?");
		//设置占位符的值,从0开始
		query.setParameter(0, "小%");
		/**
		 * 	获取所有数据,返回的是list集合,集合放的是user对象
		 */
		List<User> list = query.list();
		/**
		 * 	遍历打印每一条数据
		 */
		for (User user : list) {
			System.out.println(user);
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 分页查询
/**
	 * 	分页查找操作
	 */
	@Test
	public void test5() {
		//通过自定义工具类获取session,详情见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		/**
		 * 	创建查询语句
		 * 	不使用limit,因为有可能使用数据库不是mysql,可能是其他数据库,limit就不起作用
		 */
		Query query = session.createQuery("from User");
		//设置从第几条数据开始查
		query.setFirstResult(1);
		//设置每次查询几条数据
		query.setMaxResults(2);
		/**
		 * 	获取所有数据,返回的是list集合,集合放的是user对象
		 */
		List<User> list = query.list();
		/**
		 * 	遍历打印每一条数据
		 */
		for (User user : list) {
			System.out.println(user);
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 投影查询
/**
	 * 	投影查找操作
	 */
	@Test
	public void test6() {
		//通过自定义工具类获取session,详情见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		/**
		 * 	创建查询语句
		 * 	投影查找意思是将表中一列或多列的所有数据都查出来之后封装成持久化对象返回
		 * 	HQL语句:select new 类名(一个或多个类属性名) from User
		 * 	注意根据要封装的哪几列属性,在持久化类中要有相应的构造方法,空构造也要保留
		 */
		Query query = session.createQuery("select new User(uid,uname) from User");
		/**
		 * 	获取所有数据,返回的是list集合,集合放的是user对象
		 */
		List<User> list = query.list();
		/**
		 * 	遍历打印每一条数据
		 */
		for (User user : list) {
			System.out.println(user);
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 聚合查询
/**
	 * 	聚合函数操作
	 */
	@Test
	public void test7() {
		//通过自定义工具类获取session,详情见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		/**
		 * 	创建查询语句
		 * 	使用的HQL语句是“select 聚合函数 from 类名”,这里的User是持久化类的类名,注意不是表名
		 * 	不能使用select * 
		 */
		Query query = session.createQuery("select count(*) from User");
		/**
		 * 	注意聚合函数返回的一般是一个数值,这里使用uniqueResult,返回Object
		 */
		Object object = query.uniqueResult();
		/**
		 * 	遍历打印每一条数据
		 */
		System.out.println(object);
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}
  • 排序查询
/**
	 * 	排序查询操作
	 */
	@Test
	public void test8() {
		//通过自定义工具类获取session,详情见笔记一
		Session session = HibernateUtil.openSession();
		//开启事务
		Transaction transaction = session.beginTransaction();
		/**
		 * 	创建查询语句
		 * 	使用的HQL语句是“from 类名 order by 属性名  desc/asc”,这里的User是持久化类的类名,注意不是表名
		 * 	不能使用select * 
		 */
		Query query = session.createQuery("from User order by uid asc");
		/**
		 * 	获取所有数据,返回的是list集合,集合放的是user对象
		 */
		List<User> list = query.list();
		/**
		 * 	遍历打印每一条数据
		 */
		for (User user : list) {
			System.out.println(user);
		}
		//提交事务
		transaction.commit();
		//关闭资源
		session.close();
	}

标签:语句,Hibernate,list,笔记,transaction,session,HQL,User,query
来源: https://blog.csdn.net/qq_44325167/article/details/90348165

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有