我下载使用了iBATIS,它不是一个ORM,而是一个SQL的封装。我很同意Cliton Begin自己的评价:

if you are starting a new project and you're in full control of your object model and database design, Hibernate is a good choice of O/R tool.

However, if you are accessing any 3rd party databases (e.g. vendor supplied), or you're working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That's were an SQL Mapper comes in handy.

从去年开始我已经在某大型项目中使用ibatis,并对clinton(ibatis的作者)提了若干使用中的意见,比如说分页查询的处理,就是在要求下才增加的,你可以用pagedlist解决此问题。有关ibatis的问题,可以与我一起探讨。

楼上的朋友你好,我想请问你一个问题。就是关于ibatis的效率问题。在我的项目中最开始是我们自己写的DAO来操作数据库,之后我们用ibatis替掉了那些DAO,但发现程序执行起来效率差了很多。 不知道是什么原因引起的。 是和缓存的设置有关吗? 还有ibatis提供了分页机制。请问在你们的项目中使用了它的分页机制了吗? 造成速度慢的原因有可能是它的分页机制造成的吗? 如果你们没有用它的分页的话,你们的分页是如何实现的? 给个好的设计吧

3Q

不知道那位DX在Linux平台上用过iBATIS没?

呵呵,高手们都来了,讨论一下OOSQL(SQL类型化)的问题:

DAO的好处究竟在哪里?我也经常用,最好用的应该是强类型化,跟.net的强类型DataSet一样.Coding代码提示,编译期间检查. 代码提示不用说了,提高编程效率.

但是有两个美中不足:
1. 很多查询语句还是需要手工来写,比如Entity和JDO的查询都有自己的语法和限制.iBATIS把它分离到xml里面,其实还是string. string是很容易出错的.
2. 表refactor,还是要check/update这些sql语句.这也是最头痛的问题.

为什么不把SQL也OO呢?SQL也就那些语句,OO起来应该也很简单,这是我的一个设想:

Sql sql = new Sql();
Table1 t1 = new T1();
Table2 t2 = new T2();
t1.setLeftJoin(t1.col1,t2.colA);
sql.setColumns(t1.col1,t2.colB); //表和关系由这里取出
sql.setWhere(Func.Eq(t1.col2,"abc").and(Func.In(t2.colC,new object[]{1,2,3})));
sql.queryModel(Table2.class);

这种OOSQL有几个好处:
1. 几乎没有功能限制.Func只是定义标准实现, 各个数据库可以有自己的扩展Func, 并且覆盖一些非标准语法,比如Func.SysDate
2. 无限数据库支持.每个数据库可以定义自己对SQL的解释
3. 分页机制可以利用数据库自己的特长.比如mysql在解释sql的时候加上limit n,m
4. 对SQL的查询结果由单独模块承担.QueryModel,QueryRowSet,QueryOne,QueryArray,ExecUpdate,execScalar...
5. 非常适合动态构造查询.

OOSQL的效率很可能不高,但是sql一般都是静态的,用singleInstance或者静态变量应该可以对应.

上面where语句的拼写方式还需要检讨,如果Java也支持运算符过载就爽了.不过个人倾向微软的SQL设计器,就是vs.net,access,excel都带的那个用表格来表示查询语句的东西.M$可以把复杂查询抽象成一个简单的表,还是很佩服的,也许OOSQL也可以采用那种方式来简化.

另外,现在对Model的显示,还处于刀耕火种,应该在定义Table类的时候加入Table的描述,字段加入标题,描述,显示长度,校验方式...就象SAP那样齐全,这样利用结果集提供的信息就能自动构造画面/输入绑定检查.无需大量Coding. 这是我的另外一个梦想:全能的数据类型

以上都是个人的胡思乱想,也许已经有实现,如果没有,大家看看怎样,有能力的兄弟给实现一下 :)))

我的系统本来用了poolman做链接,但是看了ibatis的整个方案后,新的系统打算算采用,不知道这部分,ibatis的db layer实现得怎么样?

我的qq:14525554 欢迎大家讨论

http://runnerrunning.meibu.com:8080
我放了jpetstore的演示,我用eclipse重新组织了工程,欢迎大家一起来彻底搞明白jpetstore

sql是面向关系型数据存储模式的一种语言,如果要把它转化为oo的话,还不如直接在sql和xml之间作一层可以相互转化的adapter。
xml可以方便的实现oo的思想,而且当前一些基于xml技术的database开始崭露头角,在某些特定领域开始发挥作用,比如生物工程,电子政务等等。
object---->xml,
+++++++++++++++++
relation------>sql
,如果有一个结构良好的组件把他们连接起来,不是可以解决很多问题吗?

灵活性总是要付出些代价~~, 最近经常有这样的感触~~
与其花时间在封装上,倒还不如把工具做好,实现快速开发,运行效率又不会因些降低~~

用到了jpetstore,但它存到数据库内的汉字都成了乱码,应该怎么解决呢?

用Ibatis,汉字存入数据库为乱吗,请问如何处理?

谢谢!

Bertram

你好,我在做jsptags分页程序,网上看到你的发言,想和你交个朋友,交流一下,我的QQ是332321866请加我,谢谢

改encoding="GB2312"应该可以解决汉字问题