用了很久hibernate ,突然想换个别的orm 工具,当然在orm领域中,hibernate是老大。看了一下ibatis,发现如果对于crud操作不是很多的系统来说,是个不错的选择,尤其是适合那些对sql和性能热衷的开发者。综合来说ibatis不能算orm工具,只能算个半成品。不过比起直接用jdbc写,那还是方便多了。主要的好处是分离了sql和代码,如果你想追求性能,那么sql是你很好的利器,当然ibatis的缓存也不错。比起hibernate,ibatis就简单多了,估计也就3天能够基本掌握了,这大大减少了学习成本。
说了那么多废话,下面开始正题,通过一个简单的实例开始ibatis之旅,文章大部分参考网上的ibatis 开发指南一文。
主要的jar:ibatis 2.3.0,spring 2.0.1,log4j 1.2.9,commons-logging 1.0.4,hsqldb 1.8.0
ibatis实例配置: <sqlMapConfig>
<!-- 事务采用spring 管理 -->
<!--
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="org.hsqldb.jdbcDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:hsqldb:hsql://localhost/xdb"/>
<property name="JDBC.Username" value="sa"/>
<property name="JDBC.Password" value=""/>
</dataSource>
</transactionManager>
-->
<sqlMap resource="org/esoft/bo/xml/Account.xml"/>
</sqlMapConfig>
创建POJO对象: package com.esoft.bo;
public class Account {
private String emailAddress;
private String firstName;
private int id;
private String lastName;
public String getEmailAddress() {
return emailAddress;
}
public String getFirstName() {
return firstName;
}
public int getId() {
return id;
}
public String getLastName() {
return lastName;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setId(int id) {
this.id = id;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
映射文件,感觉比较的麻烦。以后有机会的话一定自动生成此文件,尤其现在jpa当道。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Account">
<!-- Use type aliases to avoid typing the full classname every time. -->
<typeAlias alias="Account" type="com.esoft.bo.Account"/>
<!-- Result maps describe the mapping between the columns returned
from a query, and the class properties. A result map isn't
necessary if the columns (or aliases) match to the properties
exactly. -->
<resultMap id="AccountResult" class="Account">
<result property="id" column="ACC_ID"/>
<result property="firstName" column="ACC_FIRST_NAME"/>
<result property="lastName" column="ACC_LAST_NAME"/>
<result property="emailAddress" column="ACC_EMAIL"/>
</resultMap>
<!-- Select with no parameters using the result map for Account class. -->
<select id="selectAllAccounts" resultMap="AccountResult">
select * from ACCOUNT
</select>
<select id="selectByName" resultMap="AccountResult" parameterClass="String">
select * from Account where ACC_FIRST_NAME like #name#
</select>
<!-- A simpler select example without the result map. Note the
aliases to match the properties of the target result class. -->
<select id="selectAccountById" parameterClass="int" resultClass="Account">
select ACC_ID as id, ACC_FIRST_NAME as firstName, ACC_LAST_NAME as lastName,
ACC_EMAIL as emailAddress from ACCOUNT where ACC_ID = #id# </select>
<!-- Insert example, using the Account parameter class -->
<insert id="insertAccount" parameterClass="Account"> insert into ACCOUNT ( ACC_ID,
ACC_FIRST_NAME, ACC_LAST_NAME, ACC_EMAIL) values ( #id#, #firstName#,
#lastName#, #emailAddress# ) </insert>
<!-- Update example, using the Account parameter class -->
<update id="updateAccount" parameterClass="Account"> update ACCOUNT set
ACC_FIRST_NAME = #firstName#, ACC_LAST_NAME = #lastName#, ACC_EMAIL =
#emailAddress# where ACC_ID = #id# </update>
<!-- Delete example, using an integer as the parameter class -->
<delete id="deleteAccountById" parameterClass="int"> delete from ACCOUNT where
ACC_ID = #id# </delete>
<delete id="clearAccount"> delete from ACCOUNT </delete>
</sqlMap>
spring 配置: ...
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation">
<value>SqlMapConfig.xml</value>
</property>
</bean>
<bean id="accountDao" class="org.esoft.dao.AccountDaoImpl">
<property name="sqlMapClient" ref="sqlMapClient"/>
</bean>
主要的代码:public class AccountDaoImpl
extends SqlMapClientDaoSupport {
public PK save(Account obj) {
return (PK) getSqlMapClientTemplate().insert("insertAccount", obj);
}
public void update(Accountobj) {
getSqlMapClientTemplate().update("updateAccount", obj);
}
public void delete(Account obj) {
getSqlMapClientTemplate().delete(
"deleteAccountById",
obj.getPk());
}
public Account get(PK primaryKey) {
return (Account) getSqlMapClientTemplate().queryForObject(
"selectAccountById",
primaryKey);
}
}
posted on 2007-01-10 20:27
布衣郎 阅读(2281)
评论(1) 编辑 收藏 所属分类:
orm