zoukankan      html  css  js  c++  java
  • java动态生成SQL中的where条件

    在编写接口的时候,查询关系型数据库是经常有的事情,如果我们不用hibernate,也不想写大量无聊的SQL,那该怎么办?

    其实用反射的方式获取表的表名和字段名非常容易,但是拼接where条件则比较难,我尝试了一下,也是可以做到的。

    代码有些冗长,还有待改进

    @AllArgsConstructor
    @Data
    public class Condition {
    
        private String conditionName;
        private String operator;
        private Boolean isString;
        private Object conditionValue;
    
    
        /**
         * 构建有关键字占位符的SQL条件语句
         * @param conditions
         * @return
         */
        public static String toSql(List<Condition> conditions) {
            StringBuilder sb = new StringBuilder("where ");
            int size = conditions.size();
            for (int i = 0; i < size; i++) {
                Condition condition = conditions.get(i);
                String conditionName = condition.getConditionName();
                Object conditionValue = condition.getConditionValue();
                sb.append(conditionName)
                        .append(condition.getOperator());
                boolean conditionType = condition.getIsString();
                if (conditionType) {
                    sb.append(String.format(" '%s' ",conditionValue));
                } else {
                    sb.append(String.format(" %s ",conditionValue));
                }
                if (i != size - 1) {
                    sb.append(" and ");
                }
    
            }
            return sb.toString();
        }
    
        public static void main(String[] args) {
            List<Condition> conditions = new ArrayList<>();
            Condition bizmonth = new Condition("bizmonth", "=", true,"2021-06");
            Condition tenant_code = new Condition("tenant_code", "=", false,"0385");
            Condition create_time = new Condition("create_time", ">", true,"2021-06-09 10:08:00");
            conditions.add(bizmonth);
            conditions.add(tenant_code);
            conditions.add(create_time);
            String sql = toSql(conditions);
            System.out.println(sql);
    
    
        }
    }
    结果:
    where bizmonth= '2021-06'  and tenant_code= 0385  and create_time> '2021-06-09 10:08:00' 
  • 相关阅读:
    Python GUI编程(Tkinter)——Label and Button
    第一章——正则表达式(特殊符号和字符)
    最近用到的Blender相关技术总结
    第一章—正则表达式(简介/动机)
    发个随笔纪念Manim配置成功
    JUC并发工具的使用和原理
    线程启动与终止原理
    cpu缓存一致性
    布隆过滤器
    对象并不一定都是在堆上分配内存(逃逸分析)
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/14928298.html
Copyright © 2011-2022 走看看