关于java多条件查询SQL语句拼接的小技巧

时间:2021-09-12 22:56:08

关于java多条件查询SQL语句拼接的小技巧

最近在实验室做项目的时候遇到了java的多条件查询,翻看了论坛上其他大牛们的博客,都没有给出一个详细的解答。自我探索了一会后给出了下面这样的使用技巧,还算方便,仅供各位参考。

前端的页面显示


关于java多条件查询SQL语句拼接的小技巧

查询所给的表单代码

<form action="" >
<table>
<tr>
<td><span>PMNM(内码)</span></td>
<td><span><input name="PMNM" type="text"></span></td>
<td><span>PMBM(编码)</span></td>
<td><span><input name="PMBM" type="text"></span></td>
<td><span>PMCS(名称)</span></td>
<td><span><input name="PMCS" type="text"></span></td>
<td><span>LBQF(类型)</span></td>
<td><span><input name="LBQF" type="text"></span></td>
<td><span><input name="codeSubmit" class="search-btn"

type="submit" value="查询">
</span></td>
</tr>
</table>
</form>

在后台servlet中获取表单的name

HashMap<String, Object> key=new HashMap<String, Object>();//在不知道属性类型的情况下,用HashMap<String,Object>来代替从上述表单中所获取的name值,并统一存放在HashMap中
String PMNM=request.getParameter("PMNM");
key.put("内码", PMNM);
String PMCS=request.getParameter("PMCS");
key.put("名称", PMCS);
String PMBM=request.getParameter("PMBM");
key.put("编码", PMBM);
String LBQF=request.getParameter("LBQF");
key.put("类型",LBQF);

//调用Service层的serach方法进行查询
ArrayList<Commmon9831> a=h.Search(key);//用ArrayList来表示所查询的结果
request.setAttribute("a", a);
request.getRequestDispatcher("所要跳转的显示查询结果页面").forward(request, response);

好了,上述的操作完成以后,就可以写DAO层中查询方法了,也是最重要的部分

public ArrayList<“bean的类型”> Search(HashMap<String ,Object> key )
{ ArrayList<Commmon9831> a=new ArrayList<Commmon9831>();
String sql="select * from “数据库名” ";//最原始的sql查询语句
//依次用Object类来表示HashMap中的属性值
Object m=key.get("内码");
Object s=key.get("名称");
Object P=key.get("编码");
Object L=key.get("类型");

int count=0;//引入一个count值来控制where条件后的属性值,及在sql语句中的位置
//注意:**完成上述操作后,并没有判断Object对象是否为空值,下面判断是否为空的方法也很重要**
if(!(m.toString().equals(""))||!(s.toString().equals(""))||!(P.toString().equals(""))||!(L.toString().equals("")))
{ sql=sql+" where";
//如果上述所给条件有一个不为空,则在sql语句中加上“where”。

if(m.toString().equals(""))
sql=sql+"";
else{
//用多个if来表示查询的情况,这里是本文的重点。
//因为不清楚所给的条件是哪一个,设置count值为0,当在HashMap值前的查询条件不为空,则count++。当count>0时,说明当前查询条件不为一,则sql=sql+“and”。
if(count>0)
sql=sql+" and ";

sql=sql+" PMNM = '" +key.get("内码")+ "'";

if(s.toString().equals(""))
sql=sql+""; //sql关键字指尖要存在空格,不然无法执行
else {if(count>0)
sql=sql+" and ";

sql=sql+" PMCS = '" +key.get("名称")+ "'";
count++;
}
if(P.toString().equals(""))
sql=sql+"";
else {if(count>0)
sql=sql+" and ";

sql=sql+" PMBM = '" +key.get("编码")+ "'";
count++;
}
if(L.toString().equals(""))
sql=sql+"";
else {if(count>0)
sql=sql+" and ";

sql=sql+" LBQF = '" +key.get("类型")+ "'";
count++;
}
}
System.out.println(sql);//在控制台上打印出sql语句查看拼接结果

随笔:

————————————————————————————
拼接sql语句是多条件查询的重要部分,在上述所给的技巧中,使用一切查询情况。其中判断HashMap中键值对是否为空,利用count值来判断查询条件情况是本文的重点。