多条件模糊查询

时间:2022-10-08 05:40:37

       以下是一个简单的多条件模糊查询例子,可以实现在jsp传过来的要查询的字符串去数据库查找相对应的记录,这个字符串可以是数据库字段的连续的子字符串,也可以是几个不连续的子字符串的组合。如:数据库的某个字段的数据:党委办公室电话;在jsp页面中可以输入“党委办”、“办公室”等;也可以实现这样的输入:“党办”、“公话”等,都能找到党委办公室对应的记录。

jsp中的代码:

<s:form action="findPhoneNumByKeyWords" target="viewPhoneNum">
输入关键字:<input name="keywords" type="text">
<input type="submit" value="搜索">
</s:form>

action类中的代码:

public String findPhoneNumByKeyWords() throws UnsupportedEncodingException {
HttpServletRequest request = ServletActionContext.getRequest();
String strKeywords = request.getParameter("keywords");
char[] keywords = strKeywords.toCharArray();
setPhoneNum(phoneNum);
System.out.println(keywords.length);
if (keywords.length != 0) {
phoneNumList = phoneBiz.findPhoneNumByKeyWords(keywords);
}
System.out.println(phoneNumList);
if (phoneNumList != null) {
return "findPhoneNumByKeyWords";
}
return "fail";
}


dao层的代码:

public List<PhoneNum> findPhoneNumByKeyWords(char[] keywords) {
session = sessionFactory.getCurrentSession();
String sqlStr = null;
// 根据院名查找
Query query1 = null;
// 创建一个可变字符串
StringBuffer strb1 = new StringBuffer("from PhoneNum as pn where");
// 遍历关键字,添加查询条件
for (int i = 0; i < keywords.length; i++) {
// 查询语句
if (i != keywords.length - 1) {
strb1.append(" pn.academyName like '%").append(keywords[i])
.append("%'").append(" and");
} else {
strb1.append(" pn.academyName like '%").append(keywords[i])
.append("%'");
}
}
// 把可变字符串变成固定长度的字符串
sqlStr = strb1.toString();
// SQL查询
query1 = session.createQuery(sqlStr);
// 查到符合对应字符的集合是否为空,不为空就赋值
if (query1.list() != null) {
phoneNums = query1.list();
}
// 根据部门查找
Query query2 = null;
StringBuffer strb2 = new StringBuffer("from PhoneNum as pn where");
for (int i = 0; i < keywords.length; i++) {
// 查询语句
if (i != keywords.length - 1) {
strb2.append(" pn.department like '%").append(keywords[i])
.append("%'").append(" and");
} else {
strb2.append(" pn.department like '%").append(keywords[i])
.append("%'");
}
}
sqlStr = strb2.toString();
query2 = session.createQuery(sqlStr);
// 判断两个集合是否为空,如果phoneNums为空addAll就会报错
if (query2.list() != null && phoneNums != null) {
phoneNums.addAll(query2.list());
}
// 根据老师名字查找
Query query3 = null;
StringBuffer strb3 = new StringBuffer("from PhoneNum as pn where");
for (int i = 0; i < keywords.length; i++) {
// 查询语句
if (i != keywords.length - 1) {
strb3.append(" pn.teacherName like '%").append(keywords[i])
.append("%'").append(" and");
} else {
strb3.append(" pn.teacherName like '%").append(keywords[i])
.append("%'");
}
}
sqlStr = strb3.toString();
query3 = session.createQuery(sqlStr);
if (query3.list() != null && phoneNums != null) {
phoneNums.addAll(query3.list());
}
// 根据电话号码查找
Query query4 = null;
StringBuffer strb4 = new StringBuffer("from PhoneNum as pn where");
for (int i = 0; i < keywords.length; i++) {
// 查询语句
if (i != keywords.length - 1) {
strb4.append(" pn.phoneNum like '%").append(keywords[i])
.append("%'").append(" and");
} else {
strb4.append(" pn.phoneNum like '%").append(keywords[i])
.append("%'");
}
}
sqlStr = strb4.toString();
query4 = session.createQuery(sqlStr);
// 查到符合对应字符的集合
if (query4.list() != null && phoneNums != null) {
phoneNums.addAll(query4.list());
}
if (phoneNums.size() != 0) {
return phoneNums;
}
return null;
}


以上的代码有点简陋,如果对你有帮助就学学吧。