我相信有很多人像我一样不喜欢用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);
}
}
分享到:
相关推荐
CXF 提供了一个简单的命令行工具或通过代码来生成WSDL文件。WSDL(Web Services Description Language)是描述Web服务的XML格式,客户端可以使用它来生成相应的调用代码。 例如,你可以通过CXF的WSDL2Java工具将已...
【标题】:“CXF开发Web服务端” 在Java世界中,Apache CXF是一个流行的开源框架,用于构建和部署Web服务。...在实践中,理解源码、合理利用工具以及编写测试代码是提升开发效率和保证服务质量的关键。
Querydsl是一个类型安全的查询语言,它可以与JPA、JDO、Hibernate等持久层技术配合使用,通过代码生成工具,将查询表达式转换为对应的SQL语句。Specification接口则是Spring Data JPA自带的一种动态查询方式,开发者...
- **`Counter([iterable-or-mapping[, ...])`**:创建一个计数器,记录每个元素出现的次数。 **示例代码**: ```python from collections import Counter # 创建一个 Counter 对象 c = Counter() # 访问不存在的...
ibatis,作为一款“半自动化”的对象关系映射(Object-Relational Mapping,简称ORM)工具,以其独特的设计理念在众多ORM框架中独树一帜。相较于Hibernate和Apache OJB这类提供全面封装的ORM解决方案,ibatis更倾向...
在Django中,数据库查询是通过ORM(Object-Relational Mapping)来实现的,它提供了一种用Python代码操作数据库的方式,使得开发者无需直接编写SQL语句。本文将深入讲解Django中利用Q对象和F对象进行复杂查询的实现...