Hibernate查询

Hibernate的HQL语法;
HQL语法和SQL语法应用一致,区别在于SQL语句针对的是表名和列名,而HQL语句针对的是Po类名和属性名;
完整的HQL语句:select ... from ...where...group by...having...order by...asc/desc;
支持删除和修改;
--查询所有,可以省略select *
String hql = "from UserPO ";
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery(hql);
<em>//查询结果可以返回List,也可返回Iterator类型;
//List类型不支持延迟加载;
//Iterator类型支持延迟加载,底层执行的SQL语句N+1条
//也就是说第一句SQL语句从数据库中查询出id集合,再根据id查询每个po对象;</em>

List list = query.list();
for(int i = 0; i < list.size(); i++){
UserPO user = (UserPO)list.get(i);
System.out.println(user.getName());
}
Iterator iterator = query.iterate();
while(iterator.hasNext()){
UserPO user = (UserPO)iterator.next();
System.out.println(user.getName());
}
session.close();



--查询指定字段
String hql = "select name from UserPO ";
list.get(i)这时候返回的类型和name类型一致;
String hql = "select name,id from UserPO ";
list.get(i)这时候返回的类型是一个Object[];
<em>如果想让list.get(i)在返回时候自动将查询字段封装到po对象中,需要满足一下两个条件;
(1)、在po类中书写默认构造和特定构造,比如查询name和id,则构造这两个属性;
(2)、在HQL语句中"select new UserPo(name,id) from UserPO ";--告诉Hibernate用哪个构造方法.
使用配置查询;
Hibernate允许在Mapping映射的配置文件中定义HQL语句
< query name="findbyname">
< ![CDATA[from Customer c where c.name = :username]]>
< /query>
代码里面:
Query query = session.getNamedQuery("findbyname");
query.setString("username","tiger");
List list = query.list();
也可以配置sql语句
< sql-query name="newfind">
< ![CDATA[select * from Customer where name = :username]]>
< return alias="customer" class="com.ms.hibernate.Customer"/>
< sql-/query>
Query query = session.getNamedQuery("newfind");
query.setString("username","tiger");
List list = query.list();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值