【ssm】极简的极省力的开发方式——针对简单型EasyUI的增删改查的后台管理

需要具备技能点:

ssm框架搭建,mybatis generator的熟练使用

1.控制器:

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.公司名字.service.IActivityService;

@Controller
@RequestMapping("manage/act")
public class ActivityController extends BaseClass {

	@Autowired
	private IActivityService actService;

	@RequestMapping("index/{name}")
	public String index(@PathVariable(value = "name") String name, HttpServletRequest req, HttpServletResponse res) {
		return "act/" + name + "/index";
	}

	@RequestMapping("list/{name}")
	@ResponseBody
	public EasyUIResult<?> list(@PathVariable(value = "name") String name, HttpServletRequest req,
			PageParam pageParam) {
		try {
			Object example = actService.createExampleByName(name, req);
			return actService.list(example, pageParam);
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		return null;
	}

	@ResponseBody
	@RequestMapping("save/{name}")
	public Map<Object, Object> update(@PathVariable(value = "name") String name, HttpServletRequest req,
			HttpServletResponse res) {
		Map<Object, Object> resultMap = new HashMap<>();
		try {
			Object obj = actService.getBean(name, req);
			obj = actService.saveOrUpdate(obj);
			resultMap.put("data", obj);
			resultMap.put("status", true);
			resultMap.put("msg", "保存成功");
		} catch (Exception e) {
			resultMap.put("status", false);
			resultMap.put("msg", "保存失败");
			logger.error(e.getMessage());
		}
		return resultMap;
	}

	@ResponseBody
	@RequestMapping("del/{name}")
	public Map<Object, Object> del(@PathVariable(value = "name") String name,
			@RequestParam(value = "ids", required = true) Integer[] ids, HttpServletRequest req,
			HttpServletResponse res) {
		Map<Object, Object> resultMap = new HashMap<>();
		try {
			Object success = actService.del(name, ids);
			resultMap.put("data", success);
			resultMap.put("status", true);
			resultMap.put("msg", "刪除成功!");
		} catch (Exception e) {
			resultMap.put("status", false);
			resultMap.put("msg", "刪除失败!");
			logger.error(e.getMessage());
		}
		return resultMap;
	}

	@ResponseBody
	@RequestMapping("export/{name}")
	public void export(@PathVariable(value = "name") String name, HttpServletRequest req, HttpServletResponse res) {
		
	}
}

  2.BaseClass

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class BaseClass {
	protected Logger logger = LoggerFactory.getLogger(getClass());
}

  3.Service实现

  1 package com.*.service.impl;
  2 
  3 import java.io.File;
  4 import java.io.FileOutputStream;
  5 import java.lang.reflect.Method;
  6 import java.sql.Timestamp;
  7 import java.text.SimpleDateFormat;
  8 import java.util.ArrayList;
  9 import java.util.Date;
 10 import java.util.HashMap;
 11 import java.util.List;
 12 import java.util.Map;
 13 import java.util.Map.Entry;
 14 import java.util.UUID;
 15 import java.util.concurrent.ConcurrentHashMap;
 16 
 17 import javax.servlet.http.HttpServletRequest;
 18 
 19 import org.apache.commons.lang3.StringUtils;
 20 import org.springframework.beans.factory.annotation.Autowired;
 21 import org.springframework.beans.factory.annotation.Value;
 22 import org.springframework.stereotype.Service;
 23 import org.springframework.transaction.annotation.Propagation;
 24 import org.springframework.transaction.annotation.Transactional;
 25 import org.springframework.web.bind.ServletRequestDataBinder;
 26 import org.springframework.web.multipart.MultipartFile;
 27 import org.springframework.web.multipart.MultipartHttpServletRequest;
 28 
 29 import com.*.dao.SuperDaoImpl;
 30 import com.*.pojo.ActInfo;
 31 import com.*.pojo.ActInfoExample;
 32 import com.*.pojo.ActResource;
 33 import com.*.pojo.ActResourceExample;
 34 import com.*.pojo.ActResourceIndex;
 35 import com.*.pojo.ActResourceIndexExample;
 36 import com.*.pojo.ActTactics;
 37 import com.*.pojo.ActTacticsExample;
 38 import com.*.pojo.BaseClass;
 39 import com.*.pojo.Limit;
 40 import com.*.pojo.vo.EasyUIResult;
 41 import com.*.pojo.vo.PageParam;
 42 import com.*.service.IActivityService;
 43 
 44 @Service(value = "actService")
 45 public class ActivityServiceImpl extends BaseClass implements IActivityService {
 46     // adv.resource.img.URL=/webapp/upload/files/home/act_resource/
 47     // adv.resource.img.url.pre=http://127.0.0.1:32812/files/home/act_resource/
 48     public static final SimpleDateFormat DATE_FORMAT_LONG = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 49     public static final SimpleDateFormat DATE_FORMAT_SHORT = new SimpleDateFormat("yyyy-MM-dd");
 50     
 51     
 52     @Value(value = "${adv.resource.img.URL}")
 53     private String savePath;
 54     @Value(value = "${adv.resource.img.url.pre}")
 55     private String imgPrefix;
 56     @Value(value = "${adv.resource.img.url.pre}")
 57     private String exportInfoTacticsSQL;
 58 
 59     private static final String INFO_KEY = "actInfo";
 60     private static final String RESOURCE_KEY = "actResource";
 61     private static final String RESOURCE_INDEX_KEY = "actResourceIndex";
 62     private static final String TACTICS_KEY = "actTactics";
 63 
 64     private static final Map<String, Class<?>> BEAN_NAME_MAP = new ConcurrentHashMap<>();
 65 
 66     static {
 67         BEAN_NAME_MAP.put(RESOURCE_KEY, ActResource.class);
 68         BEAN_NAME_MAP.put(TACTICS_KEY, ActTactics.class);
 69         BEAN_NAME_MAP.put(INFO_KEY, ActInfo.class);
 70         BEAN_NAME_MAP.put(RESOURCE_INDEX_KEY, ActResourceIndex.class);
 71     }
 72 
 73     @Autowired
 74     private SuperDaoImpl superDao;
 75 
 76     @Transactional(propagation = Propagation.REQUIRED)
 77     public Object saveOrUpdate(Object obj) {
 78         try {
 79             if (obj == null) {
 80                 logger.warn("the obj can not be null !");
 81                 return null;
 82             }
 83 
 84             Method method = obj.getClass().getDeclaredMethod("getId");
 85             Object id = method.invoke(obj);
 86             boolean success = false;
 87             if (id == null) {
 88                 Method setCreateTimeMethod = null;
 89                 if (obj.getClass().getMethod("setCreateTime", String.class) != null) {
 90                     setCreateTimeMethod = obj.getClass().getMethod("setCreateTime", String.class);
 91                     setCreateTimeMethod.invoke(obj, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));// setCreateTime(
 92                                                                                                                     // );
 93                 }
 94                 
 95                 if (obj instanceof ActResourceIndex) {
 96                     ActResourceIndex idx=(ActResourceIndex) obj;
 97                     idx.setUniqueCode(UUID.randomUUID().toString().replaceAll("-", ""));
 98                 }
 99                 
100                 success = superDao.insertSelective(obj) > 0;
101             } else {
102                 success = superDao.updateByPrimaryKeySelective(obj) > 0;
103             }
104             if (success) {
105                 return obj;
106             } else {
107                 return false;
108             }
109         } catch (Exception e) {
110             logger.warn(e.getMessage());
111         }
112         return false;
113     }
114 
115     @Transactional(propagation = Propagation.REQUIRED)
116     public Object del(String name, Integer[] ids) {
117         try {
118             if (name == null) {
119                 return false;
120             }
121 
122             Class<?> clazz = BEAN_NAME_MAP.get(name);
123             boolean[] flags = new boolean[ids.length];
124             for (int i = 0; i < ids.length; i++) {
125                 flags[i] = superDao.deleteByPrimaryKey(ids[i], clazz) > 0;
126             }
127 
128             return flags;
129         } catch (Exception e) {
130             logger.error(e.getMessage());
131         }
132         return false;
133     }
134 
135     /**
136      * 搜索
137      */
138     @SuppressWarnings({ "unchecked", "rawtypes" })
139     public EasyUIResult<?> list(Object example, PageParam page) {
140 
141         EasyUIResult<?> rs = new EasyUIResult<>();
142 
143         int count = superDao.countByExample(example);
144         rs.setTotal(count);
145 
146         setLimit(example, page);
147         setOrder(example, page);
148         List lst = superDao.selectByExample(example);
149         rs.setRows(lst);
150         return rs;
151     }
152 
153     /**
154      * 自动封装bean,摘自:https://zhidao.baidu.com/question/198956630.html
155      * 
156      * @param name
157      * @param req
158      * @return
159      */
160     public Object getBean(String name, HttpServletRequest req) {
161         try {
162             if (StringUtils.isNotBlank(name)) {
163                 Class<?> clazz = BEAN_NAME_MAP.get(name);
164 
165                 if (clazz == null) {
166                     logger.warn("没有找到要封装的实体类!");
167                     return null;
168                 }
169                 Object bean = clazz.newInstance();
170                 ServletRequestDataBinder binder = new ServletRequestDataBinder(bean);
171                 binder.bind(req);
172 
173                 List<UploadResult> rs = uploadImg(req);
174 
175                 if (rs != null && rs.size() > 0) {
176                     if (rs.get(0).isSuccess()) {
177                         setImgPath(bean, rs.get(0).getPrefix());
178                     }
179                 }
180                 return bean;
181             }
182         } catch (Exception e) {
183             logger.error(e.getMessage());
184         }
185         return null;
186     }
187 
188     /**
189      * 创建搜索对象
190      */
191     public Object createExampleByName(String name, HttpServletRequest req) {
192         try {
193             if (name.equals(RESOURCE_KEY)) {
194                 return createResourceExample(req);
195             } else if (name.equals(INFO_KEY)) {
196                 return createInfoExample(req);
197             } else if (name.equals(TACTICS_KEY)) {
198                 return createTacticsExample(req);
199             }else if(name.equals(RESOURCE_INDEX_KEY)){
200                 return createResourceIndexExample(req);
201             }
202         } catch (Exception e) {
203             logger.error(e.getMessage());
204         }
205         return null;
206     }
207 
208     private Object createResourceIndexExample(HttpServletRequest req) {
209         Object obj = getBean(RESOURCE_INDEX_KEY, req);
210 
211         if (obj != null && obj instanceof ActResourceIndex) {
212             ActResourceIndex bean = (ActResourceIndex) obj;
213             ActResourceIndexExample example = new ActResourceIndexExample();
214             com.*.pojo.ActResourceIndexExample.Criteria c = example.createCriteria();
215             if (bean.getId()!=null) {
216                 c.andIdEqualTo(bean.getId());
217             }
218             
219             if (StringUtils.isNotBlank(bean.getName())) {
220                 c.andNameLike("%"+bean.getName()+"%");
221             }
222             
223             if (StringUtils.isNotBlank(bean.getUniqueCode())) {
224                 c.andUniqueCodeLike("%"+bean.getUniqueCode()+"%");
225             }
226             
227             if (StringUtils.isNotBlank(bean.getDescription())) {
228                 c.andDescriptionLike("%"+bean.getUniqueCode()+"%");
229             }
230             
231             if (StringUtils.isNotBlank(bean.getCreateTime())) {
232                 c.andCreateTimeGreaterThanOrEqualTo(bean.getCreateTime()+" 00:00:00");
233                 c.andCreateTimeLessThanOrEqualTo(bean.getCreateTime()+" 23:59:59");
234             }
235             return example;
236         }
237         return null;
238     }
239 
240     private Object createTacticsExample(HttpServletRequest req) {
241         Object bean = getBean(TACTICS_KEY, req);
242 
243         if (bean != null && bean instanceof ActTactics) {
244             ActTactics tactics = (ActTactics) bean;
245             ActTacticsExample example = new ActTacticsExample();
246             com.*.pojo.ActTacticsExample.Criteria c = example.createCriteria();
247 
248             if (tactics.getId() != null) {
249                 c.andIdEqualTo(tactics.getId());
250             }
251 
252             if (StringUtils.isNotBlank(tactics.getActCode())) {
253                 c.andActCodeEqualTo(tactics.getActCode());
254             }
255 
256             if (StringUtils.isNotBlank(tactics.getName())) {
257                 c.andNameLike("%" + tactics.getName() + "%");
258             }
259 
260             if (StringUtils.isNotBlank(tactics.getCreateTime())) {
261                 String value1 = tactics.getCreateTime() + " 00:00:00";
262                 String value2 = tactics.getCreateTime() + " 23:59:59";
263                 c.andCreateTimeBetween(value1, value2);
264             }
265 
266             if (StringUtils.isNotBlank(tactics.getXcode())) {
267                 c.andXcodeLike("%" + tactics.getName() + "%");
268             }
269 
270             if (StringUtils.isNotBlank(tactics.getNeedCondition())) {
271                 c.andNeedConditionLike("%" + tactics.getName() + "%");
272             }
273 
274             if (StringUtils.isNotBlank(tactics.getSendResource())) {
275                 c.andSendResourceLike("%" + tactics.getSendResource() + "%");
276             }
277             return example;
278         }
279 
280         return null;
281     }
282 
283     private Object createInfoExample(HttpServletRequest req) {
284         Object bean = getBean(INFO_KEY, req);
285 
286         if (bean != null && bean instanceof ActInfo) {
287 
288             ActInfo info = (ActInfo) bean;
289             ActInfoExample example = new ActInfoExample();
290             com.*.pojo.ActInfoExample.Criteria c = example.createCriteria();
291 
292             if (info.getActivityId() != null) {
293                 c.andActivityIdEqualTo(info.getActivityId());
294             }
295 
296             if (StringUtils.isNotBlank(info.getActivityName())) {
297                 c.andActivityNameLike("%" + info.getActivityName() + "%");
298             }
299 
300             if (StringUtils.isNotBlank(info.getCityCode())) {
301                 if (!info.getCityCode().equals("0")) {
302                     c.andCityCodeLike("%" + info.getCityCode() + "%");
303                 }
304             }
305 
306             if (StringUtils.isNotBlank(info.getStartTime())) {
307                 c.andStartTimeGreaterThanOrEqualTo(info.getStartTime());
308             }
309 
310             if (StringUtils.isNotBlank(info.getEndTime())) {
311                 c.andEndTimeLessThanOrEqualTo(info.getEndTime());
312             }
313 
314             if (StringUtils.isNotBlank(info.getCreateTime())) {
315                 String value1 = info.getCreateTime() + " 00:00:00";
316                 String value2 = info.getCreateTime() + " 23:59:59";
317                 c.andCreateTimeLessThanOrEqualTo(value2);
318                 c.andCreateTimeGreaterThanOrEqualTo(value1);
319             }
320             return example;
321         }
322 
323         return null;
324     }
325 
326     private Object createResourceExample(HttpServletRequest req) {
327         Object bean = getBean(RESOURCE_KEY, req);
328 
329         if (bean != null && bean instanceof ActResource) {
330 
331             ActResource resource = (ActResource) bean;
332             ActResourceExample example = new ActResourceExample();
333             com.*.pojo.ActResourceExample.Criteria c = example.createCriteria();
334 
335             if (resource.getId() != null) {
336                 c.andIdEqualTo(resource.getId());
337             }
338 
339             if (StringUtils.isNotBlank(resource.getActCode())) {
340                 c.andActCodeEqualTo(resource.getActCode());
341             }
342 
343             if (StringUtils.isNotBlank(resource.getSize())) {
344                 c.andSizeLike("%" + resource.getSize() + "%");
345             }
346             return example;
347         }
348         return null;
349     }
350 
351     public Object getExportResult(String name, HttpServletRequest req) {
352         try {
353             if (name.equals("actInfoTactics")) {
354                 superDao.selectExportData(null, getExportDate().get(""),getExportDate().get(""));
355             }
356         } catch (Exception e) {
357             e.printStackTrace();
358         }
359         return null;
360     }
361 
362     public  Map<String, Object> getExportDate() {
363         Map<String, Object> map = new HashMap<>();
364         try {
365             Date nowDate = new Date();
366             String nowZeroTime = DATE_FORMAT_SHORT.format(nowDate);
367             //后续如果需要改导出时间只需改动下面的3
368             nowDate = DATE_FORMAT_LONG.parse(nowZeroTime + " 03:00:00");
369             Date yestoday = new Timestamp(nowDate.getTime() - 3600 * 1000 * 24);
370             String endTime = DATE_FORMAT_LONG.format(nowDate);
371             String startTime = DATE_FORMAT_LONG.format(yestoday);
372             
373             map.put("startTimeStr", startTime);
374             map.put("endTimeStr", endTime);
375             map.put("startTime", yestoday);
376             map.put("endTime", nowDate);
377         } catch (Exception e) {
378             e.printStackTrace();
379         }
380         return map;
381     }
382 
383     private void setImgPath(Object obj, String path) {
384         if (obj == null) {
385             return;
386         }
387         Method[] mds = obj.getClass().getDeclaredMethods();
388         for (Method method : mds) {
389             if (method.getName().startsWith("setImg")) {
390                 try {
391                     method.invoke(obj, path);
392                 } catch (Exception e) {
393                     e.printStackTrace();
394                 }
395             }
396         }
397     }
398 
399     private List<UploadResult> uploadImg(HttpServletRequest request) {
400         List<UploadResult> rs = new ArrayList<>();
401         try {
402             if (request instanceof MultipartHttpServletRequest) {
403                 File file = new File(savePath);
404                 if (!file.exists()) {
405                     file.mkdirs();
406                 }
407                 int tmp = 0;
408                 String originalName = "";
409                 FileOutputStream fos = null;
410                 MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
411                 Map<String, MultipartFile> fileMap = req.getFileMap();
412                 for (Entry<String, MultipartFile> entry : fileMap.entrySet()) {
413                     originalName = entry.getValue().getOriginalFilename();
414                     tmp = originalName.lastIndexOf(".");
415                     if (tmp == -1) {
416                         continue;
417                     }
418 
419                     file = new File(savePath + System.currentTimeMillis() + originalName.substring(tmp));
420                     fos = new FileOutputStream(file);
421                     fos.write(entry.getValue().getBytes());
422                     rs.add(new UploadResult(imgPrefix + file.getName(), true));
423                 }
424                 if (fos != null)
425                     fos.close();
426             }
427         } catch (Exception e) {
428             e.printStackTrace();
429         }
430         return rs;
431     }
432 
433     private void setLimit(Object example, PageParam page) {
434         try {
435             if (example==null) {
436                 return;
437             }
438             Method method = example.getClass().getDeclaredMethod("setLimit", Limit.class);
439             if (method==null) {
440                 return;
441             }
442             method.invoke(example, new Limit((page.getPage() - 1) * page.getRows(), page.getRows()));
443         } catch (Exception e) {
444             e.printStackTrace();
445         }
446     }
447 
448     private void setOrder(Object example, PageParam page) {
449         try {
450             String orderByClause = "";
451             if (StringUtils.isNotBlank(page.getOrder()) && StringUtils.isNoneBlank(page.getSort())) {
452                 orderByClause = (convertOrderFiled(page.getSort()) + " " + page.getOrder());
453 
454             } else {
455                 orderByClause = " create_time desc";
456             }
457             // setOrderByClause
458             
459             if (example==null) {
460                 return;
461             }
462             Method method = example.getClass().getDeclaredMethod("setOrderByClause", String.class);
463 
464             if (method==null) {
465                 return;
466             }
467             method.invoke(example, orderByClause);
468         } catch (Exception e) {
469             e.printStackTrace();
470         }
471     }
472 
473     private String convertOrderFiled(String str) {
474         char[] ch = str.toCharArray();
475         int index = -1;
476         for (int i = 0; i < ch.length; i++) {
477 
478             if ('A' <= ch[i] && ch[i] <= 'Z') {
479                 index = i;
480                 break;
481             }
482         }
483         if (index != -1) {
484             str = str.substring(0, index) + "_" + ((char) (str.charAt(index) + 32)) + str.substring(index + 1);
485         }
486         return str;
487     }
488 
489     public class UploadResult {
490         public UploadResult() {
491         }
492 
493         public UploadResult(String prefix, boolean success) {
494             setPrefix(prefix);
495             setSuccess(success);
496         }
497 
498         private String url;
499         private boolean success;
500 
501         public String getPrefix() {
502             return url;
503         }
504 
505         public void setPrefix(String prefix) {
506             this.url = prefix;
507         }
508 
509         public boolean isSuccess() {
510             return success;
511         }
512 
513         public void setSuccess(boolean success) {
514             this.success = success;
515         }
516 
517     }
518 }
View Code

4.SuperDaoImpl

  1 package com.*.dao;
  2 
  3 import java.lang.reflect.Method;
  4 import java.util.Arrays;
  5 import java.util.List;
  6 import java.util.Map;
  7 import java.util.concurrent.ConcurrentHashMap;
  8 
  9 import org.apache.commons.lang3.StringUtils;
 10 import org.apache.ibatis.annotations.Param;
 11 import org.springframework.beans.BeansException;
 12 import org.springframework.context.ApplicationContext;
 13 import org.springframework.context.ApplicationContextAware;
 14 import org.springframework.jdbc.core.JdbcTemplate;
 15 import org.springframework.stereotype.Repository;
 16 
 17 import com.*.pojo.BaseClass;
 18 
 19 /**
 20  * mapper proxy,结合pageHelper+MyBatisGenerator简直所向无敌
 21  * 后期将加入redis缓存功能,结合nginx转发组成高并发后端
 22  * 
 23  * @author Administrator
 24  *
 25  */
 26 
 27 @Repository("superDao")
 28 public class SuperDaoImpl extends BaseClass implements ApplicationContextAware {
 29 
 30     /**************************************
 31      * 代理方法名 start
 32      ***************************************/
 33     public static final String COUNT_BY_EXAMPLE_METHOD_NAME = "countByExample";
 34     public static final String DELETE_BY_EXAMPLE_METHOD_NAME = "deleteByExample";
 35     public static final String DELETE_BY_PRIMARY_KEY_METHOD_NAME = "deleteByPrimaryKey";
 36     public static final String INSERT_METHOD_NAME = "insert";
 37     public static final String INSERT_SELECTIVE_METHOD_NAME = "insertSelective";
 38     public static final String SELECT_BY_EXAMPLE_METHOD_NAME = "selectByExample";
 39     public static final String SELECT_BY_PRIMARY_KEY_METHOD_NAME = "selectByPrimaryKey";
 40     public static final String UPDATE_BY_EXAMPLE_SELECTIVE_METHOD_NAME = "updateByExampleSelective";
 41     public static final String UPDATE_BY_EXAMPLE_METHOD_NAME = "updateByExample";
 42     public static final String UPDATE_BY_PRIMARYKEY_SELECTIVE_METHOD_NAME = "updateByPrimaryKeySelective";
 43     public static final String UPDATE_BY_PRIMARYKEY_METHOD_NAME = "updateByPrimaryKey";
 44     /**************************************
 45      * 代理方法名 end
 46      ***************************************/
 47 
 48     /**
 49      * mapper所在包的前缀
 50      */
 51     private String mapperPackagePrifix="com.*.mapper.";
 52     private static final Map<Object, Object> CACHE_MAP = new ConcurrentHashMap<>();
 53     /**
 54      * application 实例
 55      */
 56     private ApplicationContext ctx;
 57 
 58     public void setMapperPackagePrifix(String name) {
 59         this.mapperPackagePrifix = name;
 60     }
 61 
 62     /**
 63      * 根据一个对象查找Mapper,对象要么是实体类,要么是example
 64      * 
 65      * @param obj
 66      * @return
 67      */
 68     public Object findMapper(Object obj) {
 69         try {
 70             if (obj == null) {
 71                 logger.warn("the param obj instance can not be null !");
 72                 return null;
 73             }
 74             Class<?> clazz = obj.getClass();
 75 
 76             if (CACHE_MAP.get(clazz) != null) {
 77                 return CACHE_MAP.get(clazz);
 78             }
 79 
 80             String name = clazz.getSimpleName();
 81             String mapperClassName = "";
 82 
 83             if (name.endsWith("Example")) {
 84                 int index = name.indexOf("Example");
 85                 mapperClassName = mapperPackagePrifix + name.substring(0, index) + "Mapper";
 86             } else {
 87                 mapperClassName = mapperPackagePrifix + name + "Mapper";
 88             }
 89             logger.debug("mapper class name is :" + mapperClassName);
 90 
 91             Class<?> mapperClazz = Class.forName(mapperClassName);
 92             logger.debug("mapper is found :" + mapperClazz);
 93 
 94             CACHE_MAP.put(clazz, ctx.getBean(mapperClazz));
 95             return CACHE_MAP.get(clazz);
 96         } catch (Exception e) {
 97             logger.error("find mapper failed : " + e.getMessage());
 98         }
 99         return null;
100     }
101 
102     /**
103      * 查找方法
104      * 
105      * @param obj
106      * @return
107      */
108     public Method findMethod(Object mapper, String methodName, Object... parameters) {
109         try {
110             if (mapper == null) {
111                 logger.warn("the mapper can not be null ! ");
112             }
113             Class<?> clazz = mapper.getClass();
114             Class<?>[] clazzArray = new Class[parameters.length];
115             for (int i = 0; i < parameters.length; i++) {
116                 if (parameters[i] == null) {
117                     continue;
118                 }
119                 clazzArray[i] = parameters[i].getClass();
120             }
121             logger.debug("the clazz array is " + Arrays.toString(clazzArray));
122             return clazz.getDeclaredMethod(methodName, clazzArray);
123         } catch (Exception e) {
124             logger.error(" find method : " + methodName + " is error," + e.getMessage());
125         }
126         return null;
127     }
128 
129     /**
130      * 查询数量
131      * 
132      * @param example
133      * @return
134      */
135     public int countByExample(Object example) {
136         try {
137             if (example == null) {
138                 logger.warn("countByExample failed,the example can not be null !");
139                 return -1;
140             }
141 
142             Object mapper = findMapper(example);
143             logger.debug("mapper instance found for " + mapper.getClass());
144 
145             Method method = findMethod(mapper, COUNT_BY_EXAMPLE_METHOD_NAME, example);
146             logger.debug("mapper instance found for " + mapper.getClass());
147 
148             return Integer.valueOf(method.invoke(mapper, example).toString());
149         } catch (Exception e) {
150             logger.error("countByExample failed, " + e.getMessage());
151             e.printStackTrace();
152         }
153         return -1;
154     }
155 
156     /**
157      * 代理方法
158      * 
159      * @param example
160      * @return
161      */
162     public int deleteByExample(Object example) {
163         try {
164             if (example == null) {
165                 logger.warn("deleteByExample failed,the example can not be null !");
166                 return -1;
167             }
168 
169             Object mapper = findMapper(example);
170             logger.debug("mapper instance found for " + mapper.getClass());
171 
172             Method method = findMethod(mapper, DELETE_BY_EXAMPLE_METHOD_NAME, example);
173             logger.debug("mapper instance found for " + mapper.getClass());
174 
175             return (int) method.invoke(mapper, example);
176         } catch (Exception e) {
177             logger.error("deleteByExample failed, " + e.getMessage());
178         }
179         return -1;
180     }
181 
182     /**
183      * 代理方法
184      * 
185      * @param id
186      * @param beanClazz
187      * @return
188      */
189     public int deleteByPrimaryKey(Object id, Class<?> beanClazz) {
190         String mapperClassName = "";
191         try {
192             if (id == null) {
193                 logger.warn("deleteByPrimaryKey failed,the id can not be null !");
194                 return -1;
195             }
196 
197             if (beanClazz == null) {
198                 logger.warn("deleteByPrimaryKey failed,the beanClazz can not be null !");
199                 return -1;
200             }
201 
202             mapperClassName = mapperPackagePrifix + beanClazz.getSimpleName() + "Mapper";
203             Class<?> clazz = Class.forName(mapperClassName);
204             logger.debug("Mapper class  found for " + mapperClassName);
205 
206             Object mapper =findMapper(beanClazz.newInstance());
207             logger.debug("mapper instance found for " + mapper.getClass());
208 
209             Method method = clazz.getMethod(DELETE_BY_PRIMARY_KEY_METHOD_NAME, id.getClass());
210             logger.debug("mapper instance found for " + mapper.getClass());
211 
212             return (int) method.invoke(mapper, id);
213         } catch (Exception e) {
214             logger.error("deleteByPrimaryKey failed, " + e.getMessage());
215             e.printStackTrace();
216         }
217         return -1;
218     }
219 
220     /**
221      * 代理方法
222      * 
223      * @param record
224      * @return
225      */
226     public int insert(Object record) {
227         try {
228             if (record == null) {
229                 logger.warn("insert faild,the object can not be null !");
230                 return -1;
231             }
232 
233             Object mapper = findMapper(record);
234             logger.debug("mapper instance found for " + mapper.getClass());
235 
236             Method insertMethod = findMethod(mapper, INSERT_METHOD_NAME, record);
237             logger.debug("method  found in " + mapper.getClass());
238 
239             if (insertMethod == null) {
240                 logger.warn("insert faild,the method dose not exits !");
241                 return -1;
242             }
243 
244             Object value = insertMethod.invoke(mapper, record);
245             logger.info("insert success,the return value is: " + value);
246             return (int) value;
247         } catch (Exception e) {
248             logger.error("insert faild," + e.getMessage());
249         }
250         return -1;
251     }
252 
253     /**
254      * 代理方法
255      * 
256      * @param record
257      * @return
258      */
259     public int insertSelective(Object record) {
260 
261         try {
262             if (record == null) {
263                 logger.warn("insertSelective faild,the object can not be null !");
264                 return -1;
265             }
266 
267             Object mapper = findMapper(record);
268             logger.debug("mapper instance found for " + mapper.getClass());
269 
270             Method insertMethod = findMethod(mapper, INSERT_SELECTIVE_METHOD_NAME, record);
271             logger.debug("method  found in " + mapper.getClass());
272 
273             if (insertMethod == null) {
274                 logger.warn("insertSelective faild,the method dose not exits !");
275                 return -1;
276             }
277 
278             Object value = insertMethod.invoke(mapper, record);
279             logger.info("insertSelective success,the return value is: " + value);
280             return (int) value;
281         } catch (Exception e) {
282             e.printStackTrace();
283             logger.error("insertSelective faild," + e.getMessage());
284         }
285         return -1;
286     }
287 
288     /**
289      * 代理方法
290      * 
291      * @param example
292      * @return
293      */
294     public List<?> selectByExample(Object example) {
295         try {
296             if (example == null) {
297                 logger.warn("selectByExample failed,the example can not be null !");
298                 return null;
299             }
300 
301             Object mapper = findMapper(example);
302             logger.debug("mapper instance found for " + mapper.getClass());
303 
304             Method method = findMethod(mapper, SELECT_BY_EXAMPLE_METHOD_NAME, example);
305             logger.debug("mapper instance found for " + mapper.getClass());
306 
307             return (List<?>) method.invoke(mapper, example);
308         } catch (Exception e) {
309             logger.error("deleteByExample failed, " + e.getMessage());
310             e.printStackTrace();
311         }
312         return null;
313     }
314 
315     /**
316      * 代理方法,代理原selectByPrimaryKey方法,由于原方法只需要主键,此处无法只需要一个主键,故加入一个Type
317      * 
318      * @param id
319      * @param clazz
320      * @return
321      */
322     @SuppressWarnings("unchecked")
323     public <T> T selectByPrimaryKey(Object id, Class<T> clazz) {
324         String mapperClassName = "";
325         try {
326             if (id == null) {
327                 logger.warn("selectByPrimaryKey failed,the id can not be null !");
328                 return null;
329             }
330 
331             if (clazz == null) {
332                 logger.warn("selectByPrimaryKey failed,the param clazz can not be null !");
333                 return null;
334             }
335             mapperClassName = mapperPackagePrifix + clazz.getSimpleName() + "Mapper";
336             Class<?> clazzMapper = Class.forName(mapperClassName);
337             logger.debug("Mapper class  found for " + mapperClassName);
338 
339             Object mapper = ctx.getBean(clazzMapper);
340             logger.debug("mapper instance found for " + mapper.getClass());
341 
342             Method method = clazzMapper.getMethod(SELECT_BY_PRIMARY_KEY_METHOD_NAME, id.getClass());
343             logger.debug("mapper instance found for " + mapper.getClass());
344 
345             return (T) method.invoke(mapper, id);
346         } catch (Exception e) {
347             logger.error("selectByPrimaryKey failed, " + e.getMessage());
348         }
349         return null;
350     }
351 
352     /**
353      * 代理方法
354      * 
355      * @param record
356      * @param example
357      * @return
358      */
359     public int updateByExampleSelective(@Param("record") Object record, @Param("example") Object example) {
360 
361         try {
362             if (record == null) {
363                 logger.warn("updateByExampleSelective faild,the object can not be null !");
364                 return -1;
365             }
366 
367             Object mapper = findMapper(record);
368             logger.debug("mapper instance found for " + mapper.getClass());
369 
370             Method updateByExampleSelectiveMethod = findMethod(mapper, UPDATE_BY_EXAMPLE_SELECTIVE_METHOD_NAME, record,
371                     example);
372             logger.debug("method  found in " + mapper.getClass());
373 
374             if (updateByExampleSelectiveMethod == null) {
375                 logger.warn("updateByExampleSelectiveMethod faild,the method dose not exits !");
376                 return -1;
377             }
378 
379             Object value = updateByExampleSelectiveMethod.invoke(mapper, record, example);
380             logger.debug("updateByExampleSelective success,the return value is: " + value);
381             return (int) value;
382         } catch (Exception e) {
383             logger.error("updateByExampleSelective faild," + e.getMessage());
384         }
385         return -1;
386     }
387 
388     /**
389      * 代理方法
390      * 
391      * @param record
392      * @param example
393      * @return
394      */
395     public int updateByExample(@Param("record") Object record, @Param("example") Object example) {
396 
397         try {
398             if (record == null) {
399                 logger.warn("updateByExample faild,the record can not be null !");
400                 return -1;
401             }
402             if (example == null) {
403                 logger.warn("updateByExample faild,the example can not be null !");
404                 return -1;
405             }
406 
407             Object mapper = findMapper(record);
408             logger.debug("mapper instance found for " + mapper.getClass());
409 
410             Method updateByExampleSelectiveMethod = findMethod(mapper, UPDATE_BY_EXAMPLE_METHOD_NAME, record, example);
411             logger.debug("method  found in " + mapper.getClass());
412 
413             if (updateByExampleSelectiveMethod == null) {
414                 logger.warn("updateByExample faild,the method dose not exits !");
415                 return -1;
416             }
417 
418             Object value = updateByExampleSelectiveMethod.invoke(mapper, record, example);
419             logger.debug("updateByExample success,the return value is: " + value);
420             return (int) value;
421         } catch (Exception e) {
422             logger.error("updateByExample faild," + e.getMessage());
423         }
424         return -1;
425     }
426 
427     /**
428      * 代理方法
429      * 
430      * @param record
431      * @return
432      */
433     public int updateByPrimaryKeySelective(Object record) {
434 
435         try {
436             if (record == null) {
437                 logger.warn("updateByPrimaryKeySelective faild,the object can not be null !");
438                 return -1;
439             }
440 
441             Object mapper = findMapper(record);
442             logger.debug("mapper instance found for " + mapper.getClass());
443 
444             Method updateByExampleSelectiveMethod = findMethod(mapper, UPDATE_BY_PRIMARYKEY_SELECTIVE_METHOD_NAME,
445                     record);
446             logger.debug("method  found in " + mapper.getClass());
447 
448             if (updateByExampleSelectiveMethod == null) {
449                 logger.warn("updateByExampleSelectiveMethod faild,the method dose not exits !");
450                 return -1;
451             }
452 
453             Object value = updateByExampleSelectiveMethod.invoke(mapper, record);
454             logger.info("updateByExampleSelectiveMethod success,the return value is: " + value);
455             return (int) value;
456         } catch (Exception e) {
457             logger.error("updateByExampleSelectiveMethod faild," + e.getMessage());
458         }
459         return -1;
460     }
461 
462     /**
463      * 代理方法
464      * 
465      * @param record
466      * @return
467      */
468     public int updateByPrimaryKey(Object record) {
469 
470         try {
471             if (record == null) {
472                 logger.warn("updateByPrimaryKey faild,the object can not be null !");
473                 return -1;
474             }
475 
476             Object mapper = findMapper(record);
477             logger.debug("mapper instance found for " + mapper.getClass());
478 
479             Method updateByExampleSelectiveMethod = findMethod(mapper, UPDATE_BY_PRIMARYKEY_METHOD_NAME, record);
480             logger.debug("method  found in " + mapper.getClass());
481 
482             if (updateByExampleSelectiveMethod == null) {
483                 logger.warn("updateByPrimaryKey faild,the method dose not exits !");
484                 return -1;
485             }
486 
487             Object value = updateByExampleSelectiveMethod.invoke(mapper, record);
488             logger.info("updateByPrimaryKey success,the return value is: " + value);
489             return (int) value;
490         } catch (Exception e) {
491             logger.error("updateByPrimaryKey faild," + e.getMessage());
492         }
493         return -1;
494     }
495 
496     public List<Map<String,Object>> selectExportData(String sql,Object...param){
497         if (StringUtils.isNotBlank(sql)) {
498             return null;
499         }
500         JdbcTemplate template = ctx.getBean(org.springframework.jdbc.core.JdbcTemplate.class);
501         try {
502             return template.queryForList(sql, param);
503         } catch (Exception e) {
504             e.printStackTrace();
505         }
506         return null;
507     }
508     
509     @Override
510     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
511         ctx = applicationContext;
512     }
513 
514 }
View Code

5.EasyUiResult

 1 package com.*.pojo.vo;
 2 
 3 import java.io.Serializable;
 4 import java.util.ArrayList;
 5 import java.util.List;
 6 
 7 /**
 8  * 返回最终结果的包装类
 9  */
10 public class EasyUIResult<T> implements Serializable {
11 
12     /**
13      * 默认构造函数
14      */
15     public EasyUIResult() {
16 
17     }
18 
19     /**
20      * 构造函数
21      *
22      * @param total
23      * @param rows
24      */
25     public EasyUIResult(long total, List<T> rows) {
26         this.total = total;
27         this.rows = rows;
28     }
29 
30     /**
31      * 总共多少条记录
32      */
33     private long total;
34     /**
35      * 当前页的记录
36      */
37     private List<T> rows;
38 
39 
40     public long getTotal() {
41         return total;
42     }
43 
44     public void setTotal(long total) {
45         this.total = total;
46     }
47 
48     public List<T> getRows() {
49         return rows;
50     }
51 
52     public void setRows(List<T> rows) {
53         if (rows == null) {
54             rows = new ArrayList<T>();
55         }
56         this.rows = rows;
57     }
58 }
View Code

6.spring-mvc.xml

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <beans xmlns="http://www.springframework.org/schema/beans"
  3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4        xmlns:context="http://www.springframework.org/schema/context"
  5        xmlns:mvc="http://www.springframework.org/schema/mvc"
  6        xsi:schemaLocation="http://www.springframework.org/schema/beans
  7                            http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  8                            http://www.springframework.org/schema/context
  9                            http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
 10 
 11 
 12     <mvc:annotation-driven/>
 13     <!--扫描Controller-->
 14     <context:component-scan base-package="com.*.uomp.base.action">
 15         <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
 16     </context:component-scan>
 17     <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
 18         <property name="converters">
 19             <set>
 20                 <!-- 此处可以定义多种转换类型 -->
 21                 <bean class="com.xwtec.converter.DateConverter"/>
 22             </set>
 23         </property>
 24     </bean>
 25     <context:component-scan base-package="com.xwtec.web.controller"/>
 26     <!--定义注解驱动-->
 27     <mvc:annotation-driven conversion-service="conversionService">
 28         <!--enableMatrixVariables="true">-->
 29         <mvc:message-converters register-defaults="true">
 30             <!-- StringHttpMessageConverter编码为UTF-8,防止乱码 -->
 31             <bean class="org.springframework.http.converter.StringHttpMessageConverter">
 32                 <constructor-arg value="UTF-8"/>
 33                 <property name="supportedMediaTypes">
 34                     <list>
 35                         <bean class="org.springframework.http.MediaType">
 36                             <constructor-arg index="0" value="text"/>
 37                             <constructor-arg index="1" value="html"/>
 38                             <constructor-arg index="2" value="UTF-8"/>
 39                         </bean>
 40                         <bean class="org.springframework.http.MediaType">
 41                             <constructor-arg index="0" value="*"/>
 42                             <constructor-arg index="1" value="*"/>
 43                             <constructor-arg index="2" value="UTF-8"/>
 44                         </bean>
 45                     </list>
 46                 </property>
 47             </bean>
 48 
 49             <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
 50             <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"
 51                   id="fastJsonHttpMessageConverter">
 52                 <property name="supportedMediaTypes">
 53                     <list>
 54                         <value>text/html;charset=UTF-8</value>
 55                         <value>text/json;charset=UTF-8</value>
 56                         <value>application/json;charset=UTF-8</value>
 57                     </list>
 58                 </property>
 59                 <!--序列化选项-->
 60                 <property name="fastJsonConfig">
 61                     <bean class="com.alibaba.fastjson.support.config.FastJsonConfig">
 62                         <property name="serializerFeatures">
 63                             <list>
 64                                 <!-- 输出key时是否使用双引号 -->
 65                                 <value>QuoteFieldNames</value>
 66                                 <!-- 是否输出值为null的字段 -->
 67                                 <value>WriteMapNullValue</value>
 68                                 <!-- 数值字段如果为null,输出为0,而非null -->
 69                                 <value>WriteNullNumberAsZero</value>
 70                                 <!-- List字段如果为null,输出为[],而非null -->
 71                                 <value>WriteNullListAsEmpty</value>
 72                                 <!-- 字符类型字段如果为null,输出为"",而非null -->
 73                                 <value>WriteNullStringAsEmpty</value>
 74                                 <!-- Boolean字段如果为null,输出为false,而非null -->
 75                                 <value>WriteNullBooleanAsFalse</value>
 76                                 <!-- null String不输出  -->
 77                                 <value>WriteNullStringAsEmpty</value>
 78                                 <!-- null String也要输出  -->
 79                                 <value>WriteMapNullValue</value>
 80                                 <!-- Date的日期转换器 -->
 81                                 <value>WriteDateUseDateFormat</value>
 82                             </list>
 83                         </property>
 84                     </bean>
 85                 </property>
 86             </bean>
 87         </mvc:message-converters>
 88     </mvc:annotation-driven>
 89     <!--定义视图解析器-->
 90     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 91         <property name="prefix" value="/WEB-INF/views/"/>
 92         <property name="suffix" value=".jsp"/>
 93     </bean>
 94     <!--图片上传解析-->
 95     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
 96         <!--设置最大的文件大小-->
 97         <property name="maxUploadSize" value="52428800"/>
 98         <!--编码-->
 99         <property name="defaultEncoding" value="UTF-8"/>
100     </bean>
101 
102     <!--配置拦截器-->
103     <mvc:interceptors>
104         <mvc:interceptor>
105             <!--拦截所有main路径以及子路径-->
106             <mvc:mapping path="/manage/**"/>
107             <bean class="com.xwtec.web.handerinterceptor.UserLoginHandlerInterceptor"/>
108         </mvc:interceptor>
109     </mvc:interceptors>
110 </beans>
View Code

7.easui示例页面

  1 <!DOCTYPE HTML>
  2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  3 <%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>
  4 <html>
  5 <head>
  6 <title>活动信息管理</title>
  7 <jsp:include page="/taglibs.jsp"></jsp:include>
  8  <script>
  9         var contextPath = '${pageContext.request.contextPath}';
 10         var base_url=contextPath+'/rest/manage/act/list/actInfo';
 11         var citymap={};
 12         citymap['A']='郑州';
 13         citymap['B']='开封';
 14         citymap['C']='洛阳';
 15         citymap['D']='平顶山';
 16         citymap['E']='安阳';
 17         citymap['F']='鹤壁';
 18         citymap['G']='新乡';
 19         citymap['H']='焦作';
 20         citymap['J']='濮阳';
 21         citymap['K']='许昌';
 22         citymap['L']='漯河';
 23         citymap['M']='三门峡';
 24         citymap['N']='商丘';
 25         citymap['O']='周口';
 26         citymap['P']='驻马店';
 27         citymap['Q']='南阳';
 28         citymap['R']='信阳';
 29         citymap['U']='济源';
 30         
 31         $(document).on('click','#showCity',function (e){
 32             var tmp=$(e.target).attr('value');
 33             layer.open({
 34                 type: 1,
 35                 shadeClose:true,
 36                 skin: 'layui-layer-rim', //加上边框
 37                 area: ['420px', '240px'], //宽高
 38                 content:tmp
 39               });
 40         })
 41        
 42         function loadData(query_url){
 43             $('#data_grid').datagrid({
 44                 title: '已上线活动列表',
 45                 fitColumns: true,//不指定高度或宽度,则自适应
 46                 nowrap: true,
 47                 striped: true,//设置为true将交替显示行背景
 48                 autoRowHeight: true,
 49                 collapsible: true,
 50                 method: 'get',
 51                 url:query_url,//一个用以从远程站点请求数据的超链接地址
 52                 sortName: 'createTime',//默认排序列名
 53                 sortOrder: 'desc',//默认字段排序方式
 54                 remoteSort: true,//是否通过远程服务器对数据排序
 55                 singleSelect: false,//设置为true将只允许选择一行
 56                 idField: 'id',//表明该列是一个唯一列
 57                 columns: [
 58                     [
 59                         {field: 'ck', checkbox: true},
 60                         {field: 'id', hidden: true},
 61                         {field: 'activityId',40, title: '活动id', align: 'center', halign: 'center', sortable: true},
 62                         {field: 'activityName', 80,title: '活动名称', align: 'center', halign: 'center', sortable: true},
 63                         {field: 'startTime', 60, title: '开始时间', align: 'center', halign: 'center', sortable: true},
 64                         {field: 'endTime',  60,title: '结束时间', align: 'center', halign: 'center', sortable: true},
 65                         {field: 'createTime', 60, title: '上线时间', align: 'center', halign: 'center', sortable: true},
 66                         {
 67                             field: 'cityCode',  130,title: '地市', align: 'center', halign: 'center', sortable: true,formatter: function (value, row, index) {
 68                                 if (!isNullOrUndefined(value)) {
 69                                     if(value.indexOf('0')>-1){return "全省";}
 70                                     else{
 71                                         var arr=value.split(',');
 72                                         var tmp='';
 73                                         
 74                                         for(var t in arr){
 75                                             if(!citymap[arr[t]])
 76                                                 continue;
 77                                             tmp+=citymap[arr[t]]
 78                                             if(t!=arr.length-1)
 79                                                 tmp+=',';
 80                                         }
 81                                         if(arr.length>8){return '<span id="showCity" value="'+tmp+'">地市过多,点击查看<span>'};
 82                                         return tmp;
 83                                     }
 84                                 }
 85                                 return value;
 86                             }
 87                         }
 88                     ]
 89                 ],
 90                 pagination: true,//设置true将在数据表格底部显示分页工具栏
 91                 rownumbers: true,//设置为true将显示行数
 92                 pageSize: 10,//分页大小
 93                 pageList: [10, 50, 100],//每页的个数
 94                 toolbar: '#jform_contactListtb',//工具栏、菜单栏
 95                 onLoadSuccess: function (data) {
 96                     $('#data_grid').datagrid('clearSelections');
 97                     $('#activityName').combobox({
 98                          valueField : 'id',  
 99                          textField : 'activityName',  
100                          editable : true,  
101                          required : true,  
102                          mode : 'local',  
103                          data: data.rows  
104                     });
105                 }
106             });
107         }
108         $(function () {
109             loadData(base_url);
110         });
111 
112 
113         /**
114          * 查询
115          */
116         function query() {
117                 
118                 var name=$('#activityName').combobox('getText');
119                 console.log(name);
120                 var city=$('#cityCode').val();
121                 console.log(city);
122                 var time= $('#createTime').datebox('getValue');
123                 console.log(time);
124                 var queryUrl=base_url+'?query=true';
125                 
126                 if(name&&name!=''){
127                     queryUrl+='&activityName='+name.trim();
128                 }
129                 if(city&&city!=''){
130                     queryUrl+='&cityCode='+city.trim();        
131                 }
132                 if(time&&time!=''){
133                     queryUrl+='&createTime='+time.trim();
134                 }
135                 loadData(queryUrl);
136         }
137 
138 
139         /**
140          * 删除
141          */
142         function del() {
143             var selRows = $('#data_grid').datagrid('getChecked');
144             if (selRows.length <= 0) {
145                 layer.msg('请至少选择一行进行操作', {time: 1000});
146                 return;
147             }
148             layer.confirm('确定要进行删除吗?', {
149                 btn: ['确定', '取消'] //按钮
150             }, function () {
151                 var ids = [];
152                 $.each(selRows, function (i, v) {
153                     ids.push(v.id);
154                 });
155                 $.post(contextPath+'/rest/manage/act/del/actInfo?ids=' + ids.toString(), function (data) {
156                     layer.msg(data.msg, {time: 2000});
157                     $('#data_grid').datagrid('load');
158                     $('#data_grid').datagrid('clearSelections');
159                 }, 'json');
160             });
161 
162         }
163 
164 
165         /**
166          * 用户弹窗
167          */
168         function oper(oper) {
169             if ('add' == oper) {
170                 $('#form_tag').dialog('setTitle', '新增活动');
171                 $('#addTag_form').form('clear');
172                 $('#saveBtn').attr('onclick', "doAdd()");
173                 $('#channel').combobox('setValue', 0);
174                 $('#state1').prop('checked', 'checked');
175                 $('#isLogin1').prop('checked', 'checked');
176                 $('#imgUrl').hide();
177                 //新增校验
178                 $('#img_file').filebox('enableValidation');
179             } else {
180                 //清空图片框里面的值
181                 $('#img_file').filebox('clear');
182                 //修改不校验图片必填
183                 $('#img_file').filebox('disableValidation');
184                 var selRows = $('#data_grid').datagrid('getChecked');
185                 if (selRows.length != 1) {
186                     layer.msg('请选择一行进行修改', {time: 1000});
187                     return;
188                 }
189                 var rowsId = selRows[0].id;
190                 $('#form_tag').dialog('setTitle', '修改活动');
191                 $('#saveBtn').attr('onclick', "doAdd('edit')");
192                 $('#addTag_form').form('load', selRows[0]);
193                 //图片
194                 $('#imgUrl').show().attr('src', selRows[0].imgUrl);
195             }
196             $('#form_tag').dialog('open');
197         }
198 
199         /**
200          * 保存
201          */
202         function doAdd(oper) {
203             var url = contextPath+'/rest/manage/act/save/actInfo';
204 
205             $('#addTag_form').form('submit', {
206                 url: url,
207 
208                 onSubmit: function (param) {
209                     return $('#addTag_form').form('validate');
210                 },
211                 success: function (data) {
212                     $('#form_tag').dialog('close');
213                     var resMsg = $.parseJSON(data);
214                     layer.msg(resMsg.msg, {time: 2000});
215                     $('#data_grid').datagrid('load');
216                     $('#data_grid').datagrid('clearSelections');
217                     location.reload( true );
218                     loadData(base_url);
219                 }
220             });
221         }
222 
223         function refrash(){
224             location.reload( true );
225             loadData(base_url);
226         }
227     </script>
228 </head>
229 
230 <body>
231 
232 <!--数据表格-->
233 <table id="data_grid"></table>
234 
235 <!--grid 工具栏构建-->
236 <div id="jform_contactListtb" style="padding:3px; height: auto">
237     <form id="search_form" enctype="multipart/form-data">
238         <div name="searchColums" class="table-container">
239             <!--查询条件-->
240             <table class="editTab">
241                 <tr>
242                     <th>活动上线时间:</th>
243                     <td>
244                         <input type="text" name="createTime" id="createTime" class="easyui-datebox"/>
245                     </td>
246 
247 <!--                     <th>活动开始时间:</th>
248                     <td>
249                         <input type="text" name="qStartTime" id="qStartTime" class="easyui-datebox"/>
250                     </td>
251 
252                     <th>活动结束时间:</th>
253                     <td>
254                         <input type="text" name="qEndTime" id="qEndTime" class="easyui-datebox"/>
255                     </td>
256  -->
257                     <th>活动名称:</th>
258                     <td>
259                         <select style="80px;" name="activityName" id="activityName" class="easyui-combobox"
260                                 data-options="editable:false,multiple:false">
261                             <option value="">全部</option>
262                         </select>
263                     </td>
264 
265                     <th>地市:</th>
266                     <td>
267                         <select style="80px;" name="cityCode" id="cityCode">
268                             <option value="0">全省</option>
269                             <option value="A">A 郑州</option>
270                             <option value="B">B 开封</option>
271                             <option value="C">C 洛阳</option>
272                             <option value="D">D 平顶山</option>
273                             <option value="E">E 安阳</option>
274                             <option value="F">F 鹤壁</option>
275                             <option value="G">G 新乡</option>
276                             <option value="H">H 焦作</option>
277                             <option value="J">J 濮阳</option>
278                             <option value="K">K 许昌</option>
279                             <option value="L">L 漯河</option>
280                             <option value="M">M 三门峡</option>
281                             <option value="N">N 商丘</option>
282                             <option value="P">P 周口</option>
283                             <option value="Q">Q 驻马店</option>
284                             <option value="R">R 南阳</option>
285                             <option value="S">S 信阳</option>
286                             <option value="U">U 济源</option>
287                         </select>
288                     </td>
289                 </tr>
290             </table>
291             <!--操作按钮-->
292             <div style="height:auto; 100%;" class="datagrid-toolbar">
293                 <div style="float:left;line-height:40px;padding-top:5px;">
294                     <input type="button" value="新增" class="btn btn-sm btn-success" onclick="oper('add')"/>
295                     <input type="button" value="修改" class="btn btn-sm btn-warning" onclick="oper('edit')"/>
296                     <input type="button" value="删除" class="btn btn-sm btn-danger" onclick="del()"/>
297                     <input type="button" value="刷新" class="btn btn-sm btn-primary" onclick="refrash()"/>
298                 </div>
299                 <div style="float:right;line-height:40px;padding-top:5px;">
300                     <input type="button" value="查询" class="btn btn-sm btn-success" onclick="query();"/>
301                     <input type="button" value="重置" class="btn btn-sm btn-info" onclick="$('#search_form').form('clear');$('#qChannel').combobox('setValue',0);$('#qTagId').combobox('setValue','');$('#qState').combobox('setValue','')"/>
302                 </div>
303             </div>
304         </div>
305     </form>
306 </div>
307 
308 
309 <!--列表新增弹窗-->
310 <div id="form_tag" class="easyui-dialog" title="新增热销服务列表" style="300px;height:auto;display:none;"
311      data-options="resizable:true,modal:true,closed:true,buttons:'#bb'">
312     <form method="post" id="addTag_form" enctype="multipart/form-data">
313         <input type="hidden" id="id" name="id"/>
314         <table class="editTab">
315             <tr>
316                 <th width="20%"><span style="color:red;">*</span>活动id:</th>
317                 <td width="70%">
318                     <input type="text" name="activityId" id="title"  style="100%;" class="easyui-textbox" data-options="required:true">
319                 </td>
320             </tr>
321 
322             <tr>
323                 <th><span style="color:red;">*</span>活动名称:</th>
324                 <td>
325                     <input type="text" name="activityName" id="title" style="100%;" class="easyui-textbox" data-options="required:true">
326                 </td>
327             </tr>
328 
329             <tr>
330                 <th>
331                     地市:
332                 </th>
333                            <td>
334                         <select class="easyui-combobox" data-options="multiple:true" style="100%;" name="cityCode">
335                             <option value="0">全省</option>
336                             <option value="A">A 郑州</option>
337                             <option value="B">B 开封</option>
338                             <option value="C">C 洛阳</option>
339                             <option value="D">D 平顶山</option>
340                             <option value="E">E 安阳</option>
341                             <option value="F">F 鹤壁</option>
342                             <option value="G">G 新乡</option>
343                             <option value="H">H 焦作</option>
344                             <option value="J">J 濮阳</option>
345                             <option value="K">K 许昌</option>
346                             <option value="L">L 漯河</option>
347                             <option value="M">M 三门峡</option>
348                             <option value="N">N 商丘</option>
349                             <option value="P">P 周口</option>
350                             <option value="Q">Q 驻马店</option>
351                             <option value="R">R 南阳</option>
352                             <option value="S">S 信阳</option>
353                             <option value="U">U 济源</option>
354                         </select>
355                     </td>
356             </tr>
357             <tr>
358                 <th>
359                    活动开始时间:
360                 </th>
361                 <td>
362                     <input type="text" name="startTime" id="startTime" class="easyui-datebox"/>
363                 </td>
364             </tr>
365                 <th>
366                     活动结束时间:
367                 </th>
368                 <td>
369                     <input type="text" name="endTime" id="endTime" class="easyui-datebox"/>
370                 </td>
371             </tr>
372             
373             <th>
374                     活动上线时间:
375                 </th>
376                 <td>
377                     <input type="text" name="createTime" id="createTime" class="easyui-datetimebox"/>
378                 </td>
379             </tr>
380 
381         </table>
382     </form>
383 </div>
384 
385 <!--dialog 按钮-->
386 <div id="bb" style="display: none;">
387     <button type="button" id="saveBtn" class="btn btn-success btn-sm" onclick="doAdd('add');">保存</button>
388     <button type="button" class="btn btn-warning btn-sm" onclick="$('#form_tag').dialog('close');">取消</button>
389 </div>
390 
391 
392 </body>
393 </html>
View Code

流程说明:需要新增一个功能,先设计好表,然后生成mapper和xml以及实体类,其次,在Service里面的BeanNameMap放一下,其次复制页面到需要的目录去,然后,参照实体类更改datagrid相应字段以及form字段,修改下页面地址的最后一个名字为实体类的名字驼峰写法。

约束:表字段建议最多两个单词,如果是图片,那么建议以img_*存储字段

功能说明:自动根据url的name封装成对应的实体类,如果上传图片了,那么自动保存到一个图片字段里,自动判断是保存还是修改操作,最后几乎不写代码实现一个功能模块的添加

原文地址:https://www.cnblogs.com/swtjavaspace/p/6251930.html