ibatis 是internet”和“abatis”的組合,是一種“半自動化”的ORM實現。
ibatis 它是一種輕量級的框架,據馮文老師說它是最能讓程序員感到情切的因爲他的數據庫實現需要我們來寫數據庫的代
碼。區別於Hibernate。
首先要做的是把下面的代碼寫入log4j配置文件裏面用控制檯打出,以便我們觀察控制檯輸出的語句,也就是他生成的SQL代碼。作
爲初學者我有必要看下:
log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
然後數據庫配置文件db.properties:
driver=net.sourceforge.jtds.jdbc.Driver url=jdbc:jtds:sqlserver://127.0.0.1:1433/users logon_name=sa logon_password=sa
現在我所關注的就是ibatis的一些情況了:
1.SQL Map XML配置文件 :
<properties>元素 ,<setting>元素 ,<typeAlias>元素 ,<sqlMap>元素 我暫時研究這些元素。
<properties>元素:在屬性文件中定義的屬性作爲變量在 SQL Map 配
置文件中的引用。
<setting>元素 :主要是優化性能方面的。
<typeAlias>元素:主要是給較長的類取別名用的。
<sqlMap>元素:主要是讀取問件路徑的。
2.SQL Map XML映射文件
parameterClass 、parameterMap 、resultClass 、resultMap 只作這幾個的用法
GO!GO!
配置一個文件。
<?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>
<!-- 讀取propertise 文件裏面的信息 -->
<properties resource="db.properties" /> <!-- 這是 加載db.properties屬性文件的路徑 -->
<transactionManager type="JDBC" commitRequired="true">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${logon_name}"/>
<property name="JDBC.Password" value="${logon_password}"/>
</dataSource>
</transactionManager>
<!-- 讀取user.xml 文件-->
<sqlMap resource="user.xml"/>
</sqlMapConfig>
然後在寫一個配置文件讓User類的屬性和數據庫的字段相關聯起來:
package com.lovo.lis.model;
public class User {
private int id;
private String name;
private String password;
public User(){
}
public User( String name,String password){
this.name=name;
this.password=password;
}
public User(int id, String name,String password){
this.id=id;
this.name=name;
this.password=password;
}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
配置文件
<?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="u">
<!-- 爲com.lovo.lis.model配置一個別名方便下面引用 -->
<typeAlias alias="user" type="com.lovo.lis.model.User"/>
<!-- 配置一個parameterMap 針對User所有屬性 -->
<parameterMap class="user" id="allUserPM">
<parameter property="id"/>
<parameter property="name"/>
<parameter property="password"/>
</parameterMap>
<!-- 添加一條記錄 使用parameterMap 注意?和parameterMap聲明屬性的個數/順序匹配-->
<insert id="saveUserByParameterMap" parameterMap="allUserPM">
<![CDATA[
insert into t_user(u_id,u_name,u_password) values
(?,?,?)
]]>
</insert>
<!--根據id查詢1條記錄 利用xmlResultSetName查詢1條記錄 通過列別名映射到對象屬性 -->
<select id="getUserById" parameterClass="java.lang.Integer" resultClass="user">
<![CDATA[
select u_id id,u_name name,u_password password
from t_user where u_id=#i#
]]>
</select>
<!-- 針對select * from t_user結果集的映射 -->
<resultMap class="user" id="allUserRM">
<result property="id" column="u_id"/>
<result property="name" column="u_name"/>
<result property="password" column="u_password"/>
</resultMap>
<!-- 查詢所有記錄 -->
<select id="findAllUsers" resultMap="allUserRM">
<![CDATA[
select u_id,u_name,u_password
from t_user
]]>
</select>
<!-- 查詢所有記錄 使用xmlResultSetName 通過列別名映射查詢-->
<select id="findAllUsers2" resultClass="user">
<![CDATA[
select u_id id,u_name name,u_password password
from t_user
]]>
</select>
<!-- 按id修改用戶名和密碼 使用InLine Parameter -->
<update id="updateUser" parameterClass="user">
<![CDATA[
update t_user set u_name=#name#,u_password=#password#
where u_id=#id#
]]>
</update>
<!-- 按id刪除記錄 -->
<delete id="deleteUserById" parameterClass="java.lang.Integer">
<![CDATA[
delete from t_user
where u_id=#i#
]]>
</delete>
<!-- 按用戶名和密碼查詢 使用Map類型輸入參數
注意##之間的字符和Map中的鍵匹配-->
<select id="findByNamePassword" parameterClass="java.util.Map"
resultClass="user">
<![CDATA[
select u_id id,u_name name,u_password password
from t_user where u_name=#mName# and u_password=#mPassword#
]]>
</select>
</sqlMap>