Hibernate查询笔记

1、动态实例查询:在查询表属性不全时返回的不是实体类的对象,而是Object[],这时将查询的属性封装到一个实体类对象中,即动态实例查询

String hql="select new Books(b.title,b.author) from Books as b";需要在Books实体类中添加这个构造方法public Books(String title,String author){ this.````````}


2、分页查询:

setFirstResult(int firstResult):设定查询对象的起始位置,0

setMaxResult(int maxResult):设定每次查多少对象,默认查所有

public void pagedSearch(int pageIndex,int pageSize){

````

int firstResult=(pageIndex-1)*pageSize;//页码从第一页开始,每页从0开始

query.setFirstResult(firstResult);

query.setMaxResult(pageSize);//页面大小设置为每次查询最大值

}


3、条件查询:

按参数位置查询:HQL中使用?  query设置参数值  setString()等

按参数名字查询:HQL中定义“命名参数”,命名参数以:开头,如String hql="from Books books where books.title=:bookTitle";

再在下面用query赋值:query.setString("bookTitle","Qt高级编程");   //记得bookTitle加引号哦!!


4、连接查询:

内连接:String hql="from Books b inner join b.publishers p where p.name='xxxxxx'";  obj=(Object[])itor.next();    book=(Books)obj[0];

左外连接:String hql="from Books b left join b.publishers p where p,name='xxxxx'";右连接类似

交叉连接:HQL中内外连接主要为关联类连接查询,对于相互无关的对象,可以使用交叉连接进行查询。

String hql="from People p,Users u where p.id=u.id";


5、子查询

相关子查询:子查询使用外层查询中的对象别名:String hql="from Publishers p where (select count(*) from p.books)>1";

无关子查询:子查询与外层查询语句无关:String hql="from Books b where b.unitPrice<(select avg(b1.unitPrice) from Books b1)";



6、使用Restrictions辅助类,进行Criteria查询的基本步骤

(1)获取Session

(2)创建Criteria对象

(3)使用Restrictions对象编写查询条件,并将查询条件加入Criteria对象

(4)执行查询,获得结果

例:Criteria criteria=session.createCriteria(Books.class);

criteria.addOrder(Order.asc("id"));

List list=criteria.list();

分组查询:

Criteria criteria=session.createCriteria(Books.class);

ProjectionList pList=Projections.projectionList();

pList.add(Projections.groupProperty("publishers"));

pList.add(Projections.rowCount);

criteria.setProjection(pList);

List list=criteria.list();

内置聚集函数:

public void testCriteria_3(){

Session session=HibernateSessionFactory.getSession();

Criteria criteria=session.ceateCriteria(Books.class);

ProjectionList pList=Projections.projectionList();

pList.add(Projections.sum("unitPrice"));

pList.add(Projections.avg("unitPrice"));

criteria.setProjection(pList);

List list=criteria.list();

}


组合查询:通过Restrictions工具类的响应方法动态构造查询条件,并将查询条件加入Criteria对象

public void testCriteria_4(Books condition){
Session session=HibernateSessionFactory.getSession();
Criteria criteria=session.createCriteria(Books.class);
//使用Restrictions对象编写查询条件,并将查询条件加入Criteria对象
if(condition!=null){
if(condition.getTitle()!=null && !condition.getTitle().equals("")){
//按书名进行筛选
criteria.add(Restrictions.like("title",condition.getTitle(),MatchMode.ANYWHERE));
}
if(condition.getAuthor()!=null && !condition.getAuthor().equals("")){
//按作者进行筛选
criteria.add(Restrictions.like("author", condition.getAuthor(), MatchMode.ANYWHERE));
}
}
List list=criteria.list();
Iterator itor=list.iterator();
while(itor.hasNext()){
Books book=(Books)itor.next();
System.out.println("书名:"+book.getTitle()
+"作者名:"+book.getAuthor());
}
}

关联查询:

public void testCriteria_5(){
Session session =HibernateSessionFactory.getSession();
Criteria bookCriteria=session.createCriteria(Books.class);
//设置从Books类中查询的条件
bookCriteria.add(Restrictions.like("title", "Qt",MatchMode.ANYWHERE));
//创建一个新的Criteria实例,以引用publishers集合中的元素
Criteria publishersCriteria=bookCriteria.createCriteria("publishers");
//设置从关联的Publishers类中查询的条件
publishersCriteria.add(Restrictions.like("name", "电子工业出版社"));
List list=publishersCriteria.list();
Iterator itor=list.iterator();
while(itor.hasNext()){
Books book=(Books)itor.next();
System.out.println("书名:"+book.getTitle()
+"作者:"+book.getAuthor());
}
}


创建Criteria对象和使用Restrictions对象编写查询条件,可以采用方法链编程风格:

public void testCriteria_5_1(){

Session session=HibernateSessionFactory.getSession();

List list=session.createCriteria(Books.class).add(Restrictions.like("title","C++",MatchMode.ANYWHERE)).

createCriteria("publishers").add(Restrictions.like("name","出版社")).list();

Iterator itor=list.iterator();

```

}


分页查询:使用Criteria并通过Restrictions工具类,实现分页查询

public void testCriteria_6(){

Session session=HibernateSessionFactory.getSession();

Criteria criteria=session.createCriteria(Books.class);

//从第一个对象开始查询

criteria.setFirstResult(0);

criteria.setMaxResults(4);

List list=criteria.list();

```

}


QBE查询:(Query By Example)举例查询,示例查询,由于QBE查询检索与指定示例对象具有相同属性值的对象,因此示例对象的创建是QBE查询关键。

public void testCriteria_7(Books condition){

Session session=HibernateSessionFactory.getSession();

Criteria criteria=session.createCriteria(Books.class);

//使用Example工具类创建示例对象

Example example=Example.create(condition);

//设置匹配模式为ANYWHERE

example.enableLike(MatchMode.ANYWHERE);

//设置不区分大小写

example.ignoreCase();

//为Criteria对象指定示例对象example作为查询条件

criteria.add(example);

List list=criteria.list();

```

}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值