您的位置:首页 > 其它

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

2015-06-11 19:58 357 查看
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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: