java - 如何优雅的根据查询条件拼接sql

 晶晶9930_195 发布于 2022-11-07 13:33

管理平台很多查询条件,需要根据不同的查询条件拼接sql比如 a='xx' b like 'xx' c is null 等。我知道用mybatis的话可以根据是否查询条件为空来拼接sql。但是用其他框架比如JFinal 怎么更好的拼接,又能有效的防止sql注入?请前辈给个思路。谢谢

6 个回答
  • 拼复杂的sql建议用模板引擎来做,见我的文章:http://blog.csdn.net/rocks_le...

    2022-11-12 01:38 回答
  • 怎么代码写得和我一样烂?

    2022-11-12 01:38 回答
  • 采用builder模式

    2022-11-12 01:38 回答
  • 这种用户/界面驱动的组合查询,我之前一个项目中处理过,采用Hibernate的Criteria Query实现的。

    程序处理其实是比较简单的,重点在于这类真正的自定义组合查询的性能优化,这个才是关键。

    希望对你有点帮助。

    P.S. 在任何情况下,请不要直接拼装SQL,很可能不小心引入一个SQL注入点,犯下不可挽回的错误。

    2022-11-12 01:38 回答
  • 可以使用jOOQ,一个轻量级orm框架
    根据需求,你可以只用其中的sql builder(doc)

    // Fetch a SQL string from a jOOQ Query in order to manually execute it with another tool.
    String sql = create.select(field("BOOK.TITLE"), field("AUTHOR.FIRST_NAME"), field("AUTHOR.LAST_NAME"))
                       .from(table("BOOK"))
                       .join(table("AUTHOR"))
                       .on(field("BOOK.AUTHOR_ID").equal(field("AUTHOR.ID")))
                       .where(field("BOOK.PUBLISHED_IN").equal(1948))
                       .getSQL();
    
    2022-11-12 01:38 回答
  • String sql = "select * from user where 1 = 1 ";
            List<Object> params = new ArrayList<Object>();
            if(!StringUtils.isEmpty(username)){
                sql += " and username like ?";
                params.add("%"+username+"%");
            }
            if(!StringUtils.isEmpty(email)){
                sql +=" and email like ?";
                params.add("%"+email+"%");
            }
            if(!StringUtils.isEmpty(company)){
                sql +=" and company like ?";
                params.add("%"+company+"%");
            }
            if(status != null){
                sql += " and status = ?";
                params.add(status);
            }
            if(duestatus != null){
                if(duestatus == 1){
                    sql += " and  date(duedate) < date(now())";
                }else{
                    sql += " and  date(duedate) > date(now())";
                }
            }
            sql +=" order by regdate desc";
            return db().findList(sql, page, size, params.toArray());
    
    2022-11-12 01:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有