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>