Hibernate 处理查询 in 字句

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字句本来性能就差,没做好就是是全表扫描

posted on 2017-03-23 18:10  决心觉新  阅读(719)  评论(0编辑  收藏  举报