多表组合查询(二)--后台工具类准备

2012/09/18 1804点热度 0人点赞 0条评论

综合查询(二)--后台工具类准备

 dom4j帮助类

/**
* dom4j帮助类
* @author  yxkong
*/
public class Dom4jUtil {
    /**
     * 获取文档的document对象
     * @param xmlPath 文档路径
     * @return
     * @throws Exception
     */
    public static Document getDocument(String xmlPath) throws Exception{
        return new SAXReader().read(new File(xmlPath));
    }
    /**
     * 将内存中的文档对象Documnet写入到对应的xml中
     * @param document 内存中的Document对象
     * @param xmlPath xml文档路径
     * @throws Exception
     */
    public static void write2xml(Document document,String xmlPath) throws Exception{
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter writer = new XMLWriter(new FileOutputStream(xmlPath), format);
        writer.write(document);
        writer.close();
    }
}

操作xml帮助类

/**
 * xml帮助工具类
 * @author yxkong
 *
 */
public class SearchUtil {
                    
    //系统数据查询来源配置初始化路径,在服务器启动的时候获取
    private static String path;
                
    public static String getPath() {
        return path;
    }
                
    public static void setPath(String path) {
        SearchUtil.path = path;
    }
    //个人模板路径
    private static String myTPath;
    /**
     * 个人模板真实路径
     * @return
     */
    public static String getMyTPath() {
        return myTPath;
    }
    //在用户登录的时候获取
    public static void setMyTPath(String myTPath) {
        SearchUtil.myTPath = myTPath;
    }
                
    /** 
     *  根据模板id查询指定的模板,将模板回显到条件定制页面
     * @param id 模板id
     */
    public static Map<String, Object> findTemplateById(String id){
        Map<String, Object> map=null;
        try {
            Document doc=Dom4jUtil.getDocument(myTPath);
            //Document doc=Dom4jUtil.getDocument("D:\\javaServer\\tomcat\\Tomacte5.5\\webapps\\dwyglsvn\\WEB-INF\\userSearchTemplate\\admin1.xml");
            String xpath="/searchCondition/searchTemplate[@id='"+id+"']";
            //获取到指定的节点
            Node node = doc.selectSingleNode(xpath);
            if (node != null) {
                map=new HashMap<String, Object>();
                // 判断node是否是一个元素
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element e = (Element) node;
                    //将属性放入map
                    map.put("id", id);
                    map.put("name", e.attributeValue("name"));
                    map.put("fromTable", e.attributeValue("fromTable"));
                    map.put("tableHead", e.attributeValue("tableHead"));
                                    
                    List<Map<String,String>> list=null;
                    //遍历每个tr将每个tr集合放入list
                    List<Element> elements = e.elements();
                    if(elements!=null){
                        list=new ArrayList<Map<String,String>>();
                        Map<String,String> m=null;
                        for(Element el:elements){
                            m=new HashMap<String, String>();
                            m.put("ljys", el.attributeValue("ljys"));
                            m.put("zkh", el.attributeValue("zkh"));
                            m.put("tableName", el.attributeValue("tableName"));
                            m.put("columnName", el.attributeValue("columnName"));
                            m.put("gx", el.attributeValue("gx"));
                            m.put("cxtjz", el.attributeValue("cxtjz"));
                            m.put("ykh", el.attributeValue("ykh"));
                            list.add(m);
                        }
                    }
                    map.put("trs", list);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return map;
    }
    /**
     *  查找所有的定制条件
     * @param xmlPath  传入指定的xml文档路径
     * @return
     */
    public static List<Map<String,String>> findAllSearchCondition(String xmlPath){
        List<Map<String,String>> list=null;
        try {
            Document doc=Dom4jUtil.getDocument(xmlPath);
            String xpath="/searchCondition/searchTemplate";
            List<Node> nodes=doc.selectNodes(xpath);
            Map<String,String> m=null;
            list=new ArrayList<Map<String,String>>();
            for(Node n:nodes){
                if(n.getNodeType()==Node.ELEMENT_NODE){
                    Element e=(Element)n;
                    m=new HashMap<String, String>();
                    m.put(e.attributeValue("id"), e.attributeValue("name"));
                    list.add(m);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
    /**
     * 获取当前用户保存的查询条件
     * @param xmlPath  传入指定的xml文档
     * @return
     */
    public static int countSearchConditon(){
        List<Map<String,String>> list=findAllSearchCondition(myTPath);
        if(list!=null)
            return list.size();
        else
            return 0;
    }
    /**
     * 获取当前用户的保存条件的最大id
     * @param xmlPath 指定的xml的路径
     * @return
     */
    public static int findMaxId(String xmlPath){
        int max=0;
        try {
            Document doc = Dom4jUtil.getDocument(xmlPath);
            String xpath="/searchCondition/searchTemplate";
            List<Node> nodes=doc.selectNodes(xpath);
            for(Node n:nodes){
                if(n.getNodeType()==Node.ELEMENT_NODE){
                    Element e=(Element)n;
                    String strId=e.attributeValue("id");
                    int id = Integer.parseInt(strId);
                    if(id>max)
                        max=id;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return max;
    }
    /**
     * 删除指定的模板
     * @param id 删除模板的id
     * @param  xmlPath  指定的xml文档地址
     * @return
     */
    public static Boolean deleteConById(String id,String xmlPath){
        Boolean  resultFlag=false;
        try {
            Document doc=Dom4jUtil.getDocument(xmlPath);
            String xpath="/searchCondition/searchTemplate[@id='"+id+"']";
            //获取到指定的节点
            Node node = doc.selectSingleNode(xpath);
            //获取根节点
            Element  root=doc.getRootElement();
            root.remove(node);
            Dom4jUtil.write2xml(doc, xmlPath);
            resultFlag=true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resultFlag;
    }
    /**
     * 获取所有的表对象
     * @param xmlpath xml的路径
     * @return
     */
    @SuppressWarnings("unchecked")
    public static List<Table> getAllTables(String xmlpath){
        List<Table> tables=null;
        try{
            Document doc=Dom4jUtil.getDocument(xmlpath);
            String xpath="/conditions/table";
            List<Node> nodes=doc.selectNodes(xpath);
            Table table=null;
            tables=new ArrayList<Table>();
            for(Node n:nodes){
                if(n.getNodeType()==Node.ELEMENT_NODE){
                    Element e=(Element)n;
                    table=new Table();
                    table.setName(e.attributeValue("name"));
                    table.setValue(e.attributeValue("value"));
                    tables.add(table);
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
                    
        }
        return tables;
    }
    /**
     * 将xml对应的table中的Column封装到list集合中
     * @param xmlpath  xml路径
     * @param tableName  要取出哪个表的数据
     * @return
     */
    @SuppressWarnings("unchecked")
    public static List<Column> getColumnsByTable(String xmlpath, String tableName) {
        List<Column> columns = null;
        try {
            Document doc = Dom4jUtil.getDocument(xmlpath);
            String xpath = "/conditions/table[@name='" + tableName + "']";
            Node node = doc.selectSingleNode(xpath);
                
            if (node != null) {
                // 判断node是否是一个元素
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element e = (Element) node;
                    List<Element> elements = e.elements("column");
                    // 实例化对象
                    columns = new ArrayList<Column>();
                    Column column = null;
                    // 将xml中对应的table中的column中的属性封装到list中
                    for (Iterator<Element> iter = elements.iterator(); iter
                            .hasNext();) {
                        Element columnelement = iter.next();
                        column = new Column();
                        column.setName(columnelement.attributeValue("name"));
                        column.setShowText(columnelement
                                .attributeValue("showText"));
                        column.setType(columnelement.attributeValue("type"));
                        columns.add(column);
                    }
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return columns;
    }
    /**
     * 查询所有的可查询字段
     * @param xmlPath
     * @return
     */
    public static List<Column> getAllColumns(String xmlPath){
        List<Column> columns = null;
        try {
            Document doc = Dom4jUtil.getDocument(xmlPath);
            String xpath = "//table/column";
            List<Node> nodes = doc.selectNodes(xpath);
            columns=new ArrayList<Column>();
            Column column=null;
            for(Node n:nodes){
                if(n.getNodeType()==Node.ELEMENT_NODE){
                    Element e=(Element)n;
                    column=new Column();
                    column.setName(e.attributeValue("name"));
                    column.setShowText(e.attributeValue("showText"));
                    column.setType(e.attributeValue("type"));
                    columns.add(column);
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return columns;
    }
    /**
     * 将查询类型为select的下拉选数据查找出来
     * @param tableName  要查找的表名
     * @param columnName  对应的列名
     * @param xmlpath  xml文档保存的路径
     * @return
     */
    @SuppressWarnings("unchecked")
    public static List<SearchValue> getSearchValueByXpath(String tableName,String columnName,String xmlpath){
        List<SearchValue> searchValues = null;
        try {
            Document doc = Dom4jUtil.getDocument(xmlpath);
            String xpath="/conditions/table[@name='" + tableName + "']/column[@name='"+columnName+"']";
            Node node = doc.selectSingleNode(xpath);
                
            if (node != null) {
                // 判断node是否是一个元素
                if (node.getNodeType() == Node.ELEMENT_NODE) {
                    Element e = (Element) node;
                    List<Element> elements = e.elements("searchValue");
                    // 实例化对象
                    searchValues = new ArrayList<SearchValue>();
                    SearchValue searchValue = null;
                    // 将xml中对应的table中的column中的属性封装到list中
                    for (Iterator<Element> iter = elements.iterator(); iter.hasNext();) {
                        Element searchlement = iter.next();
                        searchValue = new SearchValue();
                        searchValue.setName(searchlement.attributeValue("name"));
                        searchValue.setValue(searchlement.attributeValue("value"));
                        searchValues.add(searchValue);
                    }
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return searchValues;
    }
}

操作xml的action(使用struts1)

/**
 * 操做xml的action
 */
public class ConfigSearchAction extends StrutsEntityAction  {
    /**
     * 获取所有的模板
     */
    public ActionForward findAllTemplate(ActionMapping actionMapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
        try {
            //获取登录用户所在区代码
            Map infoMap = new GetUserInfo().getUserInfoMap(request);
            request.setAttribute(com.buffalo.web.framework.Constants.KEY_FORWARD_SINGLE,Boolean.TRUE);
            //获取用户登录名
            String loginName = (String) infoMap.get("loginName");
            if(StringUtils.isNotBlank(loginName)){
                //获取项目的根路径
                String rootPath=request.getSession().getServletContext().getRealPath("/");
                //获取当前用户的模板的真实路径,可以直接使用searchUtil中的个人模板路径
                String realPath=rootPath+"WEB-INF/userSearchTemplate/"+loginName+".xml";
                List<Map<String,String>> allMb = SearchUtil.findAllSearchCondition(realPath);
                request.setAttribute("allMb", allMb);
            }
        }catch(Exception e){
            e.printStackTrace();
            return actionMapping.findForward("allMbPage");
        }
        return actionMapping.findForward("allMbPage");
    }
    /**
     * 根据模板id删除对应的模板
     */
    public void deleteConById(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)
    throws IOException {
        String id=request.getParameter("id");
        response.setCharacterEncoding("GBK");// 设置编码
        try {
            //获取登录用户所在区代码
            Map infoMap = new GetUserInfo().getUserInfoMap(request);
            String loginName = (String) infoMap.get("loginName");
            if(StringUtils.isNotBlank(loginName)){
                Boolean b=SearchUtil.deleteConById(id, SearchUtil.getMyTPath());
                String result="no";
                if(b){
                    result="ok";
                }
                response.getWriter().print(result);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 根据模板id获取模板
     */
    public void findTemplateById(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        String id=request.getParameter("id");
        response.setCharacterEncoding("GBK");// 设置编码
        try {
            //获取登录用户所在区代码
            Map infoMap = new GetUserInfo().getUserInfoMap(request);
            String loginName = (String) infoMap.get("loginName");
            if(StringUtils.isNotBlank(loginName)){
                Map<String, Object> map = SearchUtil.findTemplateById(id);
                JSONArray jsonObject=JSONArray.fromObject(map);
                response.getWriter().print(jsonObject);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
                        
    }
    /**
     * 查询根据表名查询所有的字段
     */
    public void findColumnsByTableName(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        String tableName=request.getParameter("tableName");
        System.out.println("请求的表名是"+tableName);
        response.setCharacterEncoding("GBK");// 设置编码
                        
        List<Column> columns=SearchUtil.getColumnsByTable(SearchUtil.getPath(), tableName);
                        
        //将list集合转成json
        JSONArray jsonObject=JSONArray.fromObject(columns);
        response.getWriter().print(jsonObject);
    }
    /**
     * 查找当前字段类型是select的下拉选的内容
     */
    public void findSeachValueByTableNameAndColumnName(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        String tableName=request.getParameter("tableName");
        String columnName=request.getParameter("columnName");
        System.out.println("请求的表名是"+tableName);
        response.setCharacterEncoding("GBK");// 设置编码
                        
        List<SearchValue> searchValues=SearchUtil.getSearchValueByXpath(tableName, columnName, SearchUtil.getPath());
                        
        //将list集合转成json
        JSONArray jsonObject=JSONArray.fromObject(searchValues);
        response.getWriter().print(jsonObject);
    }
}

jdbc帮助类

/**
 * 数据库操作帮助类
 */
public class JdbcUtils {
    private static Properties dbConfig=new Properties();
    private static String driverClass;
    private static String url;
    private static String user;
    private static String password;
                    
    static{
        InputStream in=JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
        try {
            dbConfig.load(in);
            driverClass=dbConfig.getProperty("driverClass");
            url=dbConfig.getProperty("url");
            user=dbConfig.getProperty("user");
            password=dbConfig.getProperty("password");
                            
            Class.forName(driverClass);
                            
        } catch (Exception e) {
                            
            throw new RuntimeException("找不到jdbc的配置文件");
        }
    }
                    
    /**
     * 获取JDBC数据库连接
     * @return
     */
    public static Connection getConnection(){
        Connection conn=null;
        try {
                            
            conn = DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        if(conn==null){
            throw new RuntimeException("获取连接失败");
        }
        return conn;
    }
    /**
     * 关闭连接
     * @param conn
     * @param stm
     * @param rs
     */
    public static void closeSource(Connection conn,Statement stm,ResultSet rs){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                rs=null;
                throw new RuntimeException(e);
            }finally{
                if(stm!=null){
                    try {
                        stm.close();
                    } catch (SQLException e) {
                        stm=null;
                        throw new RuntimeException(e);
                    }finally{
                        if(conn!=null){
                            try {
                                conn.close();
                            } catch (SQLException e) {
                                conn=null;
                                throw new RuntimeException(e);
                            }
                        }
                    }
                }
            }
        }
    }
                      
                
}


yxkong

这个人很懒,什么都没留下

文章评论