Hibernate基础之十二:HQL常用语句

本文详细介绍了使用HQL和Hibernate的FetchType、左连接、分页等操作进行数据库查询优化的方法,包括对象复制、导航查询、集合处理及利用占位符进行参数化查询等关键点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1+N:

1+N问题用:fetch=FetchType.LAZY 或在HQL中加 (from XXX left join fetch ....)解决

FetchType适合于不取子类的时候,

left join fetch适合于马上要子类,但不能执行太多SQL语句影响效率的时候




import org.hibernate.Query;//不是javax的


Query q = session.createQuery("from XXX x where x.value > '123'")//XXX是类名,x是别名
List<XXX> objs = (List<XXX>)q.list;
for(Category c : objs)
{
System.out.println(g.getName());
}




//对象不会重复:主键不同时(跟没写一样)
session.createQuery("select distinct x from XXX x order by c.value dsec")





//占位符:冒号加标注
Query q = session.createQuery("from XXX x where x.value > :min and x.value < :max");
q.setParameter("min",2);
q.setInteger("max",8);//可以指定类型





//分页:
Query q = session.createQuery("from XXX x where x.value > '123'");
q.setMaxResults(5);//每页5条
q.setFirstResult(3);//从第三条开始





//取出Object[]
Query q = session.createQuery("select x.id ,x.value from XXX x order by c.value dsec")//XXX是类名,x是别名
List<object[]> objs = (List<object[]>)q.list;
for(object[] os : objs)
{
System.out.println(os[0] + os[1]));
}




//导航:
//通过“点”找到设置好的映射关系,就不用连接表了:x.aaa.bbb.value
session.createQuery("from XXX x where x.aaa.bbb.value = 250");





//组装临时对象VO,要求VO里要有相应的构造函数
session.createQuery("select new Temp(x.id,x.value) from XXX x");






//uniqueResult
Query q = session.createQuery("from XXX x where x = :MySearch");
XXX x = new XXX();
x.setId(1);
q.setParameter("MySearch",x);


xxx res = (XXX)q.uniqueResult();//知道结果是唯一的,就不要List了
System.out.println(res.getCount());




//测试集合为空
("from XXX x where x.aaa is empty");




//Like
("from XXX x where x.aaa like '%A'");




//exists
("from XXX x where not exists (select from where)");















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值