第一步:创建POJO类
- package com.ibatis;
- import java.io.Serializable;
- public class Ibatis implements Serializable{
- private static final long serialVersionUID = 4054639727225043549L;
- private int id;
- private String name;
- private int age;
- public Ibatis() {
- super();
- }
- public Ibatis(int id, String name, int age) {
- super();
- this.id = id;
- this.name = name;
- this.age = age;
- }
- 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 int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String toString(){
- return id + " " + name + " " + age;
- }
- }
第二步:创建上述POJO类的IBatis配置文件
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE sqlMap
- PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
- "http://www.ibatis.com/dtd/sql-map-2.dtd">
- <sqlMap namespace="Ibatis">
- <typeAlias alias="ibatis" type="com.ibatis.Ibatis"/>
- <select id="getIbatis" parameterClass="java.lang.String" resultClass="ibatis">
- select id, name, age from ibatis where name = #name#
- </select>
- <update id="updateIbatis" parameterClass="ibatis">
- UPDATE ibatis SET name=#name#, age=#age# WHERE id = #id#
- </update>
- <insert id="insertIbatis" parameterClass="ibatis">
- INSERT INTO ibatis (id, name,age) VALUES (#id#, #name#, #age#)
- </insert>
- <delete id="deleteIbatis" parameterClass="java.lang.String">
- delete from ibatis where id = #value#
- </delete>
- </sqlMap>
第三步:创建IBatis ORM框架的总配置文件SqlMapConfig.xml
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE sqlMapConfig
- PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
- "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
- <sqlMapConfig>
- <!--
- 1. cacheModelsEnabled 是否启动sqlMapClient上的缓存机制;
- 2. enhancementEnabled是否针对POJO启用字节码增强机制以提升getter/setter的调用效能,
- 避免使用Java Reflect所带来的性能开销,同时也为Lazy Loading带来了极大的性能提升;
- 3. errorTracingEnabled 是否启用错误日志;在开发期间建议设为“true”以方便调试
- 4. lazyLoadingEnabled 是否启动延迟加载机制
- 5. maxRequests 最大并发请求数(Statement并发数)
- 5. maxTransactions 最大并发事务
- 6. maxSessions 最大Session数,即当前最大允许的并发sqlMapClient数(介于maxRequests和maxTransactions之间)
- 7. useStatementNamespaces 是否使用Statement命名空间(为true时,需要追加命名空间)
- -->
- <settings cacheModelsEnabled="true" enhancementEnabled="true"
- lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32"
- maxSessions="10" maxTransactions="5" useStatementNamespaces="false" />
- <!--
- transactionManager 节点定义了ibatis的事务管理器
- 1. JDBC:通过传统JDBC Connection.commit/rollback实现事务支持
- 2. JTA:使用容器提供的JTA服务实现全局事务管理
- 3. EXTERNAL:外部事务管理,如EJB中使用ibatis,通过EJB的部署配置即可实现自动事务管理机制
- 此时ibatis将所有事务委托给外部容器管理
- -->
- <transactionManager type="JDBC">
- <!--
- dataSource从属于transactionManager节点,用于设定ibatis运行期使用的DataSource属性
- type属性: dataSource节点的type属性指定了dataSource的实现类型
- 1. SIMPLE:
- SIMPLE是ibatis内置的dataSource实现,其中实现了一个简单的数据库连接池机制, 对应ibatis 实现类为
- com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory。
- 2. DBCP:
- 基于Apache DBCP连接池组件实现的DataSource 封装,当无容器提供DataSource 服务时,
- 建议使用该选项,对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory。
- 3. JNDI:
- 使用J2EE 容器提供的DataSource 实现,DataSource 将通过指定的JNDI Name 从容器中获取。
- 对应ibatis 实现类为com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory。
- -->
- <dataSource type="SIMPLE">
- <!-- JDBC驱动 -->
- <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver" />
- <!-- 数据库URL -->
- <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@192.168.241.27:1521:orcl" />
- <!-- 数据库用户名 -->
- <property name="JDBC.Username" value="aaa" />
- <!-- 数据库密码 -->
- <property name="JDBC.Password" value="aaa" />
- <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 ACCOUNT" />
- <property name="Pool.PingEnabled" value="false" />
- <property name="Pool.PingConnectionsOlderThan" value="1" />
- <property name="Pool.PingConnectionsNotUsedFor" value="1" />
- </dataSource>
- </transactionManager>
- <!-- 指定映射文件的位置,配置中可出现多个sqlMap节点,以指定项目内所有映射文件 -->
- <sqlMap resource="com/ibatis/Ibatis.xml" />
- </sqlMapConfig>
第四步:创建一个测试类,检验上述配置 + 类文件
- package com.ibatis;
- import java.io.Reader;
- import org.apache.log4j.Logger;
- import com.ibatis.common.resources.Resources;
- import com.ibatis.sqlmap.client.SqlMapClient;
- import com.ibatis.sqlmap.client.SqlMapClientBuilder;
- public class TestMain {
- static Logger logger = Logger.getLogger(TestMain.class.getName());
- /**
- * @param args
- */
- public static void main(String[] args) {
- String resource ="SqlMapConfig.xml";
- //sqlMap系统初始化完毕,开始执行update操作
- try {
- Reader reader = Resources.getResourceAsReader(resource);
- SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
- sqlMap.startTransaction();
- // Ibatis ibatis = new Ibatis();
- // ibatis.setId(new Integer(1));
- // ibatis.setName("Erica");
- // ibatis.setAge(new Integer(1));
- // sqlMap.insert("insertIbatis",ibatis);
- Ibatis ibatis = (Ibatis)sqlMap.queryForObject("getIbatis", "Erica");
- System.out.println(ibatis.toString());
- sqlMap.commitTransaction();
- } catch (Exception e) {
- // TODO: handle exception
- logger.debug(e.toString());
- }
- }
- }