其实Ibatis的文档里面已经讲得很详细,所以这里指总结一些简单的入门问题:
配置文件
sql-map-config.xml
<!DOCTYPE sqlMapConfig PUBLIC
"-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="properties/database.properties"/>
<settings cacheModelsEnabled="true" enhancementEnabled="false"
maxSessions="64" maxTransactions="8" maxRequests="128" useStatementNamespaces="true"/>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property value="${driver}" name="JDBC.Driver"/>
<property value="${url}" name="JDBC.ConnectionURL"/>
<property value="${username}" name="JDBC.Username"/>
<property value="${password}" name="JDBC.Password"/>
<property value="15" name="Pool.MaximumActiveConnections"/>
<property value="15" name="Pool.MaximumIdleConnections"/>
<property value="1000" name="Pool.MaximumWait"/>
</dataSource>
</transactionManager>
<sqlMap resource="com/xxx/sql/Accout.xml"/>
</sqlMapConfig>
database.properties
####################################
# Database Connectivity Properties
####################################
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=
Accout.xml (sqlmap)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//En" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="NS_Account">
<typeAlias alias="Account" type="com.ibatis.domain.Accout"/>
<resultMap id="AccountResult" class="Account">
<result property="accountId" column="Account_ID"/>
<result property="name" column="Name"/>
<result property="password" column="Password"/>
<result property="type" column="Type"/>
</resultMap>
<insert id="insert" parameterClass="Account">
<![CDATA[
insert into T_Admin_Account(
Name, Password, Type, Account_ID
) values (
#name#, #password#, #type#, #accountId#
)
]]>
</insert>
<select id="findAll" resultMap="AccountResult" parameterClass="Account">
<![CDATA[
select * from T_Admin_Account
order by Account_ID
]]>
</select>
<delete id="delete" parameterClass="Account">
<![CDATA[
delete from T_Admin_Account
where Account_ID = #accountId#
]]>
</delete>
<update id="update" parameterClass="Account">
<![CDATA[
update T_Admin_Account
set Name = #name#, Password = #password#, Type = #type#
where Account_ID = #accountId#
]]>
</update>
</sqlMap>
取得sqlmapclient:
private static SqlMapClient sqlmapclient= null;
//
Reader reader = null;
try {
reader = Resources.getResourceAsReader(
"com/ibatis/domain/sql/sql-map-config.xml");
sqlmapclient= SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
e.printStackTrace();
}
在设置好这些东西后,使用类似上面的代码取得sqlmapclient之后就可以使用sqlmapclient进行数据库操作了。
应该注意到因为配置文件中使用了namespace(在<settings中设置了 useStatementNamespaces="true"/>),所以在sqlmapclient进行操作时要记住使用namespace。如:
sqlmapclient.insert("NS_Account.insert",new Acount());
这是为了避免sqlmap配置文件中出现相同名字的方法时产生冲突。
如果使用spring进行代码的组织,那么事情将变得更加简单,你只要在spring的配置文件里面使用
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation">
<value>com/ibatis/domain/sql/sql-map-config.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
对sqlMapClient进行注册,然后注入到相应的dao里面就可以了,spring还提供了简便的SqlMapClientDaoSupport,这也会对你的程序很有帮助。
如果你只是想使用ibatis自己提供的dao框架也可以。为了使用dao框架,还需要另外的配置文件:
dao.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE daoConfig PUBLIC "-//iBATIS.com//DTD DAO Configuration 2.0//EN" "http://www.ibatis.com/dtd/dao-2.dtd">
<daoConfig>
<!-- Example SQL Maps DAO Configuration -->
<context>
<transactionManager type="SQLMAP">
<property name="SqlMapConfigResource"
value="sql-map-config.xml" />
</transactionManager>
<dao interface="com.ln.dao.CategoryDao"
implementation="com.ln.daoImpl.ibatis.CategoryDaoImplSqlMap" />
<dao interface="com.ln.dao.CalDao"
implementation="com.ln.daoImpl.ibatis.CalDaoImplSqlMap" />
</context>
</daoConfig>
而且在你的dao interface中要继承com.ibatis.dao.client.Dao接口(这只是一个标志性借口,没有任何方法)
在程序中就可以使用:
Reader reader = null;
DaoManager daoManager=null;
try {
reader = Resources.getResourceAsReader(
"com/ibatis/domain/sql/dao.xml");
daoManager = DaoManagerBuilder.buildDaoManager(reader);
} catch (Exception e) {
e.printStackTrace();
}
daoManager.getDao(CalDao.class);
这样的程序来取得dao,这也能很好的把dao提供的方法与具体的实现分离开来。
在使用ibatis的dao框架时,最好在dao实现类中继承ibatis提供的SqlMapDaoTemplate ,它是dao框架提供的一个模版类,用来管理dao mapper框架的各个方面,也可以简化你的工作
public classCalDaoImpl extends SqlMapDaoTemplate implementsCalDao{
publicCalDaoImpl (DaoManager daoManager) {
super(daoManager);
}
}
继承之后只用在实现一个带
DaoManager 参数的构造函数就可以了。这个构造函数并不需要手动调用,使用
daoManager.getDao(CalDao.class);来取得dao实例的时候,框架会自动进行调用。之后在你的daoImpl里面就可以直接使用queryForList等sqlmapclient提供的方法了
。
这样ibatis的介绍基本完成。
那为什么要使用Ibatis呢?原因很简单,它很好地屏蔽掉了Connection,statement,resultset等直接使用jdbc是很烦人的地方,又可以直接使用sql语句非常灵活地进行数据库操作(特别是配置文件中的动态sql语句更是足够的灵活),而且还提供了连接池,cache,事务管理等支持。使用起来简单而又强大
posted on 2006-04-12 10:18
OO 阅读(759)
评论(0) 编辑 收藏 所属分类:
框架、工具的使用