マルチ条件ファジイクエリ


以下は、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;
	}
以上のコードは少し粗末ですが、あなたに役に立つなら勉強しましょう.