spring+dwr

首先开发环境是eclipse.这里需要hibernate3.2和spring2.5,dwr2.0.5,dbcp1.2.2的jar包(这些都是在相应的官方网站下载)
这里我选择的场景是从数据库中读取到一个自己链接的类别显示表sort
下面是其实体类和相应的配置文件代码:
Sort.java

Java代码
package com.tree.entity;   
  
import java.util.HashSet;   
import java.util.Set;   
  
public class Sort {   
private int id;   
private String name;//类别的名字   
private Sort parent;//父节点   
private Set childrens;//子节点   
//geter.seter.....   
}  
package com.tree.entity;

import java.util.HashSet;
import java.util.Set;

public class Sort {
private int id;
private String name;//类别的名字
private Sort parent;//父节点
private Set childrens;//子节点
//geter.seter.....
}

Sort.hbm.xml:

Java代码
   
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
    package="com.tree.entity">   
       
       
       
   
   
       
       
       
       
       
   
   
       
   
   
   
   
   
       
        from Sort sort where sort.parent=null  
    ]]>
   
       
        from Sort sort where sort.parent.id=?   
    ]]>
   
  

 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 package="com.tree.entity">
 
 
 
 

 
 
 
 
 
 

 
 

 


 
  from Sort sort where sort.parent=null
 ]]>

 
  from Sort sort where sort.parent.id=?
 ]]>

看了2个相应的映射实例.我们看看如何完成dao
SortDaoImpl.java

Java代码
package com.tree.dao;   
  
import java.util.List;   
  
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  
import com.tree.entity.Sort;   
/**  
 * 这里与Spring的整合.使用了Spring提供的HibernateDaoSupport  
 * 因为该类提供了getHibernateTemplate()的方法可以获取到HibernateTemplate  
 * @author chenjj  
 */  
public class SortDaoImpl extends HibernateDaoSupport implements SortDaoInf {   
    /**  
     * 添加数据  
     *  @param 需要添加的实例  
     */  
    public void save(Sort sort) {   
        this.getHibernateTemplate().save(sort);   
    }   
    /**  
     * 通过id查找Sort类实例  
     *  @param 类型id  
     */  
    public Sort find(int id) {   
        return (Sort) this.getHibernateTemplate().get(Sort.class, id);   
    }   
    /**  
     * 查询所以父节点实例  
     *   
     */  
    @SuppressWarnings("unchecked")   
    public List findAllParent() {   
        return this.getHibernateTemplate().findByNamedQuery("findAllParent");   
    }   
    /**  
     * 通过父节点id找到其子节点实例  
     * @param id 父节点id  
     */  
    @SuppressWarnings("unchecked")   
    public List findChildByParentId(int id) {   
//使用findByNamedQuery(“相应的配置文件中你对应要使用查询语句的名字”)   
        return this.getHibernateTemplate().findByNamedQuery("findChildByParent", id);   
    }   
       
}  
package com.tree.dao;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.tree.entity.Sort;
/**
 * 这里与Spring的整合.使用了Spring提供的HibernateDaoSupport
 * 因为该类提供了getHibernateTemplate()的方法可以获取到HibernateTemplate
 * @author chenjj
 */
public class SortDaoImpl extends HibernateDaoSupport implements SortDaoInf {
 /**
  * 添加数据
  *  @param 需要添加的实例
  */
 public void save(Sort sort) {
  this.getHibernateTemplate().save(sort);
 }
 /**
  * 通过id查找Sort类实例
  *  @param 类型id
  */
 public Sort find(int id) {
  return (Sort) this.getHibernateTemplate().get(Sort.class, id);
 }
 /**
  * 查询所以父节点实例
  *
  */
 @SuppressWarnings("unchecked")
 public List findAllParent() {
  return this.getHibernateTemplate().findByNamedQuery("findAllParent");
 }
 /**
  * 通过父节点id找到其子节点实例
  * @param id 父节点id
  */
 @SuppressWarnings("unchecked")
 public List findChildByParentId(int id) {
//使用findByNamedQuery(“相应的配置文件中你对应要使用查询语句的名字”)
  return this.getHibernateTemplate().findByNamedQuery("findChildByParent", id);
 }
 
}

HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring 2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:

q      void delete(Object entity):删除指定持久化实例

q      deleteAll(Collection entities):删除集合内全部持久化类实例

q      find(String queryString):根据HQL查询字符串来返回实例集合

q      findByNamedQuery(String queryName):根据命名查询返回实例集合

q      get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例

q      save(Object entity):保存新的实例

q      saveOrUpdate(Object entity):根据实例状态,选择保存或者更新

q      update(Object entity):更新实例的状态,要求entity是持久状态

q      setMaxResults(int maxResults):设置分页的大小

上面对应一些基本的操作解析
下面是配置文件的配置:
首先是web.xml文件中如下:

Java代码
       
       
  dwr-invoker      
  org.directwebremoting.servlet.DwrServlet      
        
   debug      
   true      
 
      
 
      
       
  dwr-invoker      
  /dwr/*      
 
   
    
      
        contextConfigLocation   
        classpath:applicationContext.xml   
   
   
  
    
       
           
            org.springframework.web.context.ContextLoaderListener   
       
   
   
  
   
   
  dwr-invoker  
  org.directwebremoting.servlet.DwrServlet  
    
   debug  
   true  
 
  
 
  
   
  dwr-invoker  
  /dwr/*  
 

 
  
        contextConfigLocation
        classpath:applicationContext.xml
   

 
   
       
            org.springframework.web.context.ContextLoaderListener
       

   

dwr.xml(存放在WEB-INF中)的文件配置:

Java代码
   
   
  
   
  
     
     
     
     
       
 
   
     
     
     
 
   
 
       
  

 
 
 
 
  
 

 
 
 
 

 
 

applicationContext.xml的配置

Java代码
   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">   
       
           
           
           
           
   
   
       
       
           
           
           
           
           
        com/tree/entity/Sort.hbm.xml   
       
   
       
   
           
               
                hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect   
                hibernate.cache.provider_class = org.hibernate.cache.NoCacheProvider   
                hibernate.format_sql = true  
                hibernate.show_sql = true  
                hibernate.hbm2ddl.auto = update   
           
   
       
   
   
   
   
       
       
   
   
  

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
  
  
  
  
 

 
 
  
  
  
  
  
  com/tree/entity/Sort.hbm.xml
  

  

  
   
    hibernate.dialect = org.hibernate.dialect.MySQLInnoDBDialect
    hibernate.cache.provider_class = org.hibernate.cache.NoCacheProvider
    hibernate.format_sql = true
    hibernate.show_sql = true
    hibernate.hbm2ddl.auto = update
   

  

 


 
 
 

完成这些后台的配置与必要的操作定义后..
就可以实现页面树的显示
页面为tree.jsp:因为大部分的操作都使用了tree.js上面.而通过访问http://127.0.0.1:8080/tree(我的项目名称)/dwr可以获取到dwr生成后转化成的js
 
 
 

Java代码
<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="ISO-8859-1"%>   
   
   
   
     
     
     
     
Insert title here   
   
   

   
   
   
  
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="ISO-8859-1"%>



 
 
 
 
Insert title here





核心的tree.js的代码如下:

Java代码
//在页面启动的时候操作   
window.οnlοad=function() {   
    var tree = document.getElementById("tree");   
       
    sortDaoInf.findAllParent(function(sorts){//获取到所有的父元素   
        for(var i=0;i            var sort = sorts[i];   
            var my_ul = document.createElement("ul");   
            my_ul.innerHTML="

  • ";   
                tree.appendChild(my_ul);   
            }   
        });   
    }   
      
        function getSubtree(){   
    //传递的参数可以使用arguments[index..]来获取.javascript一个扩展特点   
                   var name = arguments[0];//获取第一个参数的值   
                   var id = arguments[1];//获取第二个参数的值   
                    var element = document.getElementById(name);   
                    var my_ul = document.createElement("ul");//创建一个ul的元素   
                    sortDaoInf.findChildByParentId(id,function (sorts){//使用sortDaoInf的方法.id为传递的参数.sorts为回调函数.   
                        var str="";   
                        for(var i=0;i                        var sort = sorts[i];   
                            str+="
  • "+sort.name+"
  • ";//将获取到的数据用li形式表示   
                        }   
                    my_ul.innerHTML = str;//将获取到所以li元素添加到相应的ul中   
                    element.appendChild(my_ul);   
      
                    //把"+"号变成"-"号   
                    var img = document.getElementById(id);   
                    img.setAttribute("src","img/minus.gif");   
                       
                    img.onclick = function () {   
                                        showHide(name,id,element);   
                                     };    
                    });    
                }   
      
                function showHide(){   
                    var name = arguments[0];//获取第一个参数的值   
                   var id = arguments[1];//获取第二个参数的值   
                   var root = arguments[2];//获取第三个参数的值   
                    var element = document.getElementById(name);   
                    var img = document.getElementById(id);//获取到相应的Img元素   
                    img.src = "img/plus.gif";   
                    img.onclick = function(){   
                                        getSubtree(name,id);   
                                    }   
                    var subs = element.lastChild;   
                    root.removeChild(subs);//将父元素中子元素删除掉   
                    //subs.style.display="none";   
                }  
    //在页面启动的时候操作
    window.οnlοad=function() {
     var tree = document.getElementById("tree");
     
     sortDaoInf.findAllParent(function(sorts){//获取到所有的父元素
      for(var i=0;i   var sort = sorts[i];
       var my_ul = document.createElement("ul");
       my_ul.innerHTML="
  • ";
       tree.appendChild(my_ul);
      }
     });
    }

     function getSubtree(){
    //传递的参数可以使用arguments[index..]来获取.javascript一个扩展特点
          var name = arguments[0];//获取第一个参数的值
          var id = arguments[1];//获取第二个参数的值
        var element = document.getElementById(name);
        var my_ul = document.createElement("ul");//创建一个ul的元素
        sortDaoInf.findChildByParentId(id,function (sorts){//使用sortDaoInf的方法.id为传递的参数.sorts为回调函数.
         var str="";
         for(var i=0;i      var sort = sorts[i];
          str+="

  • "+sort.name+"
  • ";//将获取到的数据用li形式表示
         }
        my_ul.innerHTML = str;//将获取到所以li元素添加到相应的ul中
        element.appendChild(my_ul);

        //把"+"号变成"-"号
        var img = document.getElementById(id);
        img.setAttribute("src","img/minus.gif");
        
        img.onclick = function () {
             showHide(name,id,element);
             };
        }); 
       }

       function showHide(){
        var name = arguments[0];//获取第一个参数的值
          var id = arguments[1];//获取第二个参数的值
          var root = arguments[2];//获取第三个参数的值
        var element = document.getElementById(name);
        var img = document.getElementById(id);//获取到相应的Img元素
        img.src = "img/plus.gif";
        img.onclick = function(){
             getSubtree(name,id);
            }
        var subs = element.lastChild;
        root.removeChild(subs);//将父元素中子元素删除掉
        //subs.style.display="none";
       }

    通过上面的例子使我更清楚的了解的dwr的作用.和spring的强大.为了实现树的显示也对javascript的编写有了进一步了解..在后面还会搞些更好的东西和结合学习到所有技术在学习同时与大家分享一下
    下面是所有的源码..jar太大就不上传了.

     

    原文来自:雨枫技术教程网 http://www.fengfly.com
    原文网址:http://www.fengfly.com/plus/view-168040-1.html

     

    你可能感兴趣的:(框架整合)