Hibernate学习笔记之三种查询方式

1.三种查询方式


(1)HQL

HQL是完成面向对象的查询语句,具备继承,多态和关联等特性.它提供了非常强大的查询功能,在官方开发手册中,也将HQL作为推荐的查询模式.HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分.

(2)Criteria Queries 标准化对象查询

通过面向对象化的设计,将数据查询条件封装为一个对象.简单来讲,Criteria Query可以看作是传统SQL的对象化表示.

优点:可读性好,符合java程序员的编码习惯.

缺点:不够成熟,不支持投影或统计函数.

因为它比较符合java程序员的编码习惯,所以一些ORM实现中都提供了类似的实现机制,如Apache OJB

(3)Native SQL Queries

原生SQL查询,使用数据库sql语句进行查询


2.HQL示例

查询语句:

	public void hqlQuery(){
		Session session = HBUtils.getSession();
		org.hibernate.Query query = session.createQuery("from UserInfo as user where name=?");
		query.setString(0, "windskymr");
		List<UserInfo> list = query.list();
		System.out.println(list);
	}
更新语句

	public void hqlUpdate(){
		Session session = HBUtils.getSession();
		Transaction tx = session.beginTransaction();
		org.hibernate.Query query = session.createQuery("update UserInfo set name=? where name=?");
		query.setString(0, "windskymr2");
		query.setString(1, "windskymr");
		query.executeUpdate();
		tx.commit();
	}


指定列查询

//指定列查询
	public void hqlQueryColumns(){
		Session session = HBUtils.getSession();
		org.hibernate.Query query = session.createQuery("select id,name from UserInfo");
		List list = query.list();
		for(Object o: list){
			Object[] arr = (Object[])o;
			System.out.println(arr[0]+"," + arr[1]);
		}
		session.close();
	}
输出 
Hibernate: select userinfo0_.id as col_0_0_, userinfo0_.name as col_1_0_ from userinfo userinfo0_
1,windskymr2
2,naruto
3,fengsheng
13,testSaveMethod
列查询时查询结果List中的元素为Object[]

3.Creteria Query示例

	//标准对象化查询
	public void creteriaQuery(){
		Session session = HBUtils.getSession();
		org.hibernate.Criteria criteria = session.createCriteria(UserInfo.class);
		UserInfo user = new UserInfo();
		user.setId(1);
		user.setName("windskymr2");
		//添加条件
		org.hibernate.criterion.Criterion criterion = org.hibernate.criterion.Example.create(user);
		criteria.add(criterion);
		
		List<UserInfo> list = criteria.list();
		System.out.println(list);
		session.close();
	}

		//常用条件
		Restrictions.eq("name", "");
		Restrictions.ne("name", "");
		Restrictions.like("name", "");
		Restrictions.isNull("name");


4.原生SQL查询示例

	public void sqlQuery(){
		Session session = HBUtils.getSession();
		org.hibernate.SQLQuery query = session.createSQLQuery("select * from userinfo");
		query.addEntity(UserInfo.class);
		List<UserInfo> users = query.list();
		System.out.println(users);
		session.close();
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值