项目本质是使用SSH框架构建J2EE web,同时对各个模块能自动生成MVC各层的文件而自动实现该模块基本的增删改查的功能。
总体思路是先搭建好了基于SSH的web工程,配置好各个框架的配置文件确定好各层文件的目录。然后根据数据库表使用eclipse的插件
jboss hibernate tools 根据数据库表生成实体bean以及hibernate 映射文件,然后根据实体bean 使用反射等生成action、dao、logic、jsp
等文件实现该实体bean的增删改成功能。
首先是搭建web工程,新建maven工程使用maven来进行项目管理(maven确实值得一用,介绍资料很多这里不多说),修改pom文件引入
工程依赖,这里使用了struts2.3.16,spring4.1.2,hibernate4.3.7,都是目前最新的release版。
首先说下三者的集成,struts通过在web.xml配置
<!-- 定义Struts2的FilterDispathcer的Filter --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter> <!-- FilterDispatcher用来初始化Struts2并且处理所有的WEB请求。 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
通过StrutsPrepareAndExecuteFilter进行初始化以及请求拦截。初始化时会在classpath目录下找配置文件struts.xml。
spring 通过在web.xml里配置
<!-- 配置Spring配置文件的位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml </param-value> </context-param> <!-- 使用ContextLoaderListener初始化Spring容器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
使用Listener进行初始化,并且根据contextConfigLocation参数找配置文件。
这样sturts和spring就集成在了web项目里。
Hibernate可以说是作为spring的一个扩展组件集成的,在spring的配置文件applicationContext中配置
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!-- 指定连接数据库的驱动 --> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <!-- 指定连接数据库的URL --> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/> <!-- 指定连接数据库的用户名 --> <property name="user" value="root"/> <!-- 指定连接数据库的密码 --> <property name="password" value="**"/> <!-- 指定连接数据库连接池的最大连接数 --> <property name="maxPoolSize" value="40"/> <!-- 指定连接数据库连接池的最小连接数 --> <property name="minPoolSize" value="1"/> <!-- 指定连接数据库连接池的初始化连接数 --> <property name="initialPoolSize" value="1"/> <!-- 指定连接数据库连接池的连接的最大空闲时间 --> <property name="maxIdleTime" value="20"/> </bean> <!-- 定义Hibernate的SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- 依赖注入数据源,注入正是上面定义的dataSource --> <property name="dataSource" ref="dataSource"/> <!-- mappingResouces属性用来列出全部映射文件 --> <property name="mappingLocations"> <list> <value>classpath:/com/way/sshweb/beans/*.hbm.xml</value> </list> </property> <!-- 定义Hibernate的SessionFactory的属性 --> <property name="hibernateProperties"> <props> <!-- 指定数据库方言 --> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQL5InnoDBDialect</prop> <!-- 是否根据需要每次自动创建数据库 --> <prop key="hibernate.hbm2ddl.auto">update</prop> <!-- 显示Hibernate持久化操作所生成的SQL --> <prop key="hibernate.show_sql">true</prop> <!-- 将SQL脚本进行格式化后再输出 --> <prop key="hibernate.format_sql">true</prop> </props> </property> </bean>
这样hiernate的sessionFactory由spring的factorybean提供。
之后就是具体某个数据库表的增删改查模块。首先是建立数据库表,写实体bean以及hibernate映射文件;然后写DAO,让dao类集成自HibernateDaoSupport
通过getHibernateTemplate()继续增删改查操作;之后是Logic,logic类依赖DAO类,业务类方法主要也是获取实体类列表、获取某个实体等,没有特殊
处理的话直接调用dao类的函数即可;然后是Action,action继承自ActionSupport,且依赖于logic类,struts action作为controller根据不同的请求调用不同的
方法,返回不同的Result进行页面渲染。
这里为了简化客户端编码使用了jquery-easyui(很多组件样式,用来做后台管理类界面很容易),它主要是使用json和后台通讯,比如说列表功能,你只需要返回一串
json给它,前端就能自动解析成表格列出来。struts2返回json是通过struts2-json-Plugin实现的,使用也很简单。
最后记得配置struts的action,同时配置spring的dao、logic bean用来注入到action里。
这里可以看出后端基本功能的代码很大程度上是一个同样的模式,这就可能实现自动化。
从数据库表到实体bean,hibernate tools工具能很好的完成,就不需要重复,出发实现更高层度的自动化,我们需要实现从实体bean到action,dao,logic的自动化。
基本通过反射能够完成。
项目地址:https://github.com/littlecoderonway/sshweb