ibatis使用起来非常简单,没有hibernate那么复杂,具体原理如下:
1,通过DaoManagerBuilder.buildDaoManager(reader, props);加载sql-map-config.xml文件,在加载sql-map-config.xml文件的时候,会在sql-map-config.xml文件中初始化数据源连接和sql配置文件,样本如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!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"/>
- <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"/>
- </dataSource>
- </transactionManager>
- <sqlMap resource="com/ibatis/jpetstore/persistence/sqlmapdao/sql/Account.xml"/>
- </sqlMapConfig>
其中的Account.xml文件就是sql配置文件,sql配置文件的样本文件如下:
- <?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">
- <typeAlias alias="account" type="com.ibatis.jpetstore.domain.Account"/>
- <select id="getAccountByUsername" resultClass="account" parameterClass="string">
- SELECT
- SIGNON.USERNAME,
- ACCOUNT.EMAIL,
- ACCOUNT.FIRSTNAME,
- ACCOUNT.LASTNAME,
- ACCOUNT.STATUS,
- ACCOUNT.ADDR1 AS address1,
- ACCOUNT.ADDR2 AS address2,
- ACCOUNT.CITY,
- ACCOUNT.STATE,
- ACCOUNT.ZIP,
- ACCOUNT.COUNTRY,
- ACCOUNT.PHONE,
- PROFILE.LANGPREF AS languagePreference,
- PROFILE.FAVCATEGORY AS favouriteCategoryId,
- PROFILE.MYLISTOPT AS listOption,
- PROFILE.BANNEROPT AS bannerOption,
- BANNERDATA.BANNERNAME
- FROM ACCOUNT, PROFILE, SIGNON, BANNERDATA
- WHERE ACCOUNT.USERID = #username#
- AND SIGNON.USERNAME = ACCOUNT.USERID
- AND PROFILE.USERID = ACCOUNT.USERID
- AND PROFILE.FAVCATEGORY = BANNERDATA.FAVCATEGORY
- </select>
- </sqlMap>
sql-map-config.xml和sql语句配置文件配置好之后,就可以进行dao操作了
2,dao操作,可以通过继承SqlMapDaoTemplate类,执行sql语句,在执行sql语句的时候,首先获取通过DaoManagerBuilder.buildDaoManager(reader, props);初始化加载的daoManager对象,功过daoManager对象可以得到一个dao类,然后就可以执行这个dao类里面的dao方法了,比如
public BusinessInfo getBusinessInfo(String id) {
// XXX Auto-generated method stub
return (BusinessInfo) queryForObject("getBusinessInfo", id);
}
ibatis在你调用dao方法的时候,根据你传入的sql语句id,到sql语句配置文件中查找相应的sql语句,然后执行这个sql语句,并返回执行结果.