如果要进行一个多条件的查询,但又不知道用户到底对哪些条件进行了设定,所以,我们在编辑一个多条件查询的时候,会遇到这样的问题。
那么我们可以通过以下的方式进行解决:
假设一个场景--> 如下图:其中Customer.class 包含了以下的所有属性
开始解决问题:
那么我们在CustomerDao中可以这样进行编写:
public class CustomerDao{
private QueryRunner qr = new TxQueryRunner(); //TxQueryRunner为自己的写的继承类 -->源代码在最下面
public List query(Customer c){
StringBuffer sql = new StringBuffer("select * from t_customer where 1=1"); //重点。 此处解决掉了条件如何拼接的问题
List list = new ArrayList();
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.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 query(String sql, ResultSetHandler 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 query(String sql, ResultSetHandler 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 }
关于不定项参数的查询方法(多条件查询)