• Hibernate 处理查询 in 字句


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

  • 相关阅读:
    10.28MySQL的介绍和安装
    10.24 Event事件,进程池与线程池,协程
    10.23GIL全局解释器锁,多线程作用,死锁,递归锁,信号量
    10.22进程互斥锁,队列,堆栈,线程
    10.21 操作系统发展史,进程
    10.18(粘包问题与解决方法,UDP,socketserver)
    day 67小结
    day 67作业
    day 66 小结
    day 66作业
  • 原文地址:https://www.cnblogs.com/Fooo/p/16378671.html
Copyright © 2020-2023  润新知