介紹
iBATIS是以SQL爲中心的持久化層框架。能支持懶加載、關聯查詢、繼承等特性。
iBATIS不同於一般的OR映射框架(eg:hibernate)。OR映射框架,將數據庫表、字段等映射到類、屬性,那是一種元數據(meta-data)映射。iBATIS則是將SQL查詢的參數和結果集映射到類。因此可以說,iBATIS做的是SQL Mapping的工作。它把SQL語句看成輸入以及輸出,結果集就是輸出,而where後面的條件參數則是輸入。iBATIS能將輸入的普通POJO對象、Map、XML等映射到SQL的條件參數上,同時也可以將查詢結果映射到普通POJO對象(集合)、Map、XML等上面。
iBATIS使用xml文件來映射這些輸入以及輸出。能大大減少數據庫存儲部分的代碼量,而且可以非常方便的利用SQL中的一些小技巧。
簡單示例
基於ibatis-2.3.0.677版本。
1、 創建新的項目,並引入jar包
a) ibatis-2.3.0.677.jar
b) mysql驅動
2、 在類路徑中(classes下)提供ibatis的配置文件:sqlMapConfig.xml
<?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> <transactionManager type="JDBC" commitRequired="false"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/> <property name="JDBC.ConnectionURL" value="jdbc:mysql://127.0.0.1/ibatis"/> <property name="JDBC.Username" value="root"/> <property name="JDBC.Password" value="mysql"/> </dataSource> </transactionManager> <sqlMap resource="com/ibatis/model/User.xml"/> </sqlMapConfig> |
3、創建實體類:User.java
package com.ibatis.model; publicclass User { privateintid; private String username; private String password;
publicint getId() { returnid; } publicvoid setId(int id) { this.id = id; } public String getPassword() { returnpassword; } publicvoid setPassword(String password) { this.password = password; } public String getUsername() { returnusername; } publicvoid setUsername(String username) { this.username = username; } } |
4、創建針對User對象的CRUD的xml映射配置:User.xml
<?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="User"> <!-- Use type aliases to avoid typing the full classname every time. --> <typeAlias alias="User" type="com.ibatis.model.User"/> <!-- Select with no parameters using the result map for Account class. --> <select id="selectAllUsers" resultClass="User"> select * from t_user </select>
<select id="selectUser" resultClass="User" parameterClass="int"> select * from t_user where id=#id# </select>
<insert id="insertUser" parameterClass="User"> insert into t_user values ( null,#username#,#password# ) </insert>
<update id="updateUser" parameterClass="User"> update t_user set username = #username#,password=#password# where id=#id# </update>
<delete id="deleteUser" parameterClass="int"> delete from t_user where id=#id# </delete> </sqlMap> |
5、創建測試程序測試:
package com.crm.model; import java.io.Reader; import java.util.Iterator; import java.util.List; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; /** *最簡單的形式! *@authorq * */ publicclass UserTest { /** *@paramargs */ publicstaticvoid main(String[] args) throws Exception{ //從配置文件中得到SqlMapClient對象 Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml"); SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader); reader.close();
//創建用戶數據 for(int i=0; i<10; i++){ User user = new User(); user.setUsername("用戶"+i); user.setPassword("密碼"+i); sqlMapper.insert("insertUser", user); }
//查詢用戶數據 List users = sqlMapper.queryForList("selectAllUsers"); for (Iterator iter = users.iterator(); iter.hasNext();) { User user = (User) iter.next(); System.out.println(user.getUsername()); }
//查詢特定用戶的數據 User user = (User)sqlMapper.queryForObject("selectUser", 1); System.out.println("用戶【id="+1+"】的名稱是:"+user.getUsername());
//更新用戶的信息 user = new User(); user.setId(3); user.setUsername("更改之後的用戶名稱"); user.setPassword("密碼被更改"); sqlMapper.update("updateUser", user);
//刪除用戶的信息 sqlMapper.delete("deleteUser", 6); } } |