• 关于不定项参数的查询方法(多条件查询)


    如果要进行一个多条件的查询,但又不知道用户到底对哪些条件进行了设定,所以,我们在编辑一个多条件查询的时候,会遇到这样的问题。

    那么我们可以通过以下的方式进行解决:

    假设一个场景-->       如下图:其中Customer.class 包含了以下的所有属性

             

    开始解决问题:

    那么我们在CustomerDao中可以这样进行编写:

    public class CustomerDao{

      private QueryRunner qr = new TxQueryRunner(); //TxQueryRunner为自己的写的继承类 -->源代码在最下面

      public List<Customer> query(Customer c){

        StringBuffer sql = new StringBuffer("select * from t_customer where 1=1"); //重点。 此处解决掉了条件如何拼接的问题

        List<Object> list = new ArrayList<Object>();

        if(c.getCname!=null&&!c.getCname.trim().isEmpty()){

          sql.append(" and cname = ?");//and前面需要一个空格,与前面的内容分离开

          list.add(c.getCname);//把参数添加到 list 中

        }

        if(c.getGender!=null&&!c.getGender.trim().isEmpty()){

          sql.append(" and gender = ?");//and前面需要一个空格,与前面的内容分离开

          list.add(c.getGender);

        }

        if(c.getCellphone!=null&&!c.getCellphone.trim().isEmpty()){

          sql.append(" and cellphone = ?");//and前面需要一个空格,与前面的内容分离开

          list.add(c.getCellphone);

        }

        if(c.getEmail!=null&&!c.getEmail.trim().isEmpty()){

          sql.append(" and email = ?");//and前面需要一个空格,与前面的内容分离开

          list.add(c.getEmail);

        }

        return qr.update(sql.toString(),new BeanListHandler<Customer>(Customer.class),list.toArray());//返回结果

      }

    }

     -----结束-------

    附:(需要依赖:dbutils.jar , mysql.jar,c3p0.jar+配置文件,mchange-commons.jar ,czk-tools-1.0.jar.)

    1. t_customer-->指的是数据库中的表,它包含了cname、gender、cellphone、description

    2. TxQueryRunner.class -->继承了QueryRunner.class的类。

      代码如下:

     1 public class TxQueryRunner extends QueryRunner{
     2     
     3     @Override
     4     public int[] batch(String sql, Object[][] params) throws SQLException {
     5         Connection con = JdbcUtils.getConnection();
     6         int[] result = super.batch(con, sql, params);
     7         JdbcUtils.releaseConnection(con);
     8         return result;
     9     }
    10 
    11     @Override
    12     public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
    13             throws SQLException {
    14         Connection con = JdbcUtils.getConnection();
    15         T result = super.query(con, sql, rsh,params);
    16         JdbcUtils.releaseConnection(con);
    17         return result;
    18     }
    19 
    20     @Override
    21     public <T> T query(String sql, ResultSetHandler<T> rsh) throws SQLException {
    22         Connection con = JdbcUtils.getConnection();
    23         T result = super.query(con, sql, rsh);
    24         JdbcUtils.releaseConnection(con);
    25         return result;
    26     }
    27 
    28     @Override
    29     public int update(String sql, Object... params) throws SQLException {
    30         Connection con = JdbcUtils.getConnection();
    31         int result = super.update(con, sql, params);
    32         JdbcUtils.releaseConnection(con);
    33         return result;
    34     }
    35 
    36     @Override
    37     public int update(String sql, Object param) throws SQLException {
    38         Connection con = JdbcUtils.getConnection();
    39         int result = super.update(con, sql, param);
    40         JdbcUtils.releaseConnection(con);
    41         return result;
    42     }
    43 
    44     @Override
    45     public int update(String sql) throws SQLException {
    46         Connection con = JdbcUtils.getConnection();
    47         int result = super.update(con, sql);
    48         JdbcUtils.releaseConnection(con);
    49         return result;
    50     }
    51     
    52 }
  • 相关阅读:
    Java Cucumber项目构建可运行jar包
    Linux性能优化实战:分析CPU使用率常用命令
    Linux性能优化实战:开篇+平均负载
    Python语法:行缩进
    学习笔记:如何交付高ROI的自动化测试项目
    Coursera C 程序设计进阶,北京大学
    Coursera Programming Languages, Part A 华盛顿大学 Week 4
    Coursera Programming Languages, Part A 华盛顿大学 Week 3
    Coursera 计算导论与 C 语言基础,北京大学
    flex弹性布局
  • 原文地址:https://www.cnblogs.com/JamKong/p/4321004.html
Copyright © 2020-2023  润新知