Java # 万能实体类PageData的使用

1. 创建PageData工具类

继承了HashMap,实现了Map,将前台传递过来的数组自动转换成Map对象

添加数据用put,获取数据用get

package com.lwclick.utils;
​
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
​
import javax.servlet.http.HttpServletRequest;
​
/**
 * @Description: pagedata万能实体类,用于接收参数
 */
public class PageData extends HashMap implements Map {
    private static final long serialVersionUID = 1L;
    Map map = null;
    HttpServletRequest request;
​
    public PageData(HttpServletRequest request) {
        this.request = request;
        Map properties = request.getParameterMap();
        Map returnMap = new HashMap();
        Iterator entries = properties.entrySet().iterator();
        Map.Entry entry;
        String name = "";
        String value = "";
        while (entries.hasNext()) {
            entry = (Map.Entry) entries.next();
            name = (String) entry.getKey();
            Object valueObj = entry.getValue();
            if (null == valueObj) {
                value = "";
            } else if (valueObj instanceof String[]) {
                String[] values = (String[]) valueObj;
                for (int i = 0; i < values.length; i++) {
                    value = values[i] + ",";
                }
                value = value.substring(0, value.length() - 1);
            } else {
                value = valueObj.toString();
            }
            returnMap.put(name, value);
        }
        map = returnMap;
    }
​
    public PageData() {
        map = new HashMap();
    }
​
    @Override
    public Object get(Object key) {
        Object obj = null;
        if (map.get(key) instanceof Object[]) {
            Object[] arr = (Object[]) map.get(key);
            obj = request == null ? arr : (request.getParameter((String) key) == null ? arr : arr[0]);
        } else {
            obj = map.get(key);
        }
        return obj;
    }
​
    public String getString(Object key) {
        Object obj = map.get(key);
        if (obj == null) {
            return "";
        }
        if (obj instanceof String) {
            return (String) get(key);
        }
        return "";
    }
​
    public Number getNumber(Object key) {
        Object obj = map.get(key);
        if (obj == null) {
            return Integer.valueOf(0);
        }
        if ((obj instanceof Number)) {
            Number objNum = (Number)obj;
            return objNum;
        }
        return Integer.valueOf(0);
    }
​
    @SuppressWarnings("unchecked")
    @Override
    public Object put(Object key, Object value) {
        return map.put(key, value);
    }
​
    @Override
    public Object remove(Object key) {
        return map.remove(key);
    }
​
    public void clear() {
        map.clear();
    }
​
    public boolean containsKey(Object key) {
        return map.containsKey(key);
    }
​
    public boolean containsValue(Object value) {
        return map.containsValue(value);
    }
​
    public Set entrySet() {
        return map.entrySet();
    }
​
    public boolean isEmpty() {
        return map.isEmpty();
    }
​
    public Set keySet() {
        return map.keySet();
    }
​
    @SuppressWarnings("unchecked")
    public void putAll(Map t) {
        map.putAll(t);
    }
​
    public int size() {
        return map.size();
    }
​
    public Collection values() {
        return map.values();
    }
    
    public String[] getKeys(PageData pd){
        Set entries = pd.entrySet();
        String[] str = new String[entries.size()];
        if (entries != null) {
            int i = 0;
            Iterator iterator = entries.iterator();
            while (iterator.hasNext()) {
                Map.Entry entry = (Entry) iterator.next();
                String key = entry.getKey().toString();
                str[i++] = key;
            }
        }
        return str;
    }
    
    public String[] getValues(PageData pd){
        Set entries = pd.entrySet();
        String[] str = new String[entries.size()];
        if (entries != null) {
            int i = 0;
            Iterator iterator = entries.iterator();
            while (iterator.hasNext()) {
                Map.Entry entry = (Entry) iterator.next();
                String val = entry.getValue().toString();
                str[i++] = val;
            }
        }
        return str;
    }
    
    public List<String> getValuesForKeyPrefix(PageData pd, String prefix){
        Set entries = pd.entrySet();
      
        List<String> list = new ArrayList<String>();
        if (entries != null) {
            Iterator iterator = entries.iterator();
            while (iterator.hasNext()) {
                Map.Entry entry = (Entry) iterator.next();
                String key = entry.getKey().toString();
                if(key.startsWith(prefix) 
                   && entry.getValue()!=null){
                    list.add(entry.getValue().toString());
                }
            }
        }
        return list;
    }
}

2. 创建BaseController

controller层的类继承它,就可以通过this.getPageData()方法获取所有从前台接收到的参数(把前台传过来的所有数据都封装进PageData对象里)

import javax.servlet.http.HttpServletRequest;
​
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;
​
import com.easycare.utils.PageData;
​
import ch.qos.logback.classic.Logger;
​
/**
 * @Description: 基础控制类,所有controller类继承它
 */
public class BaseController {
    protected Logger logger = Logger.getLogger(this.getClass());
    // 可以放入 ModelAndView 对象
    /**
     * 当控制器处理完请求时,通常会将包含视图名称或视图对象
     * 以及一些模型属性的ModelAndView对象返回到DispatcherServlet。
     */
    
    private static final long serialVersionUID = 6357869213649815390L;
​
    /**
     * 得到PageData
     */
    public PageData getPageData() {
        return new PageData(this.getRequest());
    }
​
    /**
     * 得到ModelAndView
     */
    public ModelAndView getModelAndView() {
        return new ModelAndView();
    }
​
    /**
     * 得到request对象
     */
    public HttpServletRequest getRequest() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
                .getRequest();
        return request;
    }
​
    /**
     * 得到32位的uuid
     * 
     * @return
     */
    /*public String get32UUID(){
        
        return UuidUtil.get32UUID();
    }
    
    /**
      * 得到分页列表的信息
      */
    public Page getPage(){
        return new Page();
    }
​
    public static void logBefore(Logger logger, String interfaceName) {
        logger.info("");
        logger.info("<--------------start------------------>");
        logger.info(interfaceName);
    }
​
    public static void logAfter(Logger logger) {
        logger.info("<--------------end------------------>");
        logger.info("");
    }
​
    public void writeJson(HttpServletResponse response,Object object) throws IOException{
        response.setContentType("text/html;charset=utf-8");
        ObjectMapper objMapper = new ObjectMapper();
        JsonGenerator jsonGenerator = objMapper.getJsonFactory()
                .createJsonGenerator(response.getOutputStream(),
                        JsonEncoding.UTF8);
        
        jsonGenerator.writeObject(object);
        jsonGenerator.flush();
        jsonGenerator.close();
    }
}

3. mapper.xml中的使用

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.easycare.dao.CommonInfoMapper">
    
    <!-- 别名只需在mybatis配置文件中配置一下就行 -->
    <select id="findPd" parameterType="pd" resultType="pd">
        select * from table
        <where>
        </where>        
    </select>
</mapper>

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 别名 -->
    <typeAliases>
        <typeAlias type="com.lwclick.utils.PageData" alias="pd"/>
    </typeAliases>
</configuration>

4. 在controller中使用

public class TestController extends BaseController {
    @RequestMapping("/testPageData")
    @ResponseBody
    public PageData testPageData() {
        PageData pd = this.getPageData();
        return pd;
        // 要是在BaseController中加入了ModelAndView,此处返回ModelAndView对象
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38134242/article/details/112274373