HIBERNATE主要查询方式总结

一口气写了hibernate配置文件加载和查询方式的总结,累死了~~

(1)SESSION接口
<1>save
          Tuser user=new Tuser();
           user.setName("junmine");
           session.save();
<2>get
  Tuser user=(Tuser)session.get(TUser.class,new Integer(1));
<3>delete
Tuser user=(Tuser)session.get(TUser.class,new Integer(1));
session.delete(user);
或者(HQL)
session.delete("from TUser where id=1");
<4>find(H2)
session.find(hql)
注:1.在H3中取消了find()方法,必须通过Query或Criteria接口进行查询(下面会介绍)
   2.get()与find()的不同在于参数,效果应该是一样的

(2)Query接口(面向HQL和Native SQL)
注:在H3之前,HQL仅用于数据查询;H3中,允许更新和删除
HQL<查询>

List list=session.createQuery("select user.name,user.age from TUser as user").list();
Iterator it=list.iterator();
while (it.hasNext()){
Object[] results=(Object[])it.next();
System.out.println(results[0]);
System.out.println(results[1]);
}
更符合面向对象风格,就用:
List list=this.session.createQuery("select
new TUser(user.name,user.age) from TUser as user").list();
Iterator it=list.iterator();
while (it.hasNext()){
TUser user=(TUser)it.next();
System.out.println(user.getName());
}
注:在查询结果中TUser对象仅仅是一个普通的JAVA对象,仅用于查询结果的封装,除了在构造时赋予的属性值外,其他属性均未赋予,如user.id为NULL.这意味着,我们无法通过Session对此对象进行更新
<更新>
Strig hql="update TUser set age=18";
Query query=session.createQuery(hql);
query.executeUpdate();
<删除>同上
Native SQL:
String sql="select {usr.*} from T_User usr";

//指定实体对象别名为usr,对象类型为TUser.class
List list=session.createSQLQuery(sql,"usr",TUser.class).list();

Iterator it=list.iterator();
......

(3)Criteria接口(面向对象查询模式,将数据查询条件封装为一个对象)
Criteria criteria=session.createCriteria(TUser.class);
criteria.add(Expression....);//增加指定条件(H3中,引入Restrictions类作为Expression的替代
List list=criteria.list();
for(int i=0;i<list.size();i++){
TUser user=(TUser)list.get(i);
System.out.println("User["+i+"]/t"+user.getName());
}
复合查询:
Criteria criteria=session.createCriteria(TUser.class);//查询所有用户的信息
Criteria addcritera=criteria.createCriteria("address");

//字段address为shangtai的记录

addcritera.add(Expression.like("address","%shangtai%"));

List list=criteria.list();
for(int i=0;i<list.size();i++){
System.out.println("User["+i+"]");
TUser user=(TUser)list.get(i);
System.out.println("/t"+user.getName());
Set addrSet=user.getAddresses();
Iterator it=addrSet.iterator();
while(it.hasNext())
{
TAddress addr=(TAddress)it.next();
System.out.println(addr.getAddress());
}
}
Criteria生命周期位于宿主Session生命周期之内,一旦Session销毁,Criteria实例也随之失效(若在其他地方需要同样的查询得重写份一样的代码)
DetachedCriteria可以脱离Session实例而独立存在,在需要时绑定Session,可解决上述问题
DetachedCriteria deCriteria=DetachedCriteria.forClass(TUser.class);
deCriteria.add(Expression...);
Criteria criteria=deCriteria.getExcutableCriteria(session);
Iterator it=criteria.list().iterator();
.......

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值