简单的OR-Mapping 工具-有代码讲解

我相信有很多人像我一样不喜欢用hibernate,或者感觉用的不是很明白,所以我有了这个想法做一个简单OR/Mapping
我先说明 我不是在重复制造轮子,我只是想把事情做得更加简单些,先说说我为什么要作这个MYmapping因为
我们公司是做erp的 用的是jdk1.3 还有ejb 框架特老 开发起来特麻烦 每次写jdbc的get set的时候 都要写很多
也许有的朋友会问 为什么不用hibernate ,因为hibernate支持jdk1.3不太好 而且 里面有很多东西感觉都是多余的,出了异常也不知到从何入手,而且配置还不是很熟悉,而且我们大头坚持他的框架可以做任何事情。。。
所以我萌发了这样的念头这个版本的MYMapping已经是2.0版本的了 要比以前配置更加简单 ,更加灵活,我已经用它做到项目里去了,运行非常稳定,所以想把它发上来 让大家看看,我只是一个技术很一般很一般的程序员,只是我比较有想法,有耐心,希望大家不要说我写的东西很烂。。。因为我知道写的的确很烂,所以才发上来 让大家帮忙看看有什么可以改进的地方,我想把它做得更有扩展性,更有可读性,更有效率。
希望大家积极给我发信息。。。

我的这个MYmpping是配合spring一起做得 所以有些你们需要配置下,我想干过一年的程序员都会很快的跑起来。
说明文文件在 doc目录下。
==============================我也有分割线==============================
先说下结构
config这个包包 是专门用来配置的

core 这个包是mapping的核心
里面的db是反射数据库的,mapping是用来缓存影射关系的


//这个方法就是核心中的核心 作查询反射数据库字段用的,我只写了项目里用的大多数字段,如果还有缺的话自己加上
private void selectObj(Property p,Object obj)throws Exception
{
try
{
//获取方法名称setXxxx()。。。然后获取类型,然后根据类型塞入模型中
String fangfa = "set" + p.getName().substring(0, 1).toUpperCase() + p.getName().substring(1);
String type = p.getType();
Method setMonth = null;
if (type.equals("int"))
{

setMonth = obj.getClass().getMethod(fangfa,new Class[]{Integer.TYPE});
Integer ret = new Integer(rs.getInt(p.getColumn()));
setMonth.invoke(obj, new Integer[]{ret});

}
else if (type.equals("double"))
{
setMonth = obj.getClass().getMethod(fangfa,new Class[]{Double.TYPE});
Double ret = new Double(rs.getDouble(p.getColumn()));
setMonth.invoke(obj, new Double[]{ret});

}
else if (type.equals("float"))
{
setMonth = obj.getClass().getMethod(fangfa,new Class[]{Float.TYPE});
Float ret = new Float(rs.getFloat(p.getColumn()));
setMonth.invoke(obj, new Float[] {ret});

}
else if(type.equals("java.sql.Timestamp"))
{
setMonth = obj.getClass().getMethod(fangfa,new Class[]{Class.forName(type)});
Timestamp ret = rs.getTimestamp(p.getColumn());

Timestamp[] t = {ret};
setMonth.invoke(obj, t);

}
else if(type.equals("java.sql.Date"))
{
setMonth = obj.getClass().getMethod(fangfa,new Class[]{Class.forName(type)});
Date ret = rs.getDate(p.getColumn());
Date[] t = {ret};
setMonth.invoke(obj, t);

}
else if(type.equals("blob"))
{
setMonth = obj.getClass().getMethod(fangfa,new Class[]{String.class});
String ret = getBlob(rs,p.getColumn());
String[] t = {ret};
setMonth.invoke(obj, t);

}
else if(type.equals("java.lang.Object"))
{
String objClass = p.getRelation().getClasses();
setMonth = obj.getClass().getMethod(fangfa,new Class[]{Class.forName(objClass)});
Object ret = this.onetoone(p.getRelation(),p);
Object[] t = {ret};
setMonth.invoke(obj, t);

}
else if(type.equals("java.util.ArrayList"))
{

String related = Util.replace(p.getRelated(),"-","");
Object[] rs = {p.getRelation(),p};
Method setMethod = this.getClass().getMethod(related,new Class[]{Relation.class,Property.class});
Object ret = setMethod.invoke(this, rs);


}
else
{
setMonth = obj.getClass().getMethod(fangfa,new Class[]{Class.forName(type)});
Object ret = rs.getObject(p.getColumn());

Object[] t = {ret};
setMonth.invoke(obj, t);

}
}
catch(Exception e)
{
int f= 4;
log.error("selectObj failed", e);
throw new Exception("数据库反射错�"+e);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值