码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate 处理查询 in 字句

时间:2017-03-23 18:36:04      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:包含   class   sel   比较   可变参   ring   实体   query   hiberna   

from :

http://blog.csdn.net/wodestudy/article/details/38200421

 

在处理hibernate的实体查询,一般可以采用多种方式处理复杂的查询,比如HQL的灵活使用,Query的外部参数化赋值等。但是,对于IN字句在sql中的处理,也会出现,不过,一般不建议使用这样的sql处理,转而采用关联条件来处理这种查询。

 

一般对于可变参数传入在in字句中,大概有下面几种总结的方法:

 

1、直接外面拼转sql,这种拼sql的方式容易出现sql注入,比如in(123,drop table ttt,),而且如果in字句字符串太多,也会受限的,所以一般不赞成使用。

 

2、进一步解决上面的问题就是拼赋值sql,采用预处理处理,比如Select * from tab t where t.id in(?,?,?....),参数一并传入就行额。缺点还是受限于要包含的那些记录数据量。

 

3、一般在hibernate处理这个也比较方便,采用显示参数传递赋值,如 :

String sql =  from Task t where t.id(:ids)

Dao层处理也方便:

Query query = Session.getQuery(sql);

query.setParamList("ids",List);

大概处理方式就是这样,但数据量多也有一定缺陷。

 

4、建议系统中出现的in处理,直接采用关联查询处理,in字句本来性能就差,没做好就是是全表扫描

Hibernate 处理查询 in 字句

标签:包含   class   sel   比较   可变参   ring   实体   query   hiberna   

原文地址:http://www.cnblogs.com/lulj/p/6606575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!