您的位置:首页 > 其它

[构建自己的持久层]五、Entity对象描述

2010-08-27 10:55 316 查看
一万年太久,只争朝夕!

我们还是先来看java文件com.cat.xtools.Entity.java

等等,在看文件之前我还有话说:为了实现动态映射,建立了新的对象,或给对象添加了新的属性不重启应用服务器,不重新加载java文件,我们把对象分为两种,一种是普通对象,一种是扩展对象,什么是扩展对象,就是在描述信息里有,在数据库里有,但不真实生成java文件的对象,那这个对象怎么描述,稍后再讲,这里知道即可。

我们把属性也分为两种...嗯!还是小侯同学明白,一下子就说到了点子上,也分为普通属性与扩展属性,扩展属性也不生成java类,在java类里看不到,那么数据保存在哪里呢,也是稍后再讲。

下面继续!

package com.cat.xtools;

import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.cat.xtools.exception.EntityException;

/**
* 实体<br>
* <p>
* 修改日期:2006-1-25
* <p>
* 修改说明:
* <p>
* 版权所有:Copyright 2006 软件有限公司, Inc. All rights reserved.
*
* @version 1.0
* @author 侯正刚
* @since 1.0
*/
public class Entity extends SysEntity {
private String parent=null;//父类名称
private String browserurl=null;//单选地址
private String xbrowserurl=null;//多选地址
private String viewurl=null;//查看地址
private String labelname=null;//标识属性的名称
private String idname=null;//主键的名称
private IDRULE idrule=null;//主键生成规则
private boolean isext=false;//是否是扩展类
private Map properties=new LinkedHashMap();
private String dataname="";
public Entity() {
super();
// TODO Auto-generated constructor stub
}
/**
* 返回父类名称
* @return
*/
public String getParent()
{
return this.parent;
}
/**
* 设置父类
* @param parent
*/
public void setParent(String parent)
{
this.parent=parent;
}
/**
* 设置将实体持久化至哪个数据库
* @param dataname
*/
public void setDataname(String dataname)
{
this.dataname=dataname;
}
public PojoRoot newInstance()throws EntityException
{
if(this.getIsext())
{
PojoRoot pr=new PojoRoot();
pr.$setEntityName(this.getName());
return pr;
}else
{
try
{
return (PojoRoot)Entity.getClass(this.getName()).newInstance();
}catch(Exception ex)
{
throw new EntityException("实例化构件["+this.getName()+"]错误!");
}
}

}
/**
* 返回实体的数据库配置名
* @return
*/
public String getDataname()
{
return this.dataname;
}
/**
* 设置Label名称
* @param labelname
*/
public void setLabelname(java.lang.String labelname)
{
this.labelname=labelname;
}
/**
* 返回Label名称
* @return
*/
public java.lang.String getLabelname()
{
return this.labelname;
}
/**
* 设置Id名称
* @param labelname
*/
public void setIdname(java.lang.String idname)
{
this.idname=idname;
}
/**
* 返回Id名称
* @return
*/
public java.lang.String getIdname()
{
return this.idname;
}
/**
* 设置主键生成规则
* @param idrule
*/
public void setIdRule(IDRULE idrule)
{
this.idrule=idrule;
}
/**
* 根据javabean名称设置主键生成规则
* @param classname
* @throws Exception
*/
public void setIdRule(String classname)throws Exception
{
this.idrule=(IDRULE)Class.forName(classname).newInstance();
}
/**
* 返回主键生成规则
* @return
*/
public IDRULE getIdRule()
{
return this.idrule;
}
/**
* 设置单选列表而
* @param url
*/
public void setBrowserurl(String url)
{
this.browserurl=url;
}
/**
* 返回单选列表而
* @return
*/
public String getBrowserurl()
{
return this.browserurl;
}
/**
* 设置多选列表而
* @param url
*/
public void setXbrowserurl(String url)
{
this.xbrowserurl=url;
}
/**
* 返回多选列表而
* @return
*/
public String getXbrowserurl()
{
return this.browserurl;
}
/**
* 设置查看页
* @param url
*/
public void setViewurl(String url)
{
this.viewurl=url;
}
/**
* 返回查看页
* @return
*/
public String getViewurl()
{
return this.viewurl;
}
/**
* 返回是否是扩展类
* @return
*/
public boolean getIsext()
{
return this.isext;
}
/**
* 设置是否是扩展类
* @param isext
*/
public void setIsext(boolean isext)
{
this.isext=isext;
}
public void addProperty(Property property)
{
this.properties.put(property.getName(),property);
}
public static Class getClass(String EntityName)
{
try
{
return Class.forName("com.cat.xtools.pojo."+EntityName);
}catch(Exception ex)
{
return null;
}
}
/**
* 得到属性
* @param entity
* @param propertyName
* @return
*/
public Property getProperty(Entity entity,String propertyName)
{
if(entity==null)
{
return null;
}

Property myp=(Property)entity.getProperties().get(propertyName);
if(myp==null)
{
return getProperty((Entity)SysInit.entitys.get(entity.getParent()),propertyName);
}else
{
return myp;
}
}
public Map getProperties()
{
return this.properties;
}
/**
* 生成java文件
* @return
*/
public String getJava()
{
String java="";
String pclass="";
java="package com.cat.xtools.pojo;/n/**/n * 实体类-"+this.getLabel()+"Create by CatXtools at "+new Date()+"<br>/n *@author CatXtools/n*//n";
if(Util.null2String(this.getParent()).equals(""))
{
java+="public class "+this.getName()+" extends com.cat.xtools.PojoRoot {/n";
}else
{
java+="public class "+this.getName()+" extends "+this.getParent()+" {/n";
}
Object[] o=this.properties.keySet().toArray();
//生成属性
for(int i=0;i<o.length;i++)
{
Property p=(Property)this.properties.get(o[i]);
pclass+=" $pclass.put(/""+p.getName()+"/","+p.getType().getJavatype()+".class);/n";
//扩展属性不用管
//if(p.getIsext())continue;
java+=" /**/n 属性-"+p.getLabel()+"/n *//n";
java+=" private "+p.getType().getJavatype()+" _"+p.getName()+";/n";
}
//java+=" static/n {/n"+pclass+" }/n";
//生成构造方法
java+="/n public "+this.getName()+"() {/n super();/n this.$setEntityName(/""+this.getName()+"/");/n }/n";

//生成getter和setter方法
for(int i=0;i<o.length;i++)
{
Property p=(Property)this.properties.get(o[i]);
//扩展属性不用管
if(p.getIsext())continue;
//生成getter
java+=" /**/n * 返回属性-"+p.getLabel()+"的值/n * @return "+p.getLabel()+" as "+p.getType().getJavatype()+"/n *//n";
java+=" public "+p.getType().getJavatype()+" get"+p.getName()+"()/n";
java+=" {/n";
java+=" return this._"+p.getName()+";/n";
java+=" }/n/n";

//生成setter
java+=" /**/n * 设置属性-"+p.getLabel()+"的值/n * @param _"+p.getName()+" 值 as "+p.getType().getJavatype()+"/n *//n";
java+=" public void set"+p.getName()+"("+p.getType().getJavatype()+" _"+p.getName()+")/n";
java+=" {/n";
java+=" this._"+p.getName()+"=_"+p.getName()+";/n";
java+=" }/n/n";
}
java+="}";
return java;
}
/**
* 得到类直线继承关系
* @param entity
* @param s
* @return
*/
public static List getLine(Entity entity,List s)
{
if(Util.null2String(entity.getParent()).equals(""))
{
s.add(entity);
return s;
}
s.add(entity);
//s+=","+entity.getName();
return getLine((Entity)SysInit.entitys.get(entity.getParent()),s);

}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

至此,我们可以完整的描述一个对象了,对象有哪些属性,对象的属性都是什么数据类型,噢对了,怎么没有表信息呢?

为了简化开发我们的表名与对象名一致,列名与属性名一致

我们在这里还加了一个功能,不属性描述信息,而是功能,就是生成java源代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: