二、更为复杂的查询实现(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方法,能够添加各种查询条件。

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值