该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-16
最后修改:2009-04-16
我先说明 我不是在重复制造轮子,我只是想把事情做得更加简单些,先说说我为什么要作这个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); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-16
很好很强大,2.0版中竟然还会出现 MingyaTemplaet这样的类名。
看到这里终于明白为什么 yuan 同学要批判“山寨”框架的三宗罪了,LZ写这个框架之前真的理解了Hibernate的精髓了吗,突然想起很多面试官喜欢问的一个问题:Hibernate和iBatis最大的区别是什么? |
|
返回顶楼 | |
发表时间:2009-04-16
最后修改:2009-04-16
这个东西前几天不是刚被拖到海版曝光过么? 又来?? 果然有性格...
|
|
返回顶楼 | |
发表时间:2009-04-16
随处可见这样的异常处理:
try { //do something } catch (Exception e) { throw new Exception(); } 倒是可以做个反面教材~~ |
|
返回顶楼 | |
发表时间:2009-04-16
我不知道hibernate和ibatas有啥区别 知道区别有啥用阿 我问你 你做项目 能用到区别阿
|
|
返回顶楼 | |
发表时间:2009-04-16
不是说封号了
怎么又放出来了 |
|
返回顶楼 | |
发表时间:2009-04-16
fcoffee 写道 这个东西前几天不是刚被拖到海版曝光过么? 又来?? 果然有性格...
大哥,那个是管理员的问题,我同事也用了我的mapping他顶我,所以被管理员封了,他并不是托,你可以用下不好就给我意见,反正我坚持到底。。。 |
|
返回顶楼 | |
发表时间:2009-04-16
erbin 写道 我不知道hibernate和ibatas有啥区别 知道区别有啥用阿 我问你 你做项目 能用到区别阿
我不知道有啥区别,直到有啥用阿,项目里能用上阿,想知道 上google阿 hibernate 与 ibatis 的区别, hibernate 与 ibatis 都是目前最流行的 O/R mapping 框架 hibernate 它出身于 sf.net 现在已经是 JBoss 的一部分了 ibatis 它属于 apache 下的一个子项目 hibernate 它是全封闭式的,对数据库的操作提供了完整封装,所有的SQL都是自动生成和执行,开发人员不需要再关注底层的建设,甚至不需要开发人员对SQL的熟练掌握,所有操作都是java对象,而更注重业务逻辑,开发人员只需定义好POJO与数据库的映射(*.hbm.xml),在对数据操作时只需调用hibernate 提供的方法完成数据层的操作,hibernate/OJB 会根据制定的存储逻辑,自动生成相应的SQL并调用JDBC接口完成执行 ibatis 它是半封闭式的,何为半封闭式,这相对hibernate 对比,ibatis的着力点则在于POJO与SQL之间的映射关系,所有的SQL都需要开发人员在映射文件编写,通过这个映射文件的配置,将SQL所需要的参数传入进去和返回的结果字段映射到指定的POJO,而且ibatis最好的一个亮点在于可以操作存储过程。 二者的对比: 1. iBATIS非常简单易学,Hibernate相对较复杂,门槛较高。 2. 二者都是比较优秀的开源产品 3. 当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合 4. 系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。 5. iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。 6. 以数据库字段一一对应映射得到的PO和Hibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。 7. Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS 8. 最关键的一句话是iBATIS的作者说的: If you are starting a new project and you're in full control of your object model and database design, Hibernate is a good choice of O/R tool. If you are accessing any 3rd party databases (e.g. vendor supplied), or you're working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That's were an SQL Mapper comes in handy. |
|
返回顶楼 | |
发表时间:2009-04-16
insiku 写道 不是说封号了
怎么又放出来了 他封我了,我又注册一个号,我又没有什么恶意,无所谓了封就封把 我坚持到底 身正不怕影子斜, 我就做了这个工具,你们要是真是高手的话就告诉我 我写的那里还有改进的地方,帮助我一下。 |
|
返回顶楼 | |
发表时间:2009-04-16
大哥们,高手们,你们别天天老是吹。。。。
有能耐就给点有实际意义的建议,我不行,我不才,至少我做了,javaeye封我号怎么了,我继续,我坚持,做人就要做事就要尽心尽力才对 |
|
返回顶楼 | |