Java实现动态添加查询条件

今天遇到一个问题,就是需要根据前端页面发送的条件查询数据库记录,但是前端发送的条件是不确定的。如果使用mybatis的xml方法可以使用if标签灵活的添加判断条件,但是现在我使用的就是单纯的sql。

我是这样解决的:
在这里插入图片描述
使用case when 语句可以完成这样的sql拼接。值得注意的是判断的时候用的是is null/is not null,而不要使用=/!=

昨天忘了判断空字符串,修改如下:
在这里插入图片描述
之前是直接使用sql实现,今天使用java的方式实现动态添加查询条件:

操作如下:

(1)首先创建一个类封装查询条件
在这里插入图片描述
2)然后创建一个类封装查询方法

public class CustomerPartnerDaoP {
   public String selectPartner(  GetParmeter getParmeter) {
    StringBuilder sql = new StringBuilder();
    String ciname= getParmeter.getCiname();
    String citelephone= getParmeter.getCitelephone();
    int cisex= getParmeter.getCisex();
    String cibirthday= getParmeter.getCibirthday();
    String cizipcode= getParmeter.getCizipcode();
    String cifax= getParmeter.getCifax();
    String ciofficename= getParmeter.getCiofficename();
    String ciareacode=  getParmeter.getCiareacode();
    String ciareafullname= getParmeter.getCiareafullname();
    String ciaddress= getParmeter.getCiaddress();
    String cimodifiedtime= getParmeter.getCimodifiedtime();


    sql.append("select  ciid,ciname,citelephone,cisex,cibirthday,cizipcode,cifax,ciofficename,ciareacode ," +
            "ciareafullname,ciaddress,cimodifiedtime  from   qb_customer_info where 1=1 ");
    if(!Objects.isNull(ciname) && !"".equals(ciname)){
        sql.append(" and ciname").append("=").append("'"+ciname+"'");
    }
    if(!Objects.isNull(citelephone) && !"".equals(citelephone)){
        sql.append(" and citelephone").append("=").append("'"+citelephone+"'");
    }
    if(!Objects.isNull(cisex) && !"".equals(cisex)){
        sql.append(" and cisex").append("=").append(cisex);
    }
    if(!Objects.isNull(cibirthday) && !"".equals(cibirthday)){
        sql.append(" and cibirthday").append("=").append("'"+cibirthday+"'");
    }
    if(!Objects.isNull(cizipcode) && !"".equals(cizipcode)){
        sql.append(" and cizipcode").append("=").append("'"+cizipcode+"'");
    }
    if(!Objects.isNull(cifax) && !"".equals(cifax)){
        sql.append(" and cifax").append("=").append("'"+cifax+"'");
    }
    if(!Objects.isNull(ciofficename) && !"".equals(ciofficename)){
        sql.append(" and ciofficename").append("=").append("'"+ciofficename+"'");
    }
    if(!Objects.isNull(ciareacode) && !"".equals(ciareacode)){
        sql.append(" and ciareacode").append("=").append("'"+ciareacode+"'");
    }
    if(!Objects.isNull(ciareafullname) && !"".equals(ciareafullname)){
        sql.append(" and ciareafullname").append("=").append("'"+ciareafullname+"'");
    }
    if(!Objects.isNull(ciaddress) && !"".equals(ciaddress)){
        sql.append(" and ciaddress").append("=").append("'"+ciaddress+"'");
    }
    if(!Objects.isNull(cimodifiedtime) && !"".equals(cimodifiedtime)){
        sql.append(" and cimodifiedtime").append("=").append("'"+cimodifiedtime+"'");
    }


    return sql.toString();
}

3)使用@SelectProvider方法调用

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现可选多条件查询数据,可以使用动态SQL语句来构建查询语句。以下是一个示例代码,假设有一个表格名为`user`,其中有`id`、`name`、`age`和`gender`四个字段,我们需要根据传入的参数进行查询,参数包括`id`、`name`、`age`和`gender`,但是这些参数不一定全部都会有值,可能只有部分有值,甚至全部都没有值。代码如下: ```java public List<User> queryUsers(Integer id, String name, Integer age, String gender) { StringBuilder sql = new StringBuilder("SELECT * FROM user WHERE 1 = 1"); List<Object> params = new ArrayList<>(); if (id != null) { sql.append(" AND id = ?"); params.add(id); } if (name != null) { sql.append(" AND name LIKE ?"); params.add("%" + name + "%"); } if (age != null) { sql.append(" AND age = ?"); params.add(age); } if (gender != null) { sql.append(" AND gender = ?"); params.add(gender); } // 执行查询操作 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; List<User> userList = new ArrayList<>(); try { conn = getConnection(); ps = conn.prepareStatement(sql.toString()); for (int i = 0; i < params.size(); i++) { ps.setObject(i + 1, params.get(i)); } rs = ps.executeQuery(); while (rs.next()) { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setAge(rs.getInt("age")); user.setGender(rs.getString("gender")); userList.add(user); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭连接 closeAll(conn, ps, rs); } return userList; } ``` 在这个方法中,我们首先构建了一个通用的SELECT语句,并且where条件始终为true,这是为了方便后面根据传入的参数来动态添加查询条件。然后我们遍历参数列表,如果参数不为空,则根据参数类型不同,添加相应的查询条件。最后执行查询操作,将结果封装到一个List中返回。 需要注意的是,我们使用了预处理语句,这是为了避免SQL注入攻击,同时也可以提高查询效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值