1.获得Abator http://ibatis.apache.org/abator.html Eclipse可以自动的进行Update获取此Plugin,具体见官方的安装步骤 2.安装好后将在New菜单中看到一个新的文件类型Abator for iBATIS Configuration File,此是Abator的配置文件,配置文件的详细说明见http://ibatis.apache.org/docs/tools/abator/,文件名默认是abatorConfig.xml,根据自己的实际需求进行修改,我这里使用mysql测试,内容是:3.右键单击配置文件,点击Generate iBatis Artifacts,生成文件。 就这样就生成基本的文件的了, 包括:users.java,UsersExample.java,UsersDao.java,UsersDaoImpl.java,users_SqlMap.xml 请注意,这里生成了个UsersExample.java,继承自users.java,我个人觉得是没什么用的,dao里面也包含了很多常用的接口,daoImpl里面的实现完全是按照ibatis来做的,但比较庞大,使用时得删除一些没用的东西SqlMap.xml这个文件也大,没有耐心的看着就头晕,但里面的sql语句写的还是比较标准的,如果自己用且想流程清楚些,得费点功夫改改. 有时间看看Abator这玩意的代码怎么写的,最好改改,适合简单开发就好
对于IBatis应用最烦人的重复工作就是不停的写DAO,DTO,和xml文件里面的sqlmap,其实很多时候这些工作是重复而且无聊的。好在我们还有abator (http://ibatis.apache.org/abator.html ),一个IBatis自动生成工具,他可以帮助你生成大量的DAO,DTO和sqlmap。如果你使用eclipse作为IDE那么事情就很简单了(相信没有几个人不在用):安装Eclipse插件 1. 要求eclipse3.1,jdk1.4以上 2. 在eclipse上安装abator插件 eclipse菜单栏 --> help --> Software Updates --> Find And Install... 在弹出的对话框中选择 “Search for new features to install” 然后点击 “next” 在对话框中点击按钮 New Remort Site... 在弹出的对话框中的URL输入框中填写 http://ibatis.apache.org/tools/abator ,Name输入框就随便写些什么了。 点击Finish,安装插件,然后重新启动eclipse 下面测试一下功能 1. 新建一个java工程 2. 在eclipse菜单栏中兴建一个 abator 配置文件 File --> Abator for iBatis Configration File 好的,我们完成了创建配置文件,下面打abator配置文件,看看里面怎么去配置打开后内容基本上是这样
今天在用ibatis selectKey 生成 oracle sequence 的时候 发现一个问题。其实就是相为SHIPMENT_HISTORY表加入一个主键sequence id shipmentHistoryId,加入一条记录,然后返回这个sequence id xml 代码
使用abator生成的代码,最大的问题就是它的注释问题!一大堆的"abatorgenerate_",为了代码的可读性,只好download下原代码,进行改造!改造的主要目的是:给生成model、dao、daoImpl的文件加上中文的注释,并且给Model文件的属性设置初始化值。目前已经改造完成,可以添加中文注释,abatorConfig.xml中改动了“table”元素,如下:
增加的comment的属性示例:生成的Model文件如下: CorpLogo.java (注:cno字段没有配置) package cn.test; import java.util.Date;
所有的参数都是写在<abatorconfiguration></abatorconfiguration>这个根节点中,下面可以用 <abatorcontext></abatorcontext>来生成个自的iBATIS配置文件、Java Bean和DAO abatorContext的一个属性generatorSet有3个选项Legacy、Java2、Java5 Legacy:如果没有generatorSet属性的话,默认是Legacy。但并不推荐使用Legacy因为它在生成Example类(用于查询条件)的时候有很多限制,他将查询条件写在sqlMap配置文件中,将查询值写在Example中,这样就对修改产生一些困难。 Java2和Java5:他们只支持iBATIS 2.20以上的版本。在以这个模式成生的Example文件中包含了查询条件和查询值。这样修改就方便多了,对于用join的select时的查询就更方 便了,自己可以定义查询条件,自由度高了很多(对于join的and查询可能还得自己修改一下Example代码)。对于or和and的应用Legacy 的限制就比较大了。 <jdbcconnection></jdbcconnection>描述了JDBC的属性和其jar包的位置. <javamodelgenerator></javamodelgenerator>、 <sqlmapgenerator></sqlmapgenerator>、 <daogenerator></daogenerator>描述了个自生成的位置。<daogenerator></daogenerator>中type属性则用来告诉abator生成的DAO是用于iBATIS还是SPRING等容器。
1、什么是iBATIS
1.1作者
Clinton Begin,很牛X的名字
1.2背景故事
Clinton Begin于2001年启动iBATIS项目,最先的焦点是发展密码软件解决方案。第一个iBATIS产品是Secrets,是一个象PGP的个人数据加密器和签名工具。Secrets完全用Java编写并在一个开源许可下发布。
在发布Secrets Java版后不久,iBATIS项目陷入困境转而关注Web和其它internet相关的技术,在接下来的一年中,两个有趣的软件开发完成,包括Axle web 框架,一个JSP可选工具。Lookout邮件客户端差不多完成90%在 being set on the back burner之前,同时更多有趣的挑战接踵而来…
1. 4“iBATIS”是什么意思
现在,单词“ibatis”和SQL Maps 与 DAO 框架同义――就象“xerox”『施乐复印机(商标名称),译者著』和“photocopy” 『影印,译者著』同义。
回想起iBATIS来源于密码系统软件。iBATIS实际上用两个单词的组合来命名:“internet” 和 “abatis”。
Reference.com 如此定义 abatis:
ab-a-tis
n. pl. ab-a-tis (-tz) or ab-a-tis-es (-t-sz)
将伐倒的树木树枝相互交叉,放置,有时削尖,面对敌人一种防御障碍物。
将“Internet”中象征性的“i”和abatis中的“batis”组合所以暗示了抵御Internet的意思。-in the case of iBATIS它是Secrets提供的关于密码防御的东西。
所以iBATIS正确的写法应该是:iBATIS
1.5 iBATIS怎么念?
因为我们发明了这个单词,我们以自己喜欢的读音念它
我们这样读:eye-BAT-iss
但是按照传统,它可能应该被读作:eye-BATE-iss,但就象我们说的,我们创造了它。
ibatis的openSession在上一版本时,每次打开的都是同一session, 因为它原来的代码在每次打开前会去localSqlMapSession中查找,如果没有才会打开个新的,而且会在返回前放入localSqlMapSession中,这被认为是一个BUG,所以在这个版本上改为返回一个新的session.而在这个session关闭时,才会把这个session返回给sessionPool中.
而在spring中,如楼上我的贴子所说,新打开的session没有进入localSqlMapSession,在打开一对多的表的子表时, 于是从sessionPool中得到一个没有被spring设置过setUserConnection的session,从而Transaction trans = getTransaction(session);这里没有得到缺省的事务,那么 trans = autoStartTransaction(session, autoStart, trans);代码里就会去找这个session的txManager来启动一个事务,但txManager又是null,于是就会发出nullpoint异常了.
这时关键就是session的txManager是什么时候设置的. 我们可以看一下spring的SqlMapClientFactoryBean的代码就会发现,只有设置了它的dataSource属性时,才会去设置session的txManager, 所以这里就可以看出在一对多表时,SqlMapClientFactoryBean的dataSource属性一定要设置, 这样能保证在一对多时才不会出问题.