hibernate之查询

Posted fjk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate之查询相关的知识,希望对你有一定的参考价值。

Query对象

    方便的对数据库和持久化对象进行查询,两种表达方式:HQL和SQL;

    Query经常用来绑定查询参数,限制查询条数。并最终执行查询语句。

HQL

查询一个简单类(查询所有)

	@Test //修改方法
		public void test3(){
			Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
			// 操作
			Query query = session.createQuery("from User");
			List list = query.list();
			System.out.println(list);
			//不需要关闭Configuration  因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
			//configuration相当于连接池
			session.close();
		}

 分页查询

		@Test //修改方法
		public void test3(){
			Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
			// 操作
			Query query = session.createQuery("from User");
			query.setFirstResult(0);//设置开始的位置
			query.setMaxResults(10);//设置查询多少条
			List list = query.list();
			for (Object object : list) {
				System.out.println(object);
			}
			//不需要关闭Configuration  因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
			//configuration相当于连接池
			session.close();
		}

 查看指定列

          @Test //查询指定列
		public void test4(){
			Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
			// 操作
			//查询指定列时,必须在javabean中提供该字段的构造方法  其他列为空
			Query query = session.createQuery("select new User(username,password) from User");
			List<User> list = query.list();
			for (User u : list) {
				System.out.println(u);
			}
			//不需要关闭Configuration  因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
			//configuration相当于连接池
			session.close();
		}

条件查询

	@Test //条件查询(无名称参数)
		public void test5(){
			Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
			// 操作
			//查询指定列时,必须在javabean中提供默认的构造方法(无参构造)  
			//因为有参会替换无参  然而在条件查询时会调用无参构造
			/*条件查询(无名称参数)
			 * Query query = session.createQuery("from User where username=?");
			query.setParameter(0, "zhangsan111");*/
			//条件查询(有名称参数)
			Query query = session.createQuery("from User where username=:myusername");
			query.setParameter("myusername", "zhangsan111");
			User user = (User) query.uniqueResult();
			System.out.println(user);
			//不需要关闭Configuration  因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
			//configuration相当于连接池
			session.close();
		}

  SQL

  查询所有

          @Test //sql查询
		public void test6(){
			Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
			// 操作
			SQLQuery query = session.createSQLQuery("select * from user");
			
			List<Object[]> list = query.list();
			for (Object object : list) {
				//打印地址值
				System.out.println(object);
			}
			/*object对象指向User类
			 * query.addEntity(User.class);
			List<User> list = query.list();
			for (User user : list) {
				System.out.println(user);
			}*/
			//不需要关闭Configuration  因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
			//configuration相当于连接池
			session.close();
		}

  条件查询

          @Test //sql条件查询()
		public void test7(){
			Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
			// 操作
			SQLQuery query = session.createSQLQuery("select * from user where username=?");
			query.setParameter(0, "zhangsan111");
			//object对象指向User类
			query.addEntity(User.class);
			User user = (User) query.uniqueResult();//转换时还是会让Query对象识别到User这个类
			System.out.println(user);
			//不需要关闭Configuration  因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
			//configuration相当于连接池
			session.close();
		}

Criteria对象

查询所有

          @Test //Criteria查询全部
		public void test8(){
			Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
			// 操作
			Criteria criteria = session.createCriteria(User.class);
			List list = criteria.list();
			for (Object object : list) {
				System.out.println(object);
			}
			//不需要关闭Configuration  因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
			//configuration相当于连接池
			session.close();
		}

  单条件查询/多条件查询

          @Test //Criteria条件查询查询
		public void test9(){
			Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
			// 操作
			Criteria criteria = session.createCriteria(User.class);
               //条件1 criteria.add(Restrictions.eq("username", "zhangsan111"));
               //条件2
               criteria.add(Restrictions.eq("username","zhangsan111"));
List list = criteria.list(); for (Object object : list) { System.out.println(object); } //不需要关闭Configuration 因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration //configuration相当于连接池 session.close(); }

  条件或

@Test //Criteria条件查询查询or
		public void test10(){
			Session session = HibernateUtils.getSession(); // 相当于得到一个Connection。
			// 操作
			Criteria criteria = session.createCriteria(User.class);
			//条件1
			criteria.add(Restrictions.or(Restrictions.eq("username", "zhangsan111"),Restrictions.eq("username", "fanjiankang")));
		
			List list = criteria.list();
			for (Object object : list) {
				System.out.println(object);
			}
			//不需要关闭Configuration  因为Configuration不是轻量级的。这样一个项目就只产生一个Configuration
			//configuration相当于连接池
			session.close();
		}

  Cariteria只是对于criteria的方法进行对于sql语句的控制,这样整个开发过程及其检索;

 





以上是关于hibernate之查询的主要内容,如果未能解决你的问题,请参考以下文章

hibernate之HQL

hibernate查询之条件查询

Hibernate之抓取策略

hibernate之查询

hibernate之SQL查询

具有运行时 pojos 的带有 Hibernate 的 OSGi 片段包