Hibernate4学习笔记(四): 使用HQL语句从数据库检索数据(带检索条件)

日期: 2016-7-19


内容: 使用HQL语句从数据库检索数据(带检索条件)


1、数据库操作方法:

@Test
	public void queryById()
	{
		//获得session
		Session session = hibernate.getSession();
		
		//获得事务
		Transaction tx = hibernate.getTransaction();
		
		//hql查询语句:模糊查询
		String hql = "from Users users where users.email like ? ";
		
		//创建query对象
		Query query = session.createQuery(hql);
		
		//HQl语句中的“?”代表查询的传入值
		query.setString(0, "%l%");//对邮箱进行模糊查询
		
		//执行HQL语句
		List<Users> list = query.list();
		
		//遍历查询结果
		for(Users user: list){
			//System.out.println("UserName: "+user.getUsername()+"  Password:"+user.getPassword() +" Email:"+user.getEmail());
			System.out.println(user);
		}
		
	}

带检索ID的检索:

检索结果:

Hibernate: 
    select
        users0_.id as id1_,
        users0_.address as address1_,
        users0_.birthday as birthday1_,
        users0_.email as email1_,
        users0_.password as password1_,
        users0_.phone as phone1_,
        users0_.sex as sex1_,
        users0_.username as username1_ 
    from
        user_info users0_ 
    where
        users0_.email like ?
Users [id=1, username=yuashanshan, password=yuashanshan, email=ldayanlong@163.com, phone=18888888888, address=云端城市!, sex=男, birthday=2016-07-19 15:16:13.0]+

Users [id=2, username=luoting, password=luoting..123, email=lusing@163.com, phone=1381723113, address=上海市金山号, sex=女, birthday=2016-07-19 15:16:13.0]+

Users [id=3, username=刘德华, password=liudehjua..123, email=liudehua@163.com, phone=88888888888, address=香港特别行政区浅水湾8888号, sex=男, birthday=2016-07-19 15:16:13.0]+


按照参数的位置进行查询:

@Test
	public void queryById2()
	{
		//hql查询语句:模糊查询
		String hql = "from Users users where users.email like ? ";
		
		Query query = hibernate.getQuery(hql);
		//HQl语句中的“?”代表查询的传入值
		query.setString(0, "%l%");//对邮箱进行模糊查询
		
		Users user = new Users();
		
		//遍历查询结果
		hibernate.printQueryInfo(query, user);
	}
	

检索结果:

Hibernate: 
    select
        users0_.id as id1_,
        users0_.address as address1_,
        users0_.birthday as birthday1_,
        users0_.email as email1_,
        users0_.password as password1_,
        users0_.phone as phone1_,
        users0_.sex as sex1_,
        users0_.username as username1_ 
    from
        user_info users0_ 
    where
        users0_.email like ?
Users [id=1, username=yuashanshan, password=yuashanshan, email=ldayanlong@163.com, phone=18888888888, address=云端城市!, sex=男, birthday=2016-07-19 15:16:13.0]+

Users [id=2, username=luoting, password=luoting..123, email=lusing@163.com, phone=1381723113, address=上海市金山号, sex=女, birthday=2016-07-19 15:16:13.0]+

Users [id=3, username=刘德华, password=liudehjua..123, email=liudehua@163.com, phone=88888888888, address=香港特别行政区浅水湾8888号, sex=男, birthday=2016-07-19 15:16:13.0]+


按照参数的名称进行查询:

@Test
	public void queryByNane()
	{
		//HQL查询语句
		String hql = "from Users user where user.address=:userAddress";
		
		//获得query对象
		Query query = hibernate.getQuery(hql);
		//设置参数的信息
		query.setString("userAddress", "云南省昭通市镇雄县塘房镇白鸟村水沟组64号");
		
		//获得对象实例
		Users user = new Users();
		
		//遍历打印执行结果
		hibernate.printQueryInfo(query, user);
	}

检索结果:

Hibernate: 
    select
        users0_.id as id1_,
        users0_.address as address1_,
        users0_.birthday as birthday1_,
        users0_.email as email1_,
        users0_.password as password1_,
        users0_.phone as phone1_,
        users0_.sex as sex1_,
        users0_.username as username1_ 
    from
        user_info users0_ 
    where
        users0_.address=?


使用QBC操作:

@Test
	public void queryByCriteria()
	{
		//获得session对象
		Session session = hibernate.getSession();
		
		//创建Criteria对象:查询所有的User对象
		Criteria criteria = session.createCriteria(Users.class);
		
		//对查询结果按照出生日期的降序排列
		criteria.addOrder(Order.desc("birthday"));
		
		//执行查询获得结果
		List list = criteria.list();
		
		//遍历查询结果
		Iterator itor = list.iterator();
		
		while(itor.hasNext()){
			Users user = (Users)itor.next();
			System.out.println(user);
		}
	}


操作结果:

Hibernate: 
    select
        this_.id as id1_0_,
        this_.address as address1_0_,
        this_.birthday as birthday1_0_,
        this_.email as email1_0_,
        this_.password as password1_0_,
        this_.phone as phone1_0_,
        this_.sex as sex1_0_,
        this_.username as username1_0_ 
    from
        user_info this_ 
    order by
        this_.birthday desc
Users [id=1, username=yuashanshan, password=yuashanshan, email=ldayanlong@163.com, phone=18888888888, address=云端城市!, sex=男, birthday=2016-07-19 15:16:13.0]+

Users [id=2, username=luoting, password=luoting..123, email=lusing@163.com, phone=1381723113, address=上海市金山号, sex=女, birthday=2016-07-19 15:16:13.0]+

Users [id=3, username=刘德华, password=liudehjua..123, email=liudehua@163.com, phone=88888888888, address=香港特别行政区浅水湾8888号, sex=男, birthday=2016-07-19 15:16:13.0]+

Users [id=4, username=张学友, password=zhangxueyou, email=zhangxueyou@163.com, phone=99999999999, address=香港特别行政区湾仔码头, sex=男, birthday=2016-07-19 15:16:13.0]+

Users [id=5, username=feiyuqing, password=feiyuqing..123, email=feiyuqing@163.com, phone=12345678910, address=大陆行货, sex=男, birthday=2016-07-19 15:16:13.0]+

Users [id=6, username=wangbaoqiang, password=wangbaoqiang..456, email=wangbaoqiang@163.com, phone=1235689723, address=上海市浦江镇大十字123号, sex=男, birthday=2016-07-19 15:16:13.0]+


















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值