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' 
  • 相关阅读:
    mybatis(1.2)
    Could not find resource mybatis.xml 找不到mybatis主配置文件的三种解决方式
    mybatis(1)
    linux笔记(一)
    javaScript(笔记1)
    过滤器 防止用户恶意登陆
    用户注册调优 及Connection对象
    请求转发的实现及其优缺点
    重定向的实现及其优缺点
    http状态码
  • 原文地址:https://www.cnblogs.com/wangbin2188/p/14928298.html
Copyright © 2011-2022 走看看