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

hummer_2.1(悍马)版java开发框架有or/mapping和事务处理

阅读更多
大家好,好久没有在javaeye上发贴了,我又回来了,回来的感觉真好O(∩_∩)O~,其实我就是消失了好几个月的不差托的作者,经过大家对我原来的mymapping的批评后我又潜心研究,总于发了这一版hummer2.1之所以取名为悍马,是因为本人比较喜欢悍马的车,牛逼什么路都能开,所以我也希望我写的这个框架使用自由,没有什么限制,多了不说了都是废话,下面我说说我的改进。
1:我参考了ibatis的源码把它里面的engine部分抄袭过来感觉真TM好用。
2:还是用我原来写mapping的思想,core没有太大的变化但是比以前更加简洁了。
3:配置文件比以前更加简单,一对一 多对多更加让人容易理解。
4:增加了自由sql功能,可以任意写sql,用起来更加方便。
5:增加了事务处理功能,不知道这样写对不对,我感觉有点问题,所以请大牛们浪费点你们宝贵的时间帮我看看我写的事务处理那块对不对。
6:这次我是怀着一颗感恩的心来的,感谢那些曾在我迷茫之中贬低我的人,您们才是真正的活菩萨,逆境菩萨谢谢你们,还有曾经帮助过我的人,谢谢你们。

具体配置文件请看里面的readme文件。
db目录是sql创建表的语句。

==============================================================
上回没有说出我的思想这回我详细的说下吧,
其实ormapping主要用到的就是java的反射机制,还有动态创建对象的机制,我是以配置文件的字段中property为基准的,来影射数据库中的表的字段,所以没有在配置文件中写明字段类型。
大家再看看relation包下的Onetoone,onetomany,manytomany,selecttowhere这几个类,顾名思义就是对象的关联关系,里面有个exec这个方法,委托到Select类进行执行sql查询语句。Select select,Property p这2个参数第一个一会会提到,第二个是属性这个关联关系对应的对象的属性信息。
再看下Select这个类,这个类主要是用来执行sql语句的,看下这个方法:
public Object Action(PreparedStatement ps) throws Exception {
		try
		{
			this.ps = ps;
			this.rs = this.ps.executeQuery();
			if(rs.next())
			{
				for(int i=0;i<all.size();i++){
					Property p = (Property)all.get(i);
					java.lang.Class t =p.getType();
					Object value = null;
					if(p.getRelation()!=null)
					{
						Relation r = p.getRelation();
						r.exec(this,p);
					}
					else
					{
						TypeHandler hander = this.typeFactory.getTypeHandler(t);
						value = hander.getResult(rs, p.getColumn());
						String fangfa = "set" + p.getProperty().substring(0, 1).toUpperCase() + p.getProperty().substring(1); 
						Method setMonth = myself.getClass().getMethod(fangfa,new Class[]{p.getType()});
						setMonth.invoke(myself, new Object[]{value}); 
					}
					
				}
			    return myself;
			}else return null;
		}
		catch(Exception e)
		{
			int f= 3;
			log.error("select Object failed", e);
			throw new Exception();
		}
	}



我想大家应该明白了吧,循环所有需要映射的属性,然后根据每个属性的类型,取得TypeHandler 每个类型都有对性的handler,里面有相应的set,get方法大家可以看下,这个不是我写的是ibatis的,我把它拿来用还真是好用啊,O(∩_∩)O~。
Relation r = p.getRelation();这个是如果这个属性有对应关系的话就调用r.exec(this,p);就是刚才的Onetoone,onetomany,manytomany,selecttowhere类中的一个,基本的核心就是这么多,如果大家有什么意见或者更好的建议的话要给我哦。

事务处理:这块我还是没有太明白,机制就是用的java的动态代理机制,jta事务到底能不能这么用我还没有测试过,只知道jdbc的没有问题我用了一个TransactionManager来管理事务setTransaction这个方法是设置事务用的如是 是jdbc就实例化JdbcTransaction如果是jta就实例化JtaTransaction,在这2个事务类里有个init这个方法是用于保存数据源的
jdbc的我用的是BasicDataSource,jta我用的是javax.sql.DataSource,把数据源缓存到DataBase类里,然后在begin的时候
public void beginTransaction()throws SQLException, TransactionException {
		
		    if (connection == null) {
		    	connection = DataBase.getConnection();
		    }
		   
		    // AutoCommit
		    if (connection.getAutoCommit()) {
		      connection.setAutoCommit(false);
		    }
	  }

在取出来 这样不知道可以不,请指点下。
这个就是我写的事务处理的代理类:
public class ServiceProxy implements MethodInterceptor{
	 private static final Log log = LogFactory.getLog(ServiceProxy.class);
     private Object service=null;
     private Enhancer enhancer=new Enhancer();


	//返回DAO的子类
     public Object getService(Class clz) throws  TransactionException
     {
         enhancer.setSuperclass(clz);
         enhancer.setCallback(this);
         service = enhancer.create();
         return service;
     }      

	public Object intercept(Object obj, Method method, Object[] args,MethodProxy proxy) throws Throwable,TransactionException {
		log.info("调用日志方法"+method.getName());
		try {
		TransactionManager.begin();
		Object result = proxy.invokeSuper(obj, args);
		TransactionManager.commit();
		return result;
		}catch (Exception e) {
			TransactionManager.rollback();
			throw new TransactionException(method.getName()+"has error transaction rollback");
		} finally{   
            try {   
            	TransactionManager.end();
            } catch (Exception e) {   
                log.error(e.getMessage());   
                throw new Throwable("关闭conn时出错!");   
            }   
        }   

	}

}

用的是cglib这个包,不知道这么写事务可不可以,这里是我最头疼的地方,指点下吧。
ServiceProxy proxy = new ServiceProxy();
MyTest my = (MyTest)proxy.getService(MyTest.class);
    my.testReflect();
最后这么使用就可以了。。。。
以前太过轻狂,望大家见谅,希望大家牺牲下宝贵时间点评下,为我国山寨事业献上一份力量。
谢谢。
分享到:
评论
11 楼 santafeng 2009-12-23  
做了几年系统,很久没有上网回帖子,对于lz的热诚是支持,做项目无非就是增删查改另外加个分页,至于数据库设计要按照范式做,然后优化加入冗余设计,表分区,索引,数据库缓存等,另外就是外层网络机器的规划了。
以前很少使用spring,hibernate
近期需要用上或许需要在原框架基础上修改支持spring
我们的框架是自己使用方便适合快速构建工程开发的元数据表对象映射内置分页,支持目前行业多种数据库
或许对与lz的开发框架有所参考。
http://sourceforge.net/projects/speedframework/
10 楼 erbin 2009-08-04  
198642yaya 写道
erbin 写道
谢谢大家 可是有没有人发现什么问题呢,比如事务处理那个模块应该怎么写呢?

lz可以试着做一个事务引擎,用一个事务列表,里面存放者事务回滚的方法和模拟时钟,当当前的程序抛出异常的时候就找最近的一个时钟然后回滚,不知道这样是否可行。


事务引擎?这个到没有接触过,可以试下,不过要是多数据库连接怎么办呢?如果在一个业务逻辑里存在多个数据库连接,那我怎么回滚啊 ?
9 楼 198642yaya 2009-08-03  
erbin 写道
谢谢大家 可是有没有人发现什么问题呢,比如事务处理那个模块应该怎么写呢?

lz可以试着做一个事务引擎,用一个事务列表,里面存放者事务回滚的方法和模拟时钟,当当前的程序抛出异常的时候就找最近的一个时钟然后回滚,不知道这样是否可行。
8 楼 pansonphy 2009-07-28  
楼主继续加油 我下载下来先研究研究 能否留个联系方式 方便以后讨论哈
7 楼 erbin 2009-07-28  
kimmking 写道
erbin 写道
谢谢大家 可是有没有人发现什么问题呢,比如事务处理那个模块应该怎么写呢?

日,考虑过几天把我的orm框架也发出来。


发出来吧 共享一下 我也参考下你的orm 这样才有进步么 O(∩_∩)O~
6 楼 kimmking 2009-07-28  
erbin 写道
谢谢大家 可是有没有人发现什么问题呢,比如事务处理那个模块应该怎么写呢?

日,考虑过几天把我的orm框架也发出来。
5 楼 erbin 2009-07-28  
谢谢大家 可是有没有人发现什么问题呢,比如事务处理那个模块应该怎么写呢?
4 楼 doyc 2009-07-27  
正在看,看的出来LZ很用心。希望LZ再接再厉。
3 楼 torycatkin 2009-07-27  
下载看了看,还不错,用起来比H简单了。
2 楼 198642yaya 2009-07-24  
恩 下来看了下 简单配置了下能跑起来 总体来说 还算可以 在山寨界还算过得去,我也一直在找框架呢 我们公司用不了高版本的jdk 所以楼主写的框架 很实用,很适合我们公司的开发 我打算收藏了 呵呵 希望楼主再接再厉,更上一层楼。。。
1 楼 8210 2009-07-14  
不知道是不是IBATIS的优化?

相关推荐

    Hummer 是一套高性能高可用的跨端开发框架,一套代码可以同时支持开发 Android 和 iOS 应用

    Hummer 是一套高性能高可用的跨端开发框架,一套代码可以同时支持开发 Android 和 iOS 应用。现已经支持 Vue/React/TypeScript/JavaScript 四种语法,面向大前端开发人员,总有一款适合你。

    java8源码-hummer-android:悍马-android

    java8 源码 Hummer 1. 环境搭建 1.1. 准备所需工具 JDK NDK Android SDK Android Studio 搭建开发环境 上述工具无需我们一一下载,Google已将所需工具集成好了,可到安卓官网下载,,需要科学上网。下载下来Android ...

    悍马hummer纸模型

    田宫纸模中悍马M242模型,可打印自己制作。建议用A3的纸哦,彩打效果很好!

    hummer-standard-benchmarks

    此项目是一个用于测试各家跨端开发框架 App 各项 benchmark 数据指标的一个示例工程集合,包括了基于五种不同的跨端开发框架开发的示例 APP 工程项目(Native、Hummer、Tenon、ReactNative 和 Flutter),每个项目都...

    一套移动端高性能高可用的动态化跨端开发框架

    Hummer 是一套高性能高可用的跨端开发框架,一套代码可以同时支持开发 Android 和 iOS 应用。现已经支持 Vue/React/TypeScript/JavaScript 四种语法,

    悍马

    Hummer是一套高性能,高可用的跨端开发框架,可以同时支持开发Android和iOS应用程序。现已经支持Vue / TypeScript / JavaScript某种语法,面向大型前端开发人员,总有一套适合您。 技术优势 正如Hummer(蜂鸟)的...

    悍马汽车3D模型

    悍马汽车3D模型适用于悍马模型设计。

    HUMMER'S制备法

    用于制造新型导电材料石墨烯的方法,未来能源的革命

    HUMmer-开源

    Historic Urban Modeler(HUMmer)是功能齐全的CAD程序,以前称为HOK,Inc.开发的drawVision。此3D多边形建模器可导出VRML,X3D,X3Dv和COLLADA文件。

    hammer的手势开发

    移动端手势开发,滑动及触屏等效果使用,源代码

    tenon-loader

    切换编译器的包为Tenon Compiler备注:由于Tenon中样式逻辑需要特殊处理,并需要css的样式解析下沉到Tenon Loader中,针对较少的或scss样式处理等,不需要再进行css-loader和style-loader,建议直接使用进行开发。...

    hummer-component-template:组件模板工程

    [组件名称(英文)] [组件名称(中文))] 用途介绍 使用方法 适用平台 pc或者mobile,或者皆可

    F2-gcanvas-wrapper:将 antvf2 适配到 weex 和 GCanvas ,使用 weex 开发网页端的请自行判断 platform

    将 antv/f2 适配到 weex 和 GCanvas ,使用 weex 开发网页端的请自行判断 platform 。 weex 可以在获取到的组件引用 ref 上使用 addEvent api 监听事件,而 f2 传过来的 source 是经过 GCanvas 和 f2 加工过的 ...

    Improvement Field Emission of Carbon Nanotube/Polyurethane Foam Composites by Cellular Wall Field Enhancement Structure

    泡孔结构对碳纳米管/聚合物泡沫场发射的增强,陈涛,曾葆青,文中采用改进的Hummer氧化法制备了氧化石墨烯。分离提纯后进一步采用微孔滤膜过滤可以得柔性的石墨烯膜。利用加热还原的方法可以的

    COM组件间调用的性能问题

    多线程编程是大家都比较头疼的问题,不小心就会碰到死锁,野指针,同步调用问题等等,虽然在客户端编程方面会带来不少好的体验,比如界面和处理在不同的线程,则不会卡住界面,但是相对于他的副作用来说,让不少人...

    石墨烯的制备方法及其应用领域的研究进展

    分析了其主要制备方法的产品质量、尺寸、量产规模和优缺点,包括微机械剥离法、氧化石墨还原法、晶膜生长取向附生法、碳化硅(Si C)表面外延生长法、赫默法(Hummer法)、化学气相沉积法(CVD)和切割碳纳米管法等,...

    氧化石墨烯/磷钼酸复合物的制备及其液晶性研究 (2012年)

    由Hummer’s方法制备的氧化石墨烯负载磷钼酸,制备了氧化石墨烯/磷钼酸复合物,其水溶液展现出较好的溶致液晶性.透射电镜分析表明,纯氧化石墨烯呈现出透明的褶皱薄纱状形貌,氧化石墨烯/磷钼酸复合物中磷钼酸微粒均匀...

    Founders at work

    Founders at Work: 大型软件信息公司的创业者访谈。 I N T E R V I E W S W I T H T H E F O U N D E R S O F Adobe Aliant Computer Apple Hotmail HotorNot Hummer Winblad Lycos。。。。。

    Openstack Cloud Platform for the Hosting Industry

    "OpenStack has won the race to become the standard, and it has done it rapidly."来自Hummer Winblad Ventures的Ann Winblad对OpenStack的评价。来看看工业界的企业对OpenStack的评价:eNovance、Cloudwatt、...

Global site tag (gtag.js) - Google Analytics