此次完成一个省市级联的小例子来进行说明,本文如有错误请广大博友指出
一、首先集成spring+hibernate
1.这两个框架集成已经在我的另外一篇博文中写了~~在此就不重复叙述,详情请见:点击打开链接
2.创建数据库.....province 与 city两张表
/*
SQLyog Ultimate v8.32
MySQL - 5.5.28 : Database - users
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`users` /*!40100 DEFAULT CHARACTER SET gbk */;
USE `users`;
/*Table structure for table `city` */
DROP TABLE IF EXISTS `city`;
CREATE TABLE `city` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`cname` varchar(20) NOT NULL,
`pid` int(11) NOT NULL,
PRIMARY KEY (`cid`),
KEY `FK_city` (`pid`),
CONSTRAINT `FK_city` FOREIGN KEY (`pid`) REFERENCES `province` (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Data for the table `city` */
/*Table structure for table `province` */
DROP TABLE IF EXISTS `province`;
CREATE TABLE `province` (
`pid` int(11) NOT NULL AUTO_INCREMENT,
`pname` varchar(20) NOT NULL,
PRIMARY KEY (`pid`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;
/*Data for the table `province` */
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
3,根据数据库字段创建两张表的实体类与映射文件,两张表为多对一的关系
public class Province implements Serializable {
private int pid;
private String pname;
private Set<City> cities = new HashSet<City>();
//此处省略setter与getter方法
}
public class City implements Serializable {
private int cid;
private String cname;
private Province province;
}
映射文件:Province.hbm.xml
<hibernate-mapping package="com.minty.entity">
<class name="Province">
<id name="pid">
<generator class="native"></generator>
</id>
<property name="pname"></property>
<set name="cities" inverse="true">
<key column="pid"></key>
<one-to-many class="City"/>
</set>
</class>
</hibernate-mapping>
City.hbm.xml
<hibernate-mapping package="com.minty.entity">
<class name="City">
<id name="cid">
<generator class="native"></generator>
</id>
<property name="cname"></property>
<many-to-one name="province" class="Province" column="pid" ></many-to-one>
</class>
</hibernate-mapping>
不要忘记在applicationContext.xml中导入该配置文件
4.编写Dao,DaoImpl,Biz ,BizImpl
此处省略...............dao中为所要实现的方法,biz中调用dao的方法
不要忘记在applicationContext.xml中配置 dao 与biz 并 给 dao 中注入 hibernateTemplate 模板
5.到这里最好进行下测试,这里spring 与 hibernate 集成完成,下面是dwr配置
二、集成DWR
1.首先添加dwr的jar文件支持,请自己下载..................................
2.在web.xml配置dwr的核心Servlet
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
3.在WEB-INF目录下创建dwr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"
"http://getahead.org/dwr/dwr20.dtd">
<dwr>
<allow>
<!-- 配置转换器 -->
<convert match="com.minty.entity.Province" converter="bean"></convert>
<convert match="com.minty.entity.City" converter="bean">
<!-- 转换时不包含City类中的province属性,笔者因为dwr无法转换此对象,所以将其排除 -->
<param name="exclude" value="province"></param>
</convert>
<!-- 配置创建器,此前用dwr时creator="new" 现在将其改为spring -->
<create javascript="JProvince" creator="spring">
<!-- name为固定写法 value为spring配置文件中创建biz的id-->
<param name="beanName" value="provinceBiz"></param>
<include method="getAllProvince" />
</create>
<create javascript="JCity" creator="spring">
<param name="beanName" value="cityBiz"></param>
<include method="getCityByProvinceId" />
</create>
</allow>
</dwr>
4.配置完成进入dwr调试界面进行调试,如果调试成功则说明集成成功
5.在界面中调用方法,不要忘记在dwr调试界面中将一下几个js导入
映射文件:
<script type='text/javascript' src='/SSHDemo2/dwr/interface/JCity.js'></script>
<script type='text/javascript' src='/SSHDemo2/dwr/interface/JProvince.js'></script>
<script type='text/javascript' src='/SSHDemo2/dwr/engine.js'></script>
<script type='text/javascript' src='/SSHDemo2/dwr/util.js'></script>
页面:
<script type="text/javascript">
function loadProvince() {
JProvince.getAllProvince(function(data) {
for ( var i = 0; i < data.length; i++) {
DWRUtil.removeAllOptions("province");
DWRUtil.addOptions("province", data, "pid", "pname");
}
});
}
function loadCity(pid) {
JCity.getCityByProvinceId(pid,function(data){
for(var i=0;i<data.length;i++){
DWRUtil.removeAllOptions("city");
DWRUtil.addOptions("city",data,"cid","cname");
}
});
}
</script>
<body οnlοad="loadProvince()">
省份:
<select id="province" οnchange="loadCity(this.value)">
<option value="0">
请选择
</option>
</select>
市:
<select id="city">
<option value="0">
请选择
</option>
</select>
到此已经全部集成成功