我一直比较喜欢
Appfuse这个框架,主要是因为这个框架比较规范。在这个框架下做事,可以养成比较好的工程习惯,比如包组织,命名,工程管理等。
最近使用的版本是1.9.2,使用了
WebWork+Spring+iBatis 这样的组合。在使用过程中,发现了不少问题,把解决的过程记录下来,可以有个参考。
1、dbunit 测试oracle
在dbunit任务中增加 scheme="abc" , abc 是表空间的名字。
2、ibatis 执行报错:sql执行语句为空。
.xml 文件中配置的sql语句最后有";",mysql对逗号不敏感,但oracle下面会出错
3、ibatis 中增加一条记录,其中id为自动增长
增加一段selectKey 在insert段配置中,注意Oracle数据库中这段必须写在sql语句前面。 同时sql语句中要包括id字段。
<insert id="addRole" parameterClass="role">
<selectKey resultClass="java.lang.Long" keyProperty="id">
SELECT SEQ_ROLE_TABLE.nextVal as ID FROM dual
</selectKey>
<![CDATA[
insert into role_table (id, name, description)
values (#id#, #name#, #description#)
]]>
</insert>
SEQ_ROLE_TABLE 是一个Oralce 的序列对象。最好针对每一个表建立一个。
4、中文问题
displaytag导出pdf中文问题。这个问题无法简单解决,只能下载displaytag的源代码,在 org.displaytag.export.PdfView.java中的initTable()方法中, 去掉原来的取字体语句
smallFont = FontFactory.getFont(FontFactory.HELVETICA, 7, Font.NORMAL, new Color(0, 0, 0));
增加新的取中文普通宋体字体的语句
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);
当然了,还要增加一个包括字体的包:iTextAsian.jar。
5、对象初始化的问题
凡是需要通过ibatis创建的对象,必须有一个无参数,public的构建函数。如果没有任何显式定义的
构建函数也可以,因为默认就是无参数public的。如果没有这个函数,iBatis在创建对象时,创建过程会出错。
6、单元测试的问题
DAO层单元测试中,如果我们向数据库中插入数据,单元测试表示成功,但数据并没有真正在数据库中!怎么回事?原来Appfuse在框架中配置DAO的单元测试都没有真正提交,而是在方法访问成功后回滚了。