商业业务逻辑开发之自动化

qixiaorui 2009-05-08 10:17:53


小工具可以从http://qixiaorui.blog.chinajavaworld.com/entry/9356/0/获得


商业业务逻辑开发不仅要实现接口的内容,而且还要完成对数据库的所有表的基本操作,为了节省开发时间,这里我们将利用一个自动编码工具,该工具将自动生成对系统所有表的四个基本操作:插入、修改、删除和查询。
该工具的潜在规则的解释以表SBSSubject为例:

public int insertToTsbssubject(Vector v){}
public int updateTsbssubjectByID(long id,Vector v){}
public int deleteTsbssubjectByID(long id){}
public Vector getTsbssubjectInfoByID(long id){} Vector里存放一条记录
public Vector getTsbssubjectInfo(){} Vector里存放子Vector

按照规定,每个表将有五个基本操作被实现。如果系统有16张表,这五个基本操作的和就是一个很大的数字(代码将近3000行,有82K之多)。要是我们每次都把精力集中到这些基本操作的实现上,我们将耗费掉很大的精力,所以让电脑来帮助我们完成这些小工作还算是一个明智的选择。
该工具目前只支持以下数据类型:
 mediumint
 int
 varchar
 text
 longtext
且数据表定义必须以mediumint类型的ID字段开头!
以下是运行界面图:


该工具实现了两种功能:为表格设计基本操作相关的函数,为表格模型映射相关类。

1、与特定表有关的基本操作函数

以新闻的附件表sbsarticleattach为例,在c:\1.txt中生成的代码如下:

/**
* 表-sbsarticleattach(ID,msgID,name,displayName)
* 操作:插入一条记录
* 入口参数:Vector,包含了所有字段的集合
* 出口参数: int,-1表示插入失败
* 代码编写:CodeGenerateFromMySQL
*/
public int insertToTsbsarticleattach(Vector v){
int ret=0;

MDBClass mdb=new MDBClass();

String sql="insert into sbsarticleattach values("+
((Long)v.elementAt(0)).longValue()+","+
((Long)v.elementAt(1)).longValue()+","+
"'"+(String)v.elementAt(2)+"',"+
"'"+(String)v.elementAt(3)+"'"+
")";
try{
ret=mdb.executeUpdate(sql);
mdb.closeAll();
}catch(Exception ex){
System.out.println(ex.toString());
}
return ret;
}

/**
* 表-sbsarticleattach(ID,msgID,name,displayName)
* 操作:删除一条记录
* 入口参数:id,记录号
* 出口参数: int,-1表示删除失败
* 代码编写:CodeGenerateFromMySQL
*/
public int deleteTsbsarticleattachByID(long id){
......


当然,表间关系的维护还需要我们自己从代码里实现。所以,与表间关系相关的所有操作(如删除一条全文基本信息需要删除其相关的全文信息、评论信息、图片信息、附件信息等)还需要我们自己在代码里进行修改。

2、几个公共函数。

另外,该工具还实现了两个辅助函数的自动编码,这两个函数可以帮助我们在插入记录前获得可用的编号值。以下是这生成的这两个函数:

/**
* 获取可用记录的编号
* 入口:String sTable:表名
* 出口:long id:编号
* 注意:表中必须定义mediumint类型的字段ID,且为第一个
* 作者:CodeGenerateFromMySQL
*/
public long getAvailableID(String sTable){
long ret=0;
long lngTmp=0;
Vector v=new Vector();

MDBClass mdb=new MDBClass();

String sql="select ID from sTable";
try{
ResultSet rs=mdb.executeQuery(sql);
while(rs.next()){
lngTmp=rs.getLong("ID");
v.addElement(new Long(lngTmp));
}
rs.close();

long total=v.size();
for(long i=1;i<total+1;i++){
int flag=0;
for(int j=0;j<v.size();j++){
lngTmp=((Long)v.elementAt(j)).longValue();
if(i==lngTmp){
flag=1;
break;
}
}
if(flag==0){
ret=i;
break;
}
}
mdb.closeAll();
}catch(Exception ex){
System.out.println(ex.toString());
}

return ret;

}

/**
* 获取新记录的编号
* 入口:String sTable:表名
* 出口:long id:编号
* 注意:表中必须定义mediumint类型的字段ID,且为第一个
* 作者:CodeGenerateFromMySQL
*/
public long getNewID(String sTable){
long ret=0;
long lngTmp=0;

MDBClass mdb=new MDBClass();

String sql="select ID from sTable "+
"order by ID desc";
try{
ResultSet rs=mdb.executeQuery(sql);
if(rs.next()){
lngTmp=rs.getLong("ID");
}
ret=lngTmp+1;

rs.close();
mdb.closeAll();
}catch(Exception ex){
System.out.println(ex.toString());
}

return ret;
}


3、表格模型映射类

该工具不仅可以实现对表的操作的方法代码,还能生成针对表实体的一个从表到类的映射。还是以新闻的附件表sbsarticleattach为例,自动生成的类为SBSTsbsarticleattach.java,代码如下:



/**
* 实体模型
* SBSTsbsarticleattach
* 功能:建立从表格到类的一个实体映射
* 作者:CodeGenerateFromMySQL
*/

package ql.wims; //!!!包的名字在界面的Package处接收用户定义

import java.io.*;
import java.util.Vector;

public class SBSTsbsarticleattach implements Serializable{
long ID; //!!!黑体中的表前缀在界面的Prefix处接收用户输入
long msgID;
String name;
String displayName;

public SBSTsbsarticleattach(long _p0,long _p1,String _p2,String _p3){
this.ID=_p0;
this.msgID=_p1;
this.name=_p2;
this.displayName=_p3;
}
public long getID(){
return this.ID;
}
public void setID(long _p0){
this.ID=_p0;
}
public long getMsgID(){
return this.msgID;
}
public void setMsgID(long _p1){
this.msgID=_p1;
}
public String getName(){
return this.name;
}
public void setName(String _p2){
this.name=_p2;
}
public String getDisplayName(){
return this.displayName;
}
public void setDisplayName(String _p3){
this.displayName=_p3;
}

public String toString(){
return ""+ID; // 这里可以根据实际情况修改,比如这里应该更改为
// return ""+name
}
}





...全文
65 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenvinp 2009-05-10
  • 打赏
  • 举报
回复
有没有提供源码?
qixiaorui 2009-05-08
  • 打赏
  • 举报
回复

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧