`
erbin
  • 浏览: 4359 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

简单的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);
		}
	}
分享到:
评论
29 楼 leexhwhy 2009-04-16  
只看你的变量命名方式,就知道代码质量好不了
28 楼 sun2009 2009-04-16  
楼主有个性很好,你的代码我在看呢,但我建议你去看看hibernate和ibatis源码,相信你可以学到不少,也可以很好的改善你这个MYmapping
27 楼 mlxy 2009-04-16  
楼主精神可嘉,我相信在写这个工具的同时也学到了不少东西,楼主的脾气虽然有点浮躁,情绪有点激动,我想这个和有些孤芳自赏或者自以为是的或者总是拿着一心挑别人毛病的人的回复有关,别一看到有一点低级的代码就感到厌恶,给成长中的兄弟一条活路,谢谢。
26 楼 Ashela 2009-04-16  
erbin 写道
我一会就把我的核心思想讲出来 我现在在单位上班呢 不能分心 工作要尽心,请大家见谅我没有把东西讲明白。。

呵呵,LZ勇气可嘉,这点挺让人佩服的,能再虚心点就好了
25 楼 erbin 2009-04-16  
我一会就把我的核心思想讲出来 我现在在单位上班呢 不能分心 工作要尽心,请大家见谅我没有把东西讲明白。。
24 楼 erbin 2009-04-16  
Ashela 写道
erbin 写道
hallenzzz 写道
erbin 写道
大哥们,高手们,你们别天天老是吹。。。。
有能耐就给点有实际意义的建议,我不行,我不才,至少我做了,javaeye封我号怎么了,我继续,我坚持,做人就要做事就要尽心尽力才对


楼主做的没有错。
如果你的程序在你的项目中提供了客户所需要的功能,而且提供了足够的生产力,你的开发就是成功的,最适合的东西才是最好的,不是么?Tapestry的开发者不是也放弃了spring么?客户怎么会管你用得是不是Hibernate?
想想我们国内的开源项目要么无人问津,要么被无数国内的高手们骂得狗血喷头(而且都是拿国外的产品做比较,从来不是他们自己开发的东西),如果你抱怨某些经典的产品不好使,他们只会告诉你:“是你自己不会用”,或者嘲笑你,很少有人会站你的立场或者帮你思考解决方案的。
我能理解你想创新的想法,但是你在这里恐怕很难得到帮助。如果你真的想提高,可以尝试加入国外新兴的一些开源ORM产品的社区,或许能找到一些志同道合的朋友,而且那里有很多是中国人。
祝你好运!加油哦。



555555555555555555555。。。。感动中。。。
谢谢 你的一番话 讲出了我内心想说的虽然我不知道该怎么表达,我会继续努力的,可能我不会在弄这个mapping工具 或者我以后不会在it这个行业了,但是我永远会坚持到底,努力,在努力,永不服输。。。

被那无数个5雷到了
这么情绪化的程序员是很难有进步的


5就是有点夸张 实际上我并没有那么大的情绪 谁说情绪大的程序员没有发展了 hibernate的作者 脾气暴躁 不是也很牛B么
23 楼 Ashela 2009-04-16  
erbin 写道
hallenzzz 写道
erbin 写道
大哥们,高手们,你们别天天老是吹。。。。
有能耐就给点有实际意义的建议,我不行,我不才,至少我做了,javaeye封我号怎么了,我继续,我坚持,做人就要做事就要尽心尽力才对


楼主做的没有错。
如果你的程序在你的项目中提供了客户所需要的功能,而且提供了足够的生产力,你的开发就是成功的,最适合的东西才是最好的,不是么?Tapestry的开发者不是也放弃了spring么?客户怎么会管你用得是不是Hibernate?
想想我们国内的开源项目要么无人问津,要么被无数国内的高手们骂得狗血喷头(而且都是拿国外的产品做比较,从来不是他们自己开发的东西),如果你抱怨某些经典的产品不好使,他们只会告诉你:“是你自己不会用”,或者嘲笑你,很少有人会站你的立场或者帮你思考解决方案的。
我能理解你想创新的想法,但是你在这里恐怕很难得到帮助。如果你真的想提高,可以尝试加入国外新兴的一些开源ORM产品的社区,或许能找到一些志同道合的朋友,而且那里有很多是中国人。
祝你好运!加油哦。



555555555555555555555。。。。感动中。。。
谢谢 你的一番话 讲出了我内心想说的虽然我不知道该怎么表达,我会继续努力的,可能我不会在弄这个mapping工具 或者我以后不会在it这个行业了,但是我永远会坚持到底,努力,在努力,永不服输。。。

被那无数个5雷到了
这么情绪化的程序员是很难有进步的
22 楼 jansel 2009-04-16  
既然是代码讲解,就把其中的设计思路和核心的代码拿出来给大家讲解一下,而不是让大家自行下载下来去看去研究。

21 楼 erbin 2009-04-16  
flyfan 写道
javaeye封过你的号?是因为发这个帖子还是什么原因?有勇气是好,不过别人指出的不足你要敢于承认才会更好



谁指出我的不足了 谁指出 我的代码那里写的有问题了 光说我写的不好有什么用啊
我那知道我那里写的不好,你去看医生 医生告诉你 你有病 你说对我有病 怎么治啊
医生还是说你有病 你说怎么治 医生还是说你有病 。。。。
20 楼 flyfan 2009-04-16  
javaeye封过你的号?是因为发这个帖子还是什么原因?有勇气是好,不过别人指出的不足你要敢于承认才会更好
19 楼 erbin 2009-04-16  
cats_tiger 写道
不是大家抨击你或者有什么偏见,你这确实烂。你让人家拿一个mapping出来,JE的人能写一个ROM的多的是,大家不写,是因为没有人能做出超越Hibernate和Ibatis的,即便做了也不过是又一个轮子。
建议你看一些优秀的源代码,恶补一下OO,然后再反过来重新审视你这个框架。青蛙只有从井里面跳出来才知道天有多大。


我就是青蛙了 我就是井底了 你有能耐你现在给我拿出来一个mapping出来 你自己写的 大哥我就服你以后我不再上javaeye发帖子 你现在给我拿出来一个,你有能耐给我造个轮子出来啊 牛啊
还有 我没有造轮子阿 我们架构师不让我们用jdk 1.4以上的版本阿 我们只能用jdk1.3的 你用hibernate给我在jdk1.3上跑一个 你给我配置一个 我这个工具用在项目里了 很成功 而且是军方的项目 还有 保险行业的项目
怎么了 别老 OO OO的 你牛 你自己开发个操作系统 跟比尔盖茨 比比阿 还有你有车有房子么 不也是个打工的么。
就跟我这个井底之蛙 比行 你厉害我真佩服你
18 楼 erbin 2009-04-16  
hallenzzz 写道
erbin 写道
大哥们,高手们,你们别天天老是吹。。。。
有能耐就给点有实际意义的建议,我不行,我不才,至少我做了,javaeye封我号怎么了,我继续,我坚持,做人就要做事就要尽心尽力才对


楼主做的没有错。
如果你的程序在你的项目中提供了客户所需要的功能,而且提供了足够的生产力,你的开发就是成功的,最适合的东西才是最好的,不是么?Tapestry的开发者不是也放弃了spring么?客户怎么会管你用得是不是Hibernate?
想想我们国内的开源项目要么无人问津,要么被无数国内的高手们骂得狗血喷头(而且都是拿国外的产品做比较,从来不是他们自己开发的东西),如果你抱怨某些经典的产品不好使,他们只会告诉你:“是你自己不会用”,或者嘲笑你,很少有人会站你的立场或者帮你思考解决方案的。
我能理解你想创新的想法,但是你在这里恐怕很难得到帮助。如果你真的想提高,可以尝试加入国外新兴的一些开源ORM产品的社区,或许能找到一些志同道合的朋友,而且那里有很多是中国人。
祝你好运!加油哦。



555555555555555555555。。。。感动中。。。
谢谢 你的一番话 讲出了我内心想说的虽然我不知道该怎么表达,我会继续努力的,可能我不会在弄这个mapping工具 或者我以后不会在it这个行业了,但是我永远会坚持到底,努力,在努力,永不服输。。。
17 楼 cats_tiger 2009-04-16  
不是大家抨击你或者有什么偏见,你这确实烂。你让人家拿一个mapping出来,JE的人能写一个ROM的多的是,大家不写,是因为没有人能做出超越Hibernate和Ibatis的,即便做了也不过是又一个轮子。
建议你看一些优秀的源代码,恶补一下OO,然后再反过来重新审视你这个框架。青蛙只有从井里面跳出来才知道天有多大。
16 楼 hallenzzz 2009-04-16  
erbin 写道
大哥们,高手们,你们别天天老是吹。。。。
有能耐就给点有实际意义的建议,我不行,我不才,至少我做了,javaeye封我号怎么了,我继续,我坚持,做人就要做事就要尽心尽力才对


楼主做的没有错。
如果你的程序在你的项目中提供了客户所需要的功能,而且提供了足够的生产力,你的开发就是成功的,最适合的东西才是最好的,不是么?Tapestry的开发者不是也放弃了spring么?客户怎么会管你用得是不是Hibernate?
想想我们国内的开源项目要么无人问津,要么被无数国内的高手们骂得狗血喷头(而且都是拿国外的产品做比较,从来不是他们自己开发的东西),如果你抱怨某些经典的产品不好使,他们只会告诉你:“是你自己不会用”,或者嘲笑你,很少有人会站你的立场或者帮你思考解决方案的。
我能理解你想创新的想法,但是你在这里恐怕很难得到帮助。如果你真的想提高,可以尝试加入国外新兴的一些开源ORM产品的社区,或许能找到一些志同道合的朋友,而且那里有很多是中国人。
祝你好运!加油哦。
15 楼 Ashela 2009-04-16  
LZ,这里有很多人都自己写过orm,其实大家只是想指出你的orm的不足而已
你说的关于ibatis和hibernate的差异大家都很明白,但是我觉得ibatis和hibernate的区别不仅仅是这些表面上的,可能还涉及到所采用的设计方法的差异,hibernate想从面向对象的方法解决问题,ibatis更多的是从关系型数据入手,用哪个更方便要看具体需求的情况而定
14 楼 erbin 2009-04-16  
不要说别人好不好,我性格怎么有问题了,我有问题怎么了,伤害你了,犯法了么?
随便把你们爱怎么说就怎么说,你们谁不服,自己做个mapping出来 比我的好 比我牛比 让我学习学习 借鉴一下 我就不说啥了 不行 就别说啥。。。。
13 楼 erbin 2009-04-16  
我那里有错误了 哪里有错误了
谁说我性格有问题 你敢说你们性格都好,都没有问题
12 楼 oracoo 2009-04-16  
<div class="quote_title">erbin 写道</div>
<div class="quote_div">
<div class="quote_title">wendong007 写道</div>
<div class="quote_div">
<p>很好很强大,2.0版中竟然还会出现 MingyaTemplaet这样的类名。</p>
<p> </p>
<p>看到这里终于明白为什么 <span>yuan </span><span>同学要批判“山寨”框架的三宗罪了,LZ写这个框架之前真的理解了Hibernate的精髓了吗,突然想起很多面试官喜欢问的一个问题:Hibernate和iBatis最大的区别是什么?</span></p>
</div>
<p>我就不会hibernate才写的这个 明白不 大哥,我要明白hibernate我还用写么。<br>MingyaTemplaet类名是我故意写错的 有个性怎么了。。。</p>
</div>
<p>先不说你写的东西, 看的回复别人的话语, 觉得你性格有严重问题.</p>
11 楼 kjj 2009-04-16  
楼主,有了错误就要虚心改正,错了我,还这么硬起,更别说别人指出你的错误了!!
10 楼 erbin 2009-04-16  
<div class="quote_title">wendong007 写道</div>
<div class="quote_div">
<p>很好很强大,2.0版中竟然还会出现 MingyaTemplaet这样的类名。</p>
<p> </p>
<p>看到这里终于明白为什么 <span>yuan </span><span>同学要批判“山寨”框架的三宗罪了,LZ写这个框架之前真的理解了Hibernate的精髓了吗,突然想起很多面试官喜欢问的一个问题:Hibernate和iBatis最大的区别是什么?</span></p>
</div>
<p>我就不会hibernate才写的这个 明白不 大哥,我要明白hibernate我还用写么。<br>MingyaTemplaet类名是我故意写错的 有个性怎么了。。。</p>

相关推荐

    简单的OR-Mapping 工具---不差托作者

    标题中的“简单的OR-Mapping工具---不差托作者”指的是一个关于对象关系映射(Object-Relational Mapping,简称ORM)的简易工具,由作者“不差托”开发。ORM是一种编程技术,它允许程序员使用面向对象的方式操作...

    SANGFOR_NGAF_6.8_DNS-Mapping配置指导.pdf

    SANGFOR NGAF 6.8 DNS-Mapping 配置指导 SANGFOR NGAF 6.8 DNS-Mapping 配置指导是深信服公司发布的一份关于 NGAF 6.8 version 的 DNS-Mapping 配置指南。下面是从该指导中总结的重要知识点: 1. 文档说明:文档...

    hibernate-mapping-3.0.dtd

    hibernate-mapping-3.0.dtd 配置后,就会在xml中进行提示

    hib-mapping-3.0.dtd

    hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-3.0.dtd hibernate-mapping-...

    hibernate-mapping参数详解

    在深入探讨`hibernate-mapping`参数之前,我们先理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。`hibernate-mapping`是Hibernate配置...

    Hibernate 离线的配置方法(hibernate-mapping-3.0.dtd)

    因为Hibernate在读出hbm.xml文件时需要通过网络读取到hibernate-mapping-3.0.dtd 文件。 如果没有网络不能正常工作。 所以提供上述文件。 以及hibernate-mapping-3.0.dtd,hibernate-configuration-3.0.dtd提供下载...

    xml里filter-mapping中的dispatcher的使

    ### XML中的filter-mapping与dispatcher使用详解 在Java Web开发中,过滤器(Filter)是十分重要的组件之一,主要用于处理客户端请求或响应服务器反馈时的数据处理任务,如编码转换、登录验证、敏感词过滤等。而在...

    react-data-mapping:一个React组件,专注于Data-Mapping和Table-Field-Mapping。

    npm install react-data-mapping API : 数据映射属性 参数 说明 类型 默认值 宽度 组件宽度 数字 默认500,自适应的话可以设置“ auto” 高度 组件高度 数字 默认500,自适应的话可以设置“ auto” 类型 映射类型 ...

    超级注意复杂整合环境中的Filter-Mapping的顺序--配置单点登陆及UrlRewrite有感

    这篇博客“超级注意复杂整合环境中的Filter-Mapping的顺序--配置单点登陆及UrlRewrite有感”深入探讨了如何在这样的环境中正确配置Filter和Mapping,以实现单点登录(Single Sign-On, SSO)以及URL重写。下面我们将...

    matlab-mapping toolbox-提取自r2019b

    同时,工具箱还提供了丰富的示例代码和教程,帮助初学者快速上手。 总结,MATLAB Mapping Toolbox是MATLAB在地理空间领域的重要扩展,它为科研人员和工程师提供了强大的地图处理和分析能力。在R2019b版本中,正确...

    Indoor-Mapping-Using-the-VLC-Channel-State-Information-master源码

    标题 "Indoor-Mapping-Using-the-VLC-Channel-State-Information-master源码" 提供的信息表明,这是一个关于室内定位技术的项目,它利用了Visible Light Communication (VLC)的信道状态信息。VLC是一种利用可见光...

    hibernate-configuration-3.0.dtd、hibernate-mapping-3.0.dtd

    《深入理解Hibernate配置与映射:hibernate-configuration-3.0.dtd与hibernate-mapping-3.0.dtd解析》 在Java世界里,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。而`hibernate-...

    T1-Mapping中文版..pptx

    T1-Mapping 的测量方法有多种,常见的方法有IR序列、Look-Locker序列、MOLLI序列、ShMOLLI序列和SASHA方法。每种方法都有其特点和优缺点。 IR序列是一种经典的T1-Mapping测量方法,但其信号强度恢复曲线较慢,需要...

    3D-Mapping-在CPU上实现的实时Volumetric-3D-Mapping-附项目源码-优质项目分享.zip

    在Volumetric-3D映射中,我们关注的是“体积”,即对三维空间内部的每一个点进行处理,构建出一个连续的、有密度的体数据。这种技术通常用于创建逼真的烟雾、火焰、云层等动态效果。 CPU实现的实时3D映射面临的主要...

    advanced-mapping-tool:Dataninja 的另一个高级映射工具

    高级映射工具 Dataninja 的一个非常先进的映射工具,基于 、 和更多库对增强。 安装 正常使用 git clone https://github.com/Dataninja/advanced-mapping-tool.git # or download ...

Global site tag (gtag.js) - Google Analytics