`
javawhf
  • 浏览: 7155 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

也谈我开发SSH框架

阅读更多
下面是本人在业余时间搞的框架的简要介绍,无所谓推广,跟大家一起分享和交流
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  
上述工作完成后,相关的代码简单的表现为:
列表:
<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框架搭建源码

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个压缩包文件"SSHdemo"提供了一个SSH框架搭建登录功能的示例,帮助开发者了解并实践如何整合这三个框架来构建一个...

    ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架

    ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ssh 框架 ...

    ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架

    ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ...

    ssh框架开发短信平台

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常用的一套集成框架。这个框架集合了MVC(Model-View-Controller)设计模式的Struts2,依赖注入和面向切面编程的Spring,以及持久层管理的...

    简单ssh框架(适合开发及初学者了解ssh框架)

    SSH框架,全称为Struts2、Hibernate和Spring的集成,是Java Web开发中常见的三大开源框架的组合。这个框架集合提供了模型-视图-控制器(MVC)模式、对象关系映射(ORM)以及依赖注入(DI)和面向切面编程(AOP)的...

    ssh框架jar包整合

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大框架。这三大框架分别负责表现层、业务层和持久层的管理,为开发者提供了高效、灵活且可扩展的开发环境。在Java Web项目中,SSH框架的...

    ssh框架开发包

    SSH框架,全称为Spring、Struts、Hibernate,是Java Web开发中的一个经典组合。这个框架集合了Spring的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP),Struts的MVC设计...

    SSH框架整合项目源码

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个项目源码提供了SSH整合的实践案例,特别适合初学者学习和理解Web应用的开发流程。 Struts2作为MVC(Model-View-...

    SSH框架JAR包集合

    SSH框架,全称为Spring、Struts和Hibernate,是Java Web开发中的一个经典组合,用于构建高效、可维护的Web应用程序。这些框架各自负责不同的职责,Spring作为基础架构框架,Struts处理视图与控制,Hibernate则专注于...

    ssh框架纯净版

    SSH框架,全称为Struts2、Spring和Hibernate的组合,是Java Web开发中常见的三大开源框架集成。这个“ssh框架纯净版”包含了这三个框架的基础组件和相关代码,旨在提供一个简洁、无多余依赖的开发环境。 1. **...

    eclipse插件生成ssh框架

    eclipse插件生成ssh框架和ssi框架

    Eclipse搭建SSH框架开发学习笔记

    总结来说,"Eclipse搭建SSH框架开发学习笔记"涵盖了从基础环境准备(JDK安装与环境变量配置)、开发工具(Eclipse与Tomcat配置)、数据库(MySQL服务器搭建)到系统服务管理等多个环节,为初学者提供了详尽的步骤...

    Java SSH 框架整合,学习源码

    Java SSH 框架整合是Java开发中常见的一项技术,主要涉及Spring、Struts和Hibernate这三个开源框架。这些框架在企业级应用开发中扮演着重要角色,分别负责控制层、视图层和持久层的管理。下面将详细介绍SSH框架整合...

    idea中ssh框架整合

    在这个过程中,我们需要了解 SSH 框架的基本概念和配置,包括如何在 Idea 中创建 SSH 项目,如何配置 SSH 框架,如何使用 SSH 框架进行开发等。 SSH 框架的基本概念 ------------------- SSH 框架是一种基于 Java...

    基于ssh框架开发的在线考试系统

    【基于SSH框架开发的在线考试系统】是一种使用Java技术栈,结合Struts、Spring和Hibernate三个开源框架构建的Web应用程序。SSH是这三个框架首字母的缩写,它们分别是:Struts(表示MVC架构的Action层)、Spring...

    基于SSH框架的员工管理系统

    此外,学习和熟练掌握SSH框架也需要一定的学习曲线,但一旦熟悉,就能显著提高开发效率。 总结来说,"基于SSH框架的员工管理系统"是一个利用Struts2处理Web请求,Spring管理业务逻辑和对象依赖,Hibernate负责...

    基于SSH框架开发的图书管理系统

    **基于SSH框架开发的图书管理系统** SSH框架是Java Web开发中的一个经典组合,它由Spring、Struts和Hibernate三个开源框架组成。这个框架组合在早期的Web应用开发中被广泛使用,提供了强大的功能和良好的可扩展性。...

    ssh框架开发jar包

    SSH框架,全称为Spring、Struts和Hibernate的组合,是Java Web开发中广泛使用的三大开源框架。它们分别负责应用的依赖注入(IoC/DI)、表现层管理和持久层操作。这个"ssh框架开发jar包"集合了这三大框架的所有开发所...

    毕业设计 基于SSH框架的系统

    【标题】"基于SSH框架的系统"是一种常见的企业级应用开发模式,SSH分别代表Spring、Struts和Hibernate三个开源框架的首字母缩写。Spring作为核心的IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented ...

    SSH框架整合jar包

    SSH框架整合是Java Web开发中常见的一种技术栈组合,它由Spring、Struts2和Hibernate三个框架构成。这个"SSH框架整合jar包"是开发者为了方便项目构建,避免手动逐个添加和配置这三个框架所需的库文件而制作的集合。...

Global site tag (gtag.js) - Google Analytics