ibatis给我们带来了什么

本文对比了JdbcTemplate与ibatis在代码量、性能及灵活性等方面的优劣,并探讨了ibatis适用场景。
http://35java.com/zhibo/forum.php?mod=viewthread&tid=367&extra=page%3D4
自从unclepeng commons 2.0发布以后,笔者一直在寻找合适的ORM框架,以期加以改造作为unclepeng ORM的起源。很久之前曾经深使用过ibatis,后来由于一直都在维护人家的代码故没有深入下去,趁这几天重新研究了下,却发现当时自己觉得很适用的东西,今日已成鸡肋。
笔者曾经使用过spring的JdbcTemplate,后来经过重新实现,直接作为unclepeng commons 2.0的一部分,本文即通过JdbcTemplate与ibatis之间的对比,阐述笔者放弃ibatis的原因。
1、有人说ibatis把sql语句放在配置文件里方便管理。这个我不敢苟同,对我来说,文件越多,头越晕,所以这个“优点”不算是优点。
2、代码量的对比,比如查询所有的用户,用ibatis实现如下
public class User {
private int id;
private String name;
private String pwd;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}

public static List selectAllAccounts () throws SQLException {
return sqlMapper.queryForList("selectAll");
}
对应的xml如下
esultMap id="users" class="User">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="pwd" column="pwd"/>
</resultMap>
<!-- Select with no parameters using the result map for Account class. -->
<select id="selectAll" resultMap="users">
select * from account
</select>
说白了其实是两部分,一部分是sql参数的填充生成statement,另一部分是将查询结果与Object之间的mapping。
用JdbcTemplate
String sql = "select * from account";
return template.queryForRowSetList(sql);
当然这里将所有的查询结果都mapping到RowSet这个类里了,如果要mapping到指定的类,需要这样:
public interface RowMapper{
Object mapRow(ResultSet rs, int rowNum) throws SQLException;
}
其中User类需要实现RowMapper接口,并指定rs到User字段之间的映射,而这与
<resultMap id="users" class="User">
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="pwd" column="pwd"/>
</resultMap>
所做的事情是一样的。
所以!从编码量上来看,ibatis与JdcbTemplate 相比不具备优势。
3、性能上的对比,笔者经过测试,忽略cashe,纯粹的数据库操作下,JdbcTemplate的性能比ibatis快一倍。
4、ibatis具备cache,更强大?笔者认为作为纯粹的数据库持久操作,cache不应混杂其中.另外,这种使用方式很难适应类似换分布式缓存memcache的需求。正解的做法是把数据库操作跟cache独立分开,cache对数据或对象提供接口,这样切换缓存方案时能够更加平滑。
5、上文中的User类存在的意义仅仅是为了将数据库查询中来的数据mapping其中,为了查询一百多个表,你可能不得不写一百个类似的类,而且对于像数据库添加几个字段的需求响应过慢。倒还不如直接用HashMap来封装字段名与字段值来得干脆,这样还具备了动态的功能。
其实笔者还嫌HashMap过于”重量“,直接用两个数组的映射做为RowSet的实现,试想一个表字段总不可能超过1000个,而这种直接用字段名与字段值数组之间建之映射的办法在经过测试之后确实也颇为高效。所以用ibatis灵活性可扩展性都不如JdbcTemplate。
6、对于历史性代码,很多都把数据源或者数据库连接字符串直接写入properties中,又或者历史代码都是对Connection进行操作,又或者历史代码都是更为丑陋的JDBC实现,用JdbcTemplate能够无缝地修改这些代码,对ibatis来说,那是不敢想象的,什么都要实现两套的话,倒不如一套来得好。
既然ibatis不适合笔者,那什么时候适合用ibatis呢?适用于什么人呢?作为半成品的OR/Mapping框架,ibatis把sql抽取出来作为配置,另外还抽取出了Object 与数据库数据之间的mapping配置,让程序员从两个泥沼之中解脱了出来:一、冗长而风格各异的的jdbc查询代码, 二、重复的ResultSet到Object的mapping代码。
相比传统的JDBC确实是一大改进,同时也有利于统一项目组统一持久层的编码风格。如果你对Hibernate等更强大的ORM没有足够的把控能力,又不想写冗长的JDBC,而且你还没有时间实现自己的JdbcTemplate(spring提供的那个还不够好用,需要改造),那么使用ibatis是不二之选。
}
【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模与控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开研究,重点探讨其系统建模与控制策略,结合Matlab代码与Simulink仿真实现。文章详细分析了无人机的动力学模型,特别是引入螺旋桨倾斜机构后带来的全驱动特性,使其在姿态与位置控制上具备更强的机动性与自由度。研究涵盖了非线性系统建模、控制器设计(如PID、MPC、非线性控制等)、仿真验证及动态响应分析,旨在提升无人机在复杂环境下的稳定性和控制精度。同时,文中提供的Matlab/Simulink资源便于读者复现实验并进一步优化控制算法。; 适合人群:具备一定控制理论基础和Matlab/Simulink仿真经验的研究生、科研人员及无人机控制系统开发工程师,尤其适合从事飞行器建模与先进控制算法研究的专业人员。; 使用场景及目标:①用于全驱动四旋翼无人机的动力学建模与仿真平台搭建;②研究先进控制算法(如模型预测控制、非线性控制)在无人机系统中的应用;③支持科研论文复现、课程设计或毕业课题开发,推动无人机高机动控制技术的研究进展。; 阅读建议:建议读者结合文档提供的Matlab代码与Simulink模型,逐步实现建模与控制算法,重点关注坐标系定义、力矩分配逻辑及控制闭环的设计细节,同时可通过修改参数和添加扰动来验证系统的鲁棒性与适应性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值