Fork me on GitHub

多条件组合查询

// 条件(criteria) 分别为 cname, gender, cellphone, email
public List<Customer> query(Customer criteria){
    try{
        // 给出 sql 模板

        // 先给出一个 sql 语句的前缀
        // WHERE 条件为 1=1, 方便后面增加其他语句, 要注意 sql 语句各个单词之间的空格
        StringBuilder sql = new StringBuilder("SELECT * FROM t_customer WHERE 1=1");

        // 用来装载参数的 List 集合
        // 当判断一个条件存在后, 将该条件放入参数集合中
        List<Object> params = new ArrayList<Object>();

        // 判断各个条件是否存在
        String cname = criteria.getCname();
        if(cname != null && !cname.trim().isEmpty()){

            // 向 sql 模板中添加参数, 模糊查询
            sql.append(" and cname like ?");

            // 向 list 集合中添加参数
            params.add("%" + cname + "%");
        }

        String gender = criteria.getGender();
        if(gender != null && !gender.trim().isEmpty()){
            sql.append(" and gender=?");
            params.add(gender);
        }

        String cellphone = criteria.getCellphone();
        if(cellphone != null && !cellphone.trim().isEmpty()){
            sql.append(" and cellphone like ?");
            params.add("%" + cellphone + "%");
        }

        String email = criteria.getEmail();
        if(email != null && !email.trim().ieEmpty()){
            sql.append(" and email like ?");
            params.add("%"+email+"%");
        }

        // 执行 qr 方法
        // 注意将 sql 语句转换为 String 类型
        // 将 params 转换为数组类型
         QueryRunner qr = new QueryRunner();
         qr.query(sql.toString(),
                    new BeanListHandler<Customer>(Customer.class),
                    params.toArray());
    }catch(SQLException e){
        throw new RuntimeException(e);
    }
}

参考资料:

posted @ 2017-10-05 10:40  小a的软件思考  阅读(955)  评论(0编辑  收藏  举报