二、更为复杂的查询实现(Query、Criteria)

1.一个简单的例子,根据用户名查询用户信息:

static void query(String name) {
		Session session = HibernateUtil.getSession();
		String queryString = "from User as user where user.id<?";
		Query query = session.createQuery(queryString);
		query.setString(0, name);
		List<User> list = query.list();
		for (User user : list) {
			System.out.println(user);
		}
	}

说明:HQL语句支持多态,举个例子:“from Object” 查询的整个数据库中的所有记录,因为Object是所有类的父类。

 

2.HQL的命名参数和Query接口的分页查询

如果HQL中的占位符‘?’太多,会导致程序难以编写,这时就可以使用“命名参数”:

static void query2(String name,String password) {
		Session session = HibernateUtil.getSession();
		String queryString = "from User as user where user.name=:name and 
                user.password=:password";
		Query query = session.createQuery(queryString);
		query.setString("name", name);
		query.setString("password", password);
		List<User> list = query.list();
		for (User user : list) {
			System.out.println(user);
		}
	}

使用Query实现分页很容易:

query.setFirstResult(firstResult) 和 query.setMaxResults(maxResults)

查询的结果是从firstResult到firstResult+maxResults-1

 

3.使用Criteria实现更加面向对象的条件查询:

static void query(String name) {
		Session session = HibernateUtil.getSession();
		Criteria cri = session.createCriteria(User.class);
		cri.add(Restrictions.eq("name", name)); // 添加约束条件
		List<User> list = cri.list();
		for (User user : list) {
			System.out.println(user);
		}
	}

使用Criteria实现分页和Query基本上是一样的

说明:使用Criteria进行查询,完全不用涉及SQL或者是HQL,如果你对他们不感兴趣,使用Criteria是一个非常不错的选择。Restrictions中有大量的static方法,能够添加各种查询条件。

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(sql)