| 一.iBatis基础配置
1.1. 下载iBatis驱动组件 下载压缩文件包:iBATIS_DBL-2.1.7.597.zip 需用的:ibatis-common-2.jar ibatis-dao-2.jar ibatis-sqlmap-2.jar
1.2. SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<sqlMapConfig> <settings cacheModelsEnabled="true“ enhancementEnabled="true“ lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="org.gjt.mm.mysql.Driver"/> <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/ibatissample"/> <property name="JDBC.Username" value="root"/> <property name="JDBC.Password" value="chenyan"/> <property name="Pool.MaximumActiveConnections" value="10"/> <property name="Pool.MaximumIdleConnections" value="5"/> <property name="Pool.MaximumCheckoutTime" value="120000"/> <property name="Pool.TimeToWait" value="500"/> <property name="Pool.PingQuery" value="select 1 from t_user"/> <property name="Pool.PingEnabled" value="false"/> <property name="Pool.PingConnectionsOlderThan" value="1"/> <property name="Pool.PingConnectionsNotUsedFor" value="1"/> </dataSource> </transactionManager> <sqlMap resource="hs/com/ibatis/User.xml"/> </sqlMapConfig>
注意点:1. maxRequests >= maxSessions > maxTransactions 2. useStatementNamespaces节点:对应于映射文件中的namespace属性,当此节点为true的时候,Statement调用需要追加命名空间。当此节点为false的时候,则需保证所有的映射文件中,Statement定义无重名。
1.3. POJO文件
package hs.com.ibatis.POJO; import java.io.Serializable; public class User implements Serializable { private Integer id; private String name; private Integer sex; /** default constructor */ public User() {} public Integer getId() { return this.id;} public void setId(Integer id) { this.id = id;} public String getName() { return this.name;} public void setName(String name) { this.name = name;} public Integer getSex() { return this.sex;} public void setSex(Integer sex) { this.sex = sex;} }
1.4. 映射文件
<?xml version="1.0" encoding="UTF-8"?>
<sqlMap namespace="User"> <typeAlias alias="user" type="hs.com.ibatis.POJO.User"/> <select id="getUser“ parameterClass="java.lang.String“ resultClass="user"> <![CDATA[ Select name, sex from t_user where name = #name# ]]> </select> <update id="updateUser“ parameterClass="user"> <![CDATA[ UPDATE t_user SET name=#name#, sex=#sex# WHERE id = #id# ]]> </update> <insert id="insertUser“ parameterClass="user"> INSERT INTO t_user ( name, sex) VALUES ( #name#, #sex#) </insert> <delete id="deleteUser“ parameterClass="java.lang.String"> delete from t_user where id = #value# </delete> </sqlMap>
二.iBatis基础组件与操作
1. XmlSqlMapClientBuilder 2.0版本后引入,以替代XmlSqlMapBuilder。作用是根据配置文件创建SqlMapClient实例。2.7版本中好像找不到了!
2. SqlMapClient 提供数据操作的基础平台,线程安全 String resource ="hs/com/ibatis/SqlMapConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); //XmlSqlMapClientBuilder xmlBuilder = new XmlSqlMapClientBuilder(); SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
SqlMapClient基本操作: 数据写入(Insert,Update,Delete) 数据查询 在指定对象中存放查询结果 执行批量查询 查询指定范围内的数据 结合RowHandler查询 分页查询 基于Map的批量查询
数据写入(Insert):
sqlMap.startTransaction(); Product product = new Product(); product.setId (1); product.setDescription (“Arom_chen”); int rows = sqlMap.insert (“insertProduct”, product); sqlMap.commitTransaction();
数据查询:
sqlMap.startTransaction(); Integer key = new Integer (1); Product product = (Product)sqlMap.queryForObject (“getProduct”, key); sqlMap.commitTransaction();
其他的操作也是基本上根据上面两种操作变化而来!
三.iBatis高级特性
3.1. 数据关联 3.2. 延迟加载 3.3. 动态映射
<select id="getUsers" parameterClass="user" resultMap="get-user-result"> Select id, name, sex from t_user <dynamic prepend="WHERE"> <isNotEmpty prepend="AND" property="name"> (name like #name#) </isNotEmpty> <isNotEmpty prepend="AND" property="address"> (address like #address#) </isNotEmpty> </dynamic> </select>
注意:在第一个条件成立的时候不会加AND前缀。
3.4. 事务管理
附(mysql表):CREATE TABLE t_address (id int(10) not null,
country varchar(100) not null,
city varchar(100),
town varchar(100),
number int(10),
PRIMARY KEY(id))
TYPE=myisam;
CREATE TABLE t_user (id int(10) not null,
name varchar(100) not null,
sex int(10),
PRIMARY KEY(id))
TYPE=myisam;
|