我在搜索功能上写出我的感受,一开始 是看的 慕课的ajax搜索框实现,但是它没有从数据库里取出来,而是创建了数组,在数组中用contanis()函数模糊查询。因此 我受到启发,把数据库里内容取出来放在数组里,在查询,代码如下:
//此函数方法是把数据库里的内容取出来 然后 拿出 name 比较 如果相同就把他添加到新的 对象中
public List<Map<String,Object>> peopleList2(String checka){
String sql="select * from t_people where status=0 order by created";
//System.out.println("查询service");
List<Map<String,Object>> list=jt.queryForList(sql);
List<Map<String,Object>> list1=new ArrayList<Map<String,Object>>();
int i=0;
for(Map<String, Object> data:list){
Map<String, Object> name = list.get(i);
//System.out.println(name);
if( name.get("name").equals(checka)){
//System.out.println("11"+name);
list1.add(name);
}
i++;
}
return list1;
}
第二个启示,因为数组不实用,我就找到了用sql语句like实现:代码如下
public List<Map<String,Object>> peopleList1(String checka){
//%是通用匹配符号,为了在like后面加上 关键字,需要用'
String sql="select * from t_people where status=0 "
+"and name like '"+"%"
+checka+"%'"
+"order by created";
List<Map<String,Object>> list=jt.queryForList(sql);
return list;
}
注意的是:其中关键字在sql语句的 添加需要加''单引号,进行连接 ,否则报错(我研究了好久);
3.最后 一个最好 可以匹配你传进来的内容,原理是,把sql语句写上参数,然后把传进的内容比较存不存在,存在的话把那个参数语句加上关键字,不存在的话,删除带参数的sql语句,如例:
```
public List<Map<String,Object>> peopleList3(String checka,Page page){
String sql="select * from t_people where status=0 "
+"and name like ?"
+"order by created";
System.out.println("查询service");
List<String> param=new ArrayList<String>();
if(ChkTools.isNull(checka)){
sql=sql.replace("and name like ?", "");
} else {
param.add("%" + checka +"%");
System.out.println(sql);
System.out.println("执行到了else");
}
//page用来分页
List<Map<String,Object>> list=list=jc.queryForList(sql, param.toArray(), page);
return list;
}
```