我们这里使用一个字段存储,存储为字符串的json数组格式:
ServiceProAddr:[{“Name”:”地毯清洗”,”ParentName”:”清洁服务”},{“Name”:”空调清洗”,”ParentName”:”清洁服务”}]
存储时放数组后JSON.stringify(filedata)一下即可;
查询时带参: serviceItemName: [“洗衣机”,”长途搬家”,”空调移机”]
下面具体代码:
@Override
public MyResult findRecords(HttpServletRequest request, HttpServletResponse response,
EnterpriseService record, int pagenow, int pagesize) {
int limitStart = (pagenow-1)*pagesize;
int limitEnd = pagesize;
List list = null;
try {
//用户ID
String userId = getUserId(request, response);
if (userId==null)
return MyResult.error(“查询失败,请登录!”);
record.setUserIdAdd(userId);
List entr = new ArrayList();
List ids = new ArrayList();
int count = 0;
if(record.getServiceProAddr() != null && !record.getServiceProAddr().equals("")){
JSONArray str_pro = (JSONArray) JSON.parse(record.getServiceProAddr());
if(record.getServiceItemName() != null && !record.getServiceItemName().equals("")){
JSONArray str_item = (JSONArray) JSON.parse(record.getServiceItemName());
//for 地址项目
for (int i = 0; i < str_pro.length(); i++) {
record.setServiceProAddr(str_pro.get(i).toString());
for (int k = 0; k < str_item.length(); k++) {
record.setServiceItemName(str_item.get(k).toString());
list = enterpriseServiceDao.findByRecord(record, limitStart, limitEnd);
for (int j = 0; j < list.size(); j++) {
if(!ids.contains(list.get(j).getId())){
ids.add(list.get(j).getId());
entr.add(list.get(j));
count++;
}
}
}
}
list = new ArrayList<EnterpriseService>();
list.addAll(entr);
}else{
for (int i = 0; i < str_pro.length(); i++) {
record.setServiceProAddr(str_pro.get(i).toString());
list = enterpriseServiceDao.findByRecord(record, limitStart, limitEnd);
for (int j = 0; j < list.size(); j++) {
if(!ids.contains(list.get(j).getId())){
ids.add(list.get(j).getId());
entr.add(list.get(j));
count++;
}
}
}
list = new ArrayList<EnterpriseService>();
list.addAll(entr);
}
}else if(record.getServiceItemName() != null && !record.getServiceItemName().equals("")){
//for 项目
JSONArray str_item = (JSONArray) JSON.parse(record.getServiceItemName());
for (int k = 0; k < str_item.length(); k++) {
record.setServiceItemName(str_item.get(k).toString());
list = enterpriseServiceDao.findByRecord(record, limitStart, limitEnd);
for (int j = 0; j < list.size(); j++) {
if(!ids.contains(list.get(j).getId())){
ids.add(list.get(j).getId());
entr.add(list.get(j));
count++;
}
}
}
list = new ArrayList<EnterpriseService>();
list.addAll(entr);
}else{
//list
list = enterpriseServiceDao.findByRecord(record, limitStart, limitEnd);
count = enterpriseServiceDao.findByRecordCount(record);
}
enterpriseServiceDao.truncateTemp();
for (int i = 0; i < list.size(); i++) {
EnterpriseService es = list.get(i);
enterpriseServiceDao.insertTemp(es);
}
List<EnterpriseService> el = enterpriseServiceDao.findByTempRecord(null, limitStart, limitEnd);
int counts = enterpriseServiceDao.findByTempRecordCount(null);
return MyResult.ok(counts, el);
} catch (Exception e) {
e.printStackTrace();
return MyResult.error("查询失败");
}
}
用JSON.parse(str)转化为json数组后,把数组内容放一个查一次,查的时候 !ids.contains(list.get(j).getId()),避免重复,此处不包含查询分页,先把条件带进去查出结果,清空临时表后再插入到临时表,然后带上分页查询临时表,查出结果返回即可。