明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理

Hibernate 处理查询 in 字句

Posted on 2022-06-15 15:37  且行且思  阅读(523)  评论(0编辑  收藏  举报
在处理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字句本来性能就差,没做好就是是全表扫描。