- 浏览: 7194 次
- 性别:
- 来自: 广州
最近访客 更多访客>>
文章分类
最新评论
-
abs1285:
import whf.framework.entity.A ...
也谈我开发SSH框架 -
sun_soledad:
好东西,记号
也谈我开发SSH框架 -
javawhf:
对于实体,从数据库中的描述即可,如下代码:
<pre n ...
也谈我开发SSH框架 -
longlongriver:
不错!楼主可以参考我的实现:http://www.iteye. ...
也谈我开发SSH框架 -
javawhf:
上述工作完成后,相关的代码简单的表现为:
列表:
<pr ...
也谈我开发SSH框架
也谈我开发SSH框架
下面是本人在业余时间搞的框架的简要介绍,无所谓推广,跟大家一起分享和交流
1.可视化代码生成工具,参考界面
基本原理还是从数据库中生成出来,目前支持mysql和Oracle的数据源,支持外键生成many-to-one关系,可以生成元数据,参考下面元数据介绍;
2.元数据
对象的基本属性,合法性和其他的一些扩展属性的描述,生成代码时可以根据数据库的定义生成,如:数据库字段注释,类型等;
可以用来描述界面,获取关联对象等;
3.RBAC的角色权限控制,并集成ACEGI
4.日志,Lucene等等
详细参考开源http://code.google.com/p/whfframework
import whf.framework.entity.AbstractEntity;
import whf.framework.tools.generator.db.Column;
import whf.framework.tools.generator.db.Table;
import whf.framework.util.BeanUtils;
这些都需要whfframework 的jar包啊,从哪里可以下载,或提供一下
1.可视化代码生成工具,参考界面
基本原理还是从数据库中生成出来,目前支持mysql和Oracle的数据源,支持外键生成many-to-one关系,可以生成元数据,参考下面元数据介绍;
2.元数据
对象的基本属性,合法性和其他的一些扩展属性的描述,生成代码时可以根据数据库的定义生成,如:数据库字段注释,类型等;
可以用来描述界面,获取关联对象等;
3.RBAC的角色权限控制,并集成ACEGI
4.日志,Lucene等等
详细参考开源http://code.google.com/p/whfframework
评论
5 楼
abs1285
2012-07-05
import whf.framework.entity.AbstractEntity;
import whf.framework.tools.generator.db.Column;
import whf.framework.tools.generator.db.Table;
import whf.framework.util.BeanUtils;
这些都需要whfframework 的jar包啊,从哪里可以下载,或提供一下
4 楼
sun_soledad
2009-02-05
好东西,记号
3 楼
javawhf
2008-09-02
对于实体,从数据库中的描述即可,如下代码:
对于其他使用模板,如下:
package whf.framework.tools.generator; import whf.framework.entity.AbstractEntity; import whf.framework.tools.generator.db.Column; import whf.framework.tools.generator.db.Table; import whf.framework.util.BeanUtils; /** * @author wanghaifeng * */ public class EntityGenerator extends AbstractGenerator { private String packageName; private String className; private String[] props; private String[] types; private Table table; public EntityGenerator(String packageName, String className, String[] types, String[] props) { this.packageName = packageName; this.className = className; this.types = types; this.props = props; } public EntityGenerator(String packageName, Table table) { this.packageName = packageName; this.table = table; } public String[] getProps(){ return this.props; } protected void gen() { super.setPackageName(this.packageName+".entity"); super.setSuperClassName(AbstractEntity.class.getName()); super.setImplementsSerializable(true); // super.setInterfaces(new String[]{"I"+this.table.getBoClassName()}); if(table == null){ super.setClassName(this.className); for (int i = 0; props != null && i < props.length; i++) { if(!BeanUtils.hasProperty(AbstractEntity.class, props[i])){ super.addProp(types[i], props[i],true, true, props[i]); } } } else { super.setClassName(table.getBoClassName()); for(Column col: table.getColumns()){ String pn = col.getPropertyName(); if(!BeanUtils.hasProperty(AbstractEntity.class, pn)){ super.addProp(col.getPropertyType(), col.getPropertyName(), true, true, col.getColumnComment()); // if(!col.isForeign()){ // super.addProp(col.getPropertyType(), pn,true, true); // }else{ // String refTableName = col.getReferencedTable(); // String refBo = Utils.getBoClassName(refTableName, table.getTablePre()); // String dt = this.packageName+".entity."+refBo; // String p = pn; // if(p.toLowerCase().endsWith("id")){ // p = p.substring(0, p.length() - 2); // } // super.addProp(dt, p, true, true); // } } } } } public static void main(String[] args) throws Exception { } }
对于其他使用模板,如下:
<?xml version="1.0" encoding="UTF-8"?> <root> <comment> <![CDATA[ {0}:boClassName {1}:bo variable {2}:rootPackage {3}:tableName {4}:subModule {5}:now {6}:IBOClassName ]]> </comment> <java> <bo></bo> <dao> <![CDATA[ package {2}.dao; import {2}.entity.{0}; /** * 数据访问对象接口 * @author wanghaifeng * @email king@126.com * @modify {5} */ public interface {0}DAO extends whf.framework.dao.DAO<{0}> { } ]]> </dao> <daoImp> <![CDATA[ package {2}.dao; import {2}.entity.{0}; /** * 数据访问对象具体实现 * @author wanghaifeng * @email king@126.com * @modify {5} */ public class {0}DAOImp extends whf.framework.dao.DAOImp<{0}> implements {0}DAO { } ]]> </daoImp> <service> <![CDATA[ package {2}.service; import {2}.entity.{0}; /** * 服务对象接口 * @author wanghaifeng * @email king@126.com * @modify {5} */ public interface {0}Service extends whf.framework.service.Service<{0}> { } ]]> </service> <serviceImp> <![CDATA[ package {2}.service; import whf.framework.exception.ServiceNotFoundException; import {2}.entity.{0}; import {2}.dao.{0}DAO; import whf.framework.util.BeanFactory; /** * 服务对象具体实现,委托相应的dao对象实现相关操作 * @author wanghaifeng * @email king@126.com * @modify {5} */ public class {0}ServiceImp extends whf.framework.service.ServiceImp<{0}> implements {0}Service { public void set{0}DAO({0}DAO {1}DAO) { this.entityDAO = {1}DAO; } /** * 静态的简单的服务获取方法 */ public static {0}Service get{0}Service() throws ServiceNotFoundException { return ({0}Service)BeanFactory.getService({0}ServiceImp.class) ; } } ]]> </serviceImp> <webservice> <![CDATA[ package {2}.webservice; import javax.jws.WebService; import {2}.entity.{6}; import whf.framework.exception.CreateException; import whf.framework.exception.NotFoundException; import whf.framework.exception.RemoveException; import whf.framework.exception.UpdateException; /** * web服务接口,定义远程服务可以使用的方法 * @author wanghaifeng * @email king@126.com * @modify {5} */ @WebService(targetNamespace="http://whf.framework/{0}Service") public interface {0}ServiceWS { public void create({6} {1}) throws CreateException; public void update({6} {1}) throws UpdateException; public void remove({6} {1}) throws RemoveException; public void remove(long id) throws RemoveException; public void remove(long[] ids) throws RemoveException; public {6} findByPrimaryKey(long id) throws NotFoundException; } ]]> </webservice> <webserviceImp> <![CDATA[ package {2}.webservice; import javax.jws.WebService; import {2}.entity.{6}; import {2}.service.{0}Service; import whf.framework.exception.CreateException; import whf.framework.exception.NotFoundException; import whf.framework.exception.RemoveException; import whf.framework.exception.UpdateException; /** * web服务的实现,委托具体的本地服务类实现相关操作 * @author wanghaifeng * @email king@126.com * @modify 2006-10-31 */ @WebService(serviceName = "{0}Service", endpointInterface = "{2}.service.{0}ServiceWS") public class {0}ServiceWSImp implements {0}ServiceWS { /** * 委托服务 */ private {0}Service service; public void setService({0}Service service) { this.service = service; } public void create({6} {1}) throws CreateException { this.service.create({1}); } public void update({6} {1}) throws UpdateException { this.service.update({1}); } public void remove({6} {1}) throws RemoveException { this.service.remove({1}); } public void remove(long id) throws RemoveException { this.service.remove(id); } public void remove(long[] ids) throws RemoveException { this.service.remove(ids); } public {6} findByPrimaryKey(long id) throws NotFoundException { return this.service.findByPrimaryKey(id); } } ]]> </webserviceImp> <dispatch-action> <![CDATA[ package {2}.web; import whf.framework.web.struts.WebDispatchAction; /** * @author wanghaifeng * @email king@126.com * @modify {5} */ public class {0}Action extends WebDispatchAction { } ]]> </dispatch-action> </java> <xml> <meta> <![CDATA[ <meta package="{2}"> <rowsPerPage>10</rowsPerPage> <name>{0}</name> <description/> <serviceName>{0}Service</serviceName> <daoName>{0}DAO</daoName> <modelClass>{0}</modelClass> <actionClass>{0}Action</actionClass> <serviceClass>{0}ServiceImp</serviceClass> <daoClass>{0}DAOImp</daoClass> <persistenceTable>{3}</persistenceTable> <parentModelClass/> </meta> ]]> </meta> <spring> <![CDATA[ <bean id="{4}.{0}DAO" class="{2}.dao.{0}DAOImp"> <property name="daoSupport"> <ref bean="daoSupport"/> </property> </bean> <bean id="{4}.{0}Service" parent="txProxyTemplate"> <property name="transactionManager"> <ref bean="transactionManager"/> </property> <property name="target"> <bean id="{4}.{0}ServiceTarget" class="{2}.service.{0}ServiceImp"> <property name="{1}DAO"> <ref bean="{4}.{0}DAO"/> </property> </bean> </property> </bean> ]]> </spring> <spring2> <![CDATA[ <bean id="{0}DAO" class="{2}.dao.{0}DAOImp"> <property name="sessionFactory"><ref bean="sessionFactory"/></property> </bean> <bean id="{0}Service" parent="txProxyTemplate"> <property name="target"> <bean class="{2}.service.{0}ServiceImp"> <property name="{1}DAO"><ref bean="{0}DAO"/></property> </bean> </property> </bean> ]]> </spring2> <hibernate></hibernate> <struts> <![CDATA[ <form-bean name="{4}{0}Form" type="{2}.entity.{0}"/> <action path="/{4}/{0}" type="{2}.web.{0}Action" name="{4}{0}Form" scope="request" parameter="webMethod" validate="true"> <forward name="list" path="/common/global/list_jsp"/> <forward name="edit" path="/common/global/edit_jsp"/> <forward name="view" path="/common/global/view_jsp"/> </action> ]]> </struts> <webservice> <![CDATA[ <bean id="{0}WS" class="org.codehaus.xfire.spring.remoting.XFireExporter"> <property name="serviceFactory"> <ref bean="xfire.serviceFactory"/> </property> <property name="xfire"> <ref bean="xfire"/> </property> <property name="serviceBean"> <ref bean="{0}Service"/> </property> <property name="serviceClass"> <value>{2}.service.{0}ServiceWSImp</value> </property> </bean> ]]> </webservice> </xml> <jsp> <edit> <![CDATA[ <%@page contentType="text/html;charset=UTF-8"%> <%@ page import="whf.framework.web.Constants"%> <%@taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean"%> <%@taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html"%> <%@taglib uri="/WEB-INF/tlds/framework.tld" prefix="framework"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title><bean:write name="STRUTS-META" property="name" /></title> <jsp:include page="/inc/select.jsp" /> </head> <body> <html:form action="<%= (String)request.getAttribute(Constants.STRUTS_PATH) %>" method="post"> <html:hidden property="webMethod" /> <framework:ext /> <framework:table pkStyle="" navPosition="none" pageSize="1" displayStyle="form" editable="true" useStrutsForm="true"> <framework:caption><span class="whf_object_title"><framework:attr source="STRUTS-META" attr="name" /></span></framework:caption> </framework:table> <html:submit><bean:message key="form.submit" /></html:submit> <html:reset><bean:message key="form.reset" /></html:reset> </html:form> </body> </html> ]]> </edit> <list> <![CDATA[ <%@page contentType="text/html;charset=UTF-8"%> <%@ page import="whf.framework.web.Constants"%> <%@taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean"%> <%@taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html"%> <%@taglib uri="/WEB-INF/tlds/framework.tld" prefix="framework"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title><framework:attr source="STRUTS-META" attr="name" /></title> <jsp:include page="/inc/select.jsp" /> </head> <body> <html:form action='<%= (String)request.getAttribute(Constants.STRUTS_PATH) %>' method="post"> <html:hidden property="webMethod" value="list" /> <framework:ext /> <framework:table pkStyle="checkbox" navPosition="both" queryString=""> <framework:caption><span class="whf_object_title"><framework:attr source="STRUTS-META" attr="name" /></span></framework:caption> </framework:table> <framework:funcbtn operation="prepareCreate" validationFunction="" valueKey="form.create" /> <framework:funcbtn operation="prepareUpdate" validationFunction="selectionMoreThanOne" valueKey="form.update" /> <framework:funcbtn operation="duplicate" validationFunction="selectionMoreThanOne" valueKey="form.duplicate" /> <framework:funcbtn operation="delete" validationFunction="selectionMoreThanOne" valueKey="form.delete" /> <html:reset><bean:message key="form.reset" /></html:reset> </html:form> </body> </html> ]]> </list> <view> <![CDATA[ <%@page contentType="text/html;charset=UTF-8"%> <%@ page import="whf.framework.web.Constants"%> <%@taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean"%> <%@taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html"%> <%@taglib uri="/WEB-INF/tlds/framework.tld" prefix="framework"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title><bean:write name="STRUTS-META" property="name" /></title> <jsp:include page="/inc/select.jsp" /> </head> <body> <html:form action="<%= (String)request.getAttribute(Constants.STRUTS_PATH) %>" method="post"> <html:hidden property="id" /> <html:hidden property="webMethod" /> <framework:table pkStyle="" navPosition="none" pageSize="1" displayStyle="form"> <framework:caption><span class="whf_object_title"><framework:attr source="STRUTS-META" attr="name" /></span></framework:caption> </framework:table> <input type='button' onclick='window.history.back()' value='<bean:message key="form.return" />' /> <html:reset><bean:message key="form.reset" /></html:reset> </html:form> </body> </html> ]]> </view> </jsp> </root>
2 楼
longlongriver
2008-09-02
不错!楼主可以参考我的实现:http://www.iteye.com/topic/232219
另外,能否介绍一下你的代码生成器的设计思路,供大家参考参考!
另外,能否介绍一下你的代码生成器的设计思路,供大家参考参考!
1 楼
javawhf
2008-09-02
上述工作完成后,相关的代码简单的表现为:
列表:
编辑:
主从表编辑:
查看:
对于真正使用过程可以通过定义公共jsp文件,而对于服务器端都作了第一层封装处理,如果没有特殊处理,你不需要写一行代码;
列表:
<framework:table pkStyle="checkbox_counter" navPosition="both" queryString="<%= queryString %>"> <framework:caption><span class="whf_object_title"><framework:attr source="STRUTS-META" attr="name" /></span></framework:caption> </framework:table>
编辑:
<framework:table pkStyle="" border="1" cellspacing="0" cellpadding="0" navPosition="none" pageSize="1" displayStyle="form" editable="true" useStrutsForm="true" view="SYSTEM-OBJECT-VIEW"> <framework:caption><span class="whf_object_title"><bean:write name="STRUTS-META" property="name" /></span></framework:caption> </framework:table>
主从表编辑:
<input type="hidden" name="UPDATING_PROPERTY_NAME" value="properties" /> <html:hidden property="webMethod" /> <framework:table pkStyle="" border="1" cellspacing="0" cellpadding="0" navPosition="none" pageSize="1" displayStyle="form" editable="true" useStrutsForm="true" view="SYSTEM-OBJECT-VIEW"> <framework:caption><span class="whf_object_title"><bean:write name="STRUTS-META" property="name" /></span></framework:caption> </framework:table> <framework:table id="ObjectProperty" pkStyle="checkbox_counter" pkSuffix="true" namePrefix="Property" border="1" cellspacing="0" cellpadding="0" boClassName="whf.framework.meta.entity.ObjectProperty" navPosition="bottom" pageSize="100" editable="true" useStrutsForm="true" dataSourceName=".sortedProperties"> </framework:table>
查看:
<html:form action="<%= (String)request.getAttribute(Constants.STRUTS_PATH) %>" method="post"> <html:hidden property="id" /> <html:hidden property="webMethod" /> <framework:table pkStyle="" border="1" cellspacing="0" cellpadding="0" navPosition="none" pageSize="1" displayStyle="form" useStrutsForm="true"> <framework:caption><span class="whf_object_title"><framework:attr source="STRUTS-META" attr="name" /></span></framework:caption> </framework:table> <input type='button' onclick='window.history.back()' value='<bean:message key="form.return" />' /> </html:form>
对于真正使用过程可以通过定义公共jsp文件,而对于服务器端都作了第一层封装处理,如果没有特殊处理,你不需要写一行代码;
相关推荐
SSH框架,全称为Struts+Spring+Hibernate,是Java企业级开发中常用的一种技术栈,主要用于构建基于MVC(Model-View-Controller)设计模式的Web应用。在本篇文章中,我们将深入探讨这三个组件的核心概念和进阶用法,...
Hibernate太重,他想作的事太多了,我个人觉得,像hibernate事务,完全鸡肋,而缓存,大部分时候也用不上,需要用到的场景,完全可以自已开发,更轻,而数据关系变得复杂后,hibernate越难驾驭,分布式事务的时候,...
通过上述知识点的学习,开发者可以全面了解JavaWeb、jQuery、Ajax、SSM/SSH框架以及Angular/Ionic结合开发移动应用的相关技术细节。这些技术不仅适用于京东商城移动端项目的开发,也能广泛应用于其他类型的Web和移动...
展望未来,我计划继续优化SSH框架,开发OA系统,同时做好现有项目的维护工作。我还将不断学习最新的技术知识,提升个人能力,以期为公司创造更大的价值。我相信,通过不懈的努力和持续的学习,我能够在软件工程师的...
从提供的信息来看,此面试题重点考察了面试者的JavaWeb开发能力,特别是对MVC设计模式的理解以及相关框架的运用,如Struts和SSH整合。 首先,MVC(Model-View-Controller)是一种广泛应用于Web开发的设计模式。...
在当今的软件开发领域中,Hibernate作为一个非常流行的Java持久层框架,被广泛应用于企业级应用开发中。然而,Hibernate的懒加载特性虽然能够提升应用性能,但在某些场景下也会给开发者带来诸多不便。本文将浅谈解决...
SSH(Spring、Struts、Hibernate)是经典的Java企业级开发框架,面试中可能会涉及Spring的依赖注入、AOP、MVC模式,Struts的Action、Result、Interceptor,以及Hibernate的ORM映射和SQL操作。 九、数据库 1. SQL...
Vue.js是一款流行的前端框架,用于构建用户界面。在项目开发过程中,自动化部署打包是提高效率、减少错误的关键步骤。本文将深入探讨Vue项目的自动化部署打包上线,帮助开发者了解如何实现这一过程。 首先,自动化...