第一次写博客,加油!!!
sql语句后拼接条件
public class ParamCond extends BaseCondition {
private String id_c;// 主键
private String name_c;// 参数名称
private String param_key_c;// 参数键--糊模
private String param_key_v;// 参数键--精确
private String param_value_c;// 参数值
private String remark_c;// 备注
public void addCondition() {
add(name_c, "and name like ?", 3); //1
add(param_key_c, "and param_key like ?", 3);//2
add(param_key_v, "and param_key = ?");//3
add(param_value_c, "and param_value like ?", 3);//4
add(id_c, "and id <> ?");//5
}
protected void add(String value, String strSQL, int pos) {
if (null != strSQL && null != value && !"".equals(strSQL) && !"".equals(value)) {
condition.append(" " + strSQL);
if (pos == 1) {
paramList.add("%" + value);
} else if (pos == 2) {
paramList.add(value + "%");
} else if (pos == 3) {
paramList.add("%" + value + "%");
}
}
}
- 这里的addCondition为在字符串后面拼接条件的方法,上面1和2的add方法为拼接模糊查询sql语句的方法,在方法中新增一个参数(int pos),pos取值不同时,"%"的位置也不同。
- 3号add方法为按param_key字段值精确查询,这里为了不与2号add方法(按param_key字段值模糊查询)混淆,在该条件类中除了param_key_c以外还新增了一个param_key_v属性。
- 4号add方法为在sql语句where后拼接 id!=?的方法,该模块业务中,没有安装主键id值进行CRUD的操作,这里是为了在修改(update)系统参数时,在满足param_key不重复的情况下,忽略掉当前正在修改的记录。
因为需要先判断页面中填入的参数键是否重复,再更新数据库中的记录。可是当我们不修改当前记录的参数键时,在安装参数键查询数据库中的记录数时得出的结果count始终会>=1,这里就需要在跳转到修改系统参数页面时,将当前记录的主键id值放入页面中,如下:
<form:form name="form1" id="form1" method="post" modelAttribute="param" >
<form:input path="id" />
再在拼接按参数键查询查询数据库中记录的sql语句时,传入这个id值(也就是最上面的4号add方法),即 where param_key=? and id !=?。以此来排除当前正在操作的记录。