精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2007-12-07
什么是iBatis:
说干就干,决定依照ibatis for .net的实现方式来实现,通过sql-map的parametermap来实现。以最小代码来实现该功能。 查看了相关dtd后,发现《parameter》节点没有column定义,《parameterMap》节点没有extends定义,《result》和《resultMap》这倒是有。于是修改dtd定义和BasicParameterMapping类,使其支持column。并且修改SqlMapParser类,使其初始化的时候支持column和extends。加入column的目的是为了支持java属性对应到不同的字段上。加入extends的目的是为了重用parametermap。 parameter修改完成后,就要修改dtd文档定义,使其支持《generate》节点,我们只需要《insert》、《update》、《delete》、《select》这四个节点支持就行,《statement》和《sql》节点考虑在下一版支持。generate需要三个属性,分别是table、where、excludes。其中table表示是对应的表,适用于所有;where表示查询条件字段,适用于select、update、delete;excludes表示要排除哪些parameter,适用于select、update。 dtd文档定义修改完成后,就可以修改ibatis加载类,使其支持generate。这个切入点比较难找,因为要仔细分析他的源代码。经过仔细思考后,发现ibatis和sql-map支持《include》,决定在include后面加入generate的解析代码。这样比较方便的找到了切入点。 找到SqlStatementParser类,找到了parseDynamicTags方法,里面就有include的解析。这里面的判断代码是else if,我再加入一个generate的else if 就OK啦。经过一天的修改,完成。工作量也不是太大。 哈哈,下篇日志发布出hack过后的ibatis代码和demo。 原创文章,如果要转载请注明出处、原始地址和作者信息。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-12-12
如果你不想写SQL的话,为什么不直接用Hibernate呢?
|
|
返回顶楼 | |
发表时间:2007-12-14
1、hibernate把sql语句封装在java代码中不喜欢。
2、hibernate对动态sql语句支持不好。 3、何必去浪费时间学习hql?不如去专心研究native sql。 |
|
返回顶楼 | |
发表时间:2007-12-20
强烈同意不把sql写在代码里。
我们的项目四年前就不在写在java代码中了, 一开始是struts项目,现在做的项目公司让选Hibernate或者iBatis 我选择i,抛弃H。 Hibernate最大的缺点是过犹不及。事事讲究封装、对象化,在C++中性能上可能不明显,在JAVA中,特别是大项目中,这种分配内存生成对象很耗时的平台中,将是非常明显的。 Hibernate不错,是因为在小项目中。 如果在大项目中(几百人月以上的)千万不要因为少写几行代码而图方便使用H,否则,一旦出现性能问题,想哭都找不到地方。 |
|
返回顶楼 | |
发表时间:2007-12-26
拜服~何必多次一举呢~用hibernate的效率要远高过这个
|
|
返回顶楼 | |
发表时间:2007-12-28
使用ibatis可能要比hibernate要灵活一些吧.呵呵…………个人感觉,不代表群众意见。
|
|
返回顶楼 | |
发表时间:2007-12-28
[quote="JBeans"]拜服~何必多次一举呢~用hibernate的效率要远高过这个[/quote] 1、我喜欢procedure, sqlmap.xml 代码
|
|
返回顶楼 | |
发表时间:2007-12-28
[quote="lonely_521"] :lol: 使用ibatis可能要比hibernate要灵活一些吧.呵呵…………个人感觉,不代表群众意见。[/quote]
我同意! |
|
返回顶楼 | |
发表时间:2007-12-29
不是有Abator 吗? 可以自动生成所有的单表的select、update、delete SQL 和DAO 代码
http://ibatis.apache.org/tools/abator |
|
返回顶楼 | |
浏览 7616 次