`
oaklet
  • 浏览: 109058 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iBatis的简单使用

    博客分类:
  • java
阅读更多
简介
使用 SQL Map,能够大大减少访问关系数据库的代码。SQL Map 使用简单的 XML配
置文件将 Java Bean 映射成 SQL 语句,对比其他的数据库持续层和 ORM 框架(如 JDO 的
实现,Hibernate 等) ,SQL Map 优点在于它简单易学。要使用 SQL Map,只要熟悉
Java Bean,XML 和 SQL,就能使您充分发挥 SQL 语句的能力。

适用情况
1.系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几
条 select SQL(或存储过程)以获取所需数据,具体的表结构不予公开。
2.开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由
存储过程实现
3.系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高
度优化的SQL语句(或存储过程)才能达到系统性能设计指标。

ibatis-2.3.4.726
准备使用 SQL Map
如何建立 TEST 类与 TEST 数据表之间的映射呢?SQL Map对 Java Bean和数据表之间
的关系没有限制,如一个数据表映射成一个 Java Bean,或多个表映射成一个 Java Bean,或
多个 Java Bean 映射成一个数据表等。因为使用 SQL Map 您可以充分发挥 SQL 语句的全部
潜力而很少限制。下面这个例子,我们使用一个简单的表,将一个表映射成一个 Java Bean,
Java Bean 和表是一对一的关系。
建立表结构如下:
  CREATE TABLE TEST
  (
  TEST_ID NUMBER(10, 0),
  TEST_NAME VARCHAR2(50),
  TEST_TIME TIMESTAMP,
  TEST_TIME2 DATE,
  TEST_VALUE NUMBER(10, 3),
  TEST_VALUE2 INTEGER,
  TEST_VALUE3 FLOAT
  );

编写 Java Bean 如下:
import java.math.BigDecimal;
import java.sql.Timestamp;
public class TEST {
    public BigDecimal getTEST_ID() {
        return TEST_ID;
    }
    public void setTEST_ID(BigDecimal Test_id) {
        TEST_ID = Test_id;
    }
    public String getTEST_NAME() {
        return TEST_NAME;
    }
    public void setTEST_NAME(String Test_name) {
        TEST_NAME = Test_name;
    }
    public Timestamp getTEST_TIME() {
        return TEST_TIME;
    }
    public void setTEST_TIME(Timestamp Test_time) {
        TEST_TIME = Test_time;
    }
    public Timestamp getTEST_TIME2() {
        return TEST_TIME2;
    }
    public void setTEST_TIME2(Timestamp Test_time2) {
        TEST_TIME2 = Test_time2;
    }
    public BigDecimal getTEST_VALUE() {
        return TEST_VALUE;
    }
    public void setTEST_VALUE(BigDecimal Test_value) {
        TEST_VALUE = Test_value;
    }
    public BigDecimal getTEST_VALUE2() {
        return TEST_VALUE2;
    }
    public void setTEST_VALUE2(BigDecimal Test_value2) {
        TEST_VALUE2 = Test_value2;
    }
    public BigDecimal getTEST_VALUE3() {
        return TEST_VALUE3;
    }
    public void setTEST_VALUE3(BigDecimal Test_value3) {
        TEST_VALUE3 = Test_value3;
    }
    private BigDecimal TEST_ID;
    private String TEST_NAME;
    private Timestamp TEST_TIME;
    private Timestamp TEST_TIME2;
    private BigDecimal TEST_VALUE;
    private BigDecimal TEST_VALUE2;
    private BigDecimal TEST_VALUE3;
}

SQL Map的配置文件
配置文件是 SQL MAP的配置信息统一设置的地方。 SQL Map 配置文件是 XML 文件,
我们可以它设置各种属性,JDBC DataSource和 SQL Map。在配置文件中,可以
方便地统一配置 DataSource 不同的实现。SQL Map 框架包括
DataSource的 iBATIS 实现: SimpleDataSource 类, Jakarta DBCP (Commons),
和可通过 JNDI上下文查找的 DataSource(即应用服务器中的 DataSource)。
对于上面的例子,配置非常简单,如下所示:
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>

    <settings
        cacheModelsEnabled="true"
        enhancementEnabled="true"
        lazyLoadingEnabled="true"
        maxRequests="32"
        maxSessions="10"
        maxTransactions="5"
        useStatementNamespaces="false"
        />

    <transactionManager type="JDBC">
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
            <property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@127.0.0.1:1521:test"/>
            <property name="JDBC.Username" value="user"/>
            <property name="JDBC.Password" value="user"/>
            <property name="JDBC.DefaultAutoCommit" value="true"/>
            <property name="Pool.MaximumActiveConnections" value="10"/>
            <property name="Pool.MaximumIdleConnections" value="5"/>
            <property name="Pool.MaximumCheckoutTime" value="120000"/>
            <property name="Pool.TimeToWait" value="20000"/>
            <property name="Pool.PingQuery" value="SELECT 1 FROM DUAL"/>
            <property name="Pool.PingEnabled" value="true"/>
            <property name="Pool.PingConnectionsOlderThan" value="300000"/>
            <property name="Pool.PingConnectionsNotUsedFor" value="180000"/>
        </dataSource>
    </transactionManager>

    <sqlMap resource="TEST.xml"/>

</sqlMapConfig>

参数描述
cacheModelsEnabled是否启用SqlMapClient上的缓存机制。建议设为"true"。
enhancementEnabled是否针对POJO启用字节码增强机制以提升 getter/setter 的调用效能,避免使用Java Reflect所带来的性能开销。同时,这也为Lazy Loading带来了极大的性能提升。建议设为"true"。
lazyLoadingEnabled是否启用延迟加载机制,建议设为"true"。
maxRequests最大并发请求数(Statement并发数)。
maxSessions最大Session数。即当前最大允许的并发SqlMapClient 数。
maxTransactions最大并发事务数。maxTransactions<maxSessions<maxRequests
useStatementNamespaces是否使用Statement命名空间。这里的命名空间指的是映射文件中,sqlMap节点的namespace属性。


SQL Map的映射文件
现在 DataSource 已经配置好了,并且有了统一的 SQL Map 配置文件,我们还需要 SQL
Map 的映射文件。映射文件包括 SQL 语句和参数对象和结果对象的映射。
继续上面的例子,为 TEST 类和 TEST 表之间创建一个 SQL Map 映射文件。
TEST.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="TEST">
  <typeAlias alias="TEST" type="net.oaklet.jdbc.TEST"/>
  <select id="selectTESTById" parameterClass="TEST" resultClass="TEST">
      select
  TEST_ID,
  TEST_NAME,
  TEST_TIME,
  TEST_TIME2,
  TEST_VALUE,
  TEST_VALUE2,
  TEST_VALUE3
      from TEST where TEST_ID=#TEST_ID#
  </select>
  <select id="selectTEST" resultClass="TEST">
      select
  TEST_ID,
  TEST_NAME,
  TEST_TIME,
  TEST_TIME2,
  TEST_VALUE,
  TEST_VALUE2,
  TEST_VALUE3
      from TEST
  </select>
  <insert id="insertTEST" parameterClass="TEST">
      insert into TEST (
  TEST_ID,
  TEST_NAME,
  TEST_TIME,
  TEST_TIME2,
  TEST_VALUE,
  TEST_VALUE2,
  TEST_VALUE3
      ) values (
  #TEST_ID#,
  #TEST_NAME#,
  #TEST_TIME#,
  #TEST_TIME2#,
  #TEST_VALUE#,
  #TEST_VALUE2#,
  #TEST_VALUE3#
      )
  </insert>
  <update id="updateTEST" parameterClass="TEST">
    <![CDATA[
      update TEST set
  TEST_NAME = #TEST_NAME#,
  TEST_TIME = #TEST_TIME#,
  TEST_TIME2 = #TEST_TIME2#,
  TEST_VALUE = #TEST_VALUE#,
  TEST_VALUE2 = #TEST_VALUE2#,
  TEST_VALUE3 = #TEST_VALUE3#
      where TEST_ID=#TEST_ID#
    ]]>
  </update>
  <delete id="deleteTESTById" parameterClass="TEST">
      delete from TEST where TEST_ID=#TEST_ID#
  </delete>
</sqlMap>

该例子是 SQL Map最简单的形式。它使用了 SQL Map框架中一个特性,根据匹配
的名字将 ResultSet 的列映射成 Java Bean 的属性(或Map的 key值)。
#value#符号是输入参数,该符号表示使用了输入参数。

⑴ ID
指定了操作 ID,之后我们可以在代码中通过指定操作 id 来执行此节点所定
义的操作,如:
sqlMap.update("updateTEST",test);

⑵ parameterClass
指定了操作所需的参数类型,此例中 update 操作以 TEST 类型的对象作为参数,
目标是将提供的 TEST 实例更新到数据库。

⑶ <![CDATA[……]]>
通过<![CDATA[……]]>节点,可以避免 SQL 中与 XML 规范相冲突的字符对
XML映射文件的合法性造成影响。

⑷ 执行更新操作的 SQL,这里的 SQL 即实际数据库支持的 SQL 语句,将由
ibatis填入参数后交给数据库执行。

使用 SQL Map 框架编程
我们完成了所有的配置文件和映射文件,就剩下的应用的编码工作了。首先要设
置SQL Map, 读入刚创建好的SQL Map XML配置文件。 SqlMapClient 对象是线程安全
并且应持久生存。对于一个特定的应用,只需进行一次 SqlMap 配置。
因此,它可以作为基类的一个静态对象(即 DAO对象的基类) ,或者,
如果您想让它有更大的作用范围,可以把它封装在方便使用的类中。

例1:数据写入操作(insert):
FileReader fileReader = new FileReader("SqlMapConfig.xml");
SqlMapClient sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(fileReader);
fileReader.close();
TEST test = new TEST();
test.setTEST_ID(BigDecimal.valueOf(51212));
test.setTEST_NAME("testString");
Object key = sqlMapClient.insert("insertTEST", test);

例2:数据更新操作(update):
TEST test = new TEST();
test.setTEST_ID(BigDecimal.valueOf(51212));
test.setTEST_NAME("testString2");
int update = sqlMapClient.update("updateTEST", test);

例3:数据删除操作(delete):
TEST test = new TEST();
test.setTEST_ID(BigDecimal.valueOf(51212));
int number = sqlMapClient.delete("deleteTESTById", test);

例4:数据查询操作(select):
List list = sqlMapClient.queryForList("selectTEST");


import java.io.FileReader;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.sql.Timestamp;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class OracleTest {
    public static void main(String[] args) throws Exception {
        FileReader tarReader = new FileReader("SqlMapConfigOra.xml");
        SqlMapClient targetClient = SqlMapClientBuilder.buildSqlMapClient(tarReader);
        tarReader.close();

        long currentTimeMillis = System.currentTimeMillis();
        Timestamp timestamp = new Timestamp(currentTimeMillis);
        TEST t = new TEST();
        t.setTEST_ID(BigDecimal.valueOf(51212));
        t.setTEST_NAME("testString");
        t.setTEST_TIME(timestamp);
        t.setTEST_TIME2(timestamp);
        t.setTEST_VALUE(BigDecimal.valueOf(51200));
        t.setTEST_VALUE2(BigDecimal.valueOf(51200));
        t.setTEST_VALUE3(BigDecimal.valueOf(51200));
        targetClient.insert("insertTEST", t);

        for (TEST test : targetClient.queryForList("selectTEST")) {
            System.out.println(test);
        }
    }
}
分享到:
评论

相关推荐

    ibatis简易使用 ibatis简易使用 ibatis简易使用

    以下是对iBATIS简易使用的详细解释: 1. **环境准备**: - **jar文件**:iBATIS框架运行需要依赖一些库文件,包括`log4j`用于日志记录,`ibatis`核心库,以及`jdbc`驱动,这些都需要添加到项目的类路径中。 - **...

    ibatis简单使用的想法

    ibatis简单使用的想法 ibatis 是一个成熟的框架,现在已经是改名字叫mybatis了,框架的配置比较烦,如xml,dao的书写,还有每个表还要对应于javabean,没有的话,map 也成,这里希望对其进行简单的简化。

    IBatis简单使用

    4. **事务管理**: IBatis提供了简单的事务控制,可以通过编程方式或者配置方式来管理事务的提交、回滚等操作。 5. **缓存机制**: 内置的缓存机制可以提高数据访问效率,减少对数据库的频繁访问。 **使用步骤** 1....

    ibatis的使用教程

    要开始使用 Ibatis,首先需要从官方网站下载最新版本的 ibatis jar 包,以及 log4j 日志框架的 jar 包。然后,在Java项目中添加这些库,配置log4j.properties以开启SQL日志输出。接着,新建主配置文件sqlMapConfig....

    ibatis 相关使用文档及安装包ibatis 相关使用文档及安装包

    SQL Maps是iBATIS的核心部分,它们将数据库查询与Java对象绑定,使得数据库操作变得简单直观。 《iBATIS-DAO-2.pdf》可能涉及到了Data Access Object(DAO)模式的实现和iBATIS的结合。DAO模式是一种设计模式,用于...

    使用的iBatis 简单例子

    在这个“使用的iBatis简单例子”中,我们将深入探讨如何配置和使用iBatis进行数据库交互。 首先,iBatis的核心组件包括XML配置文件、SQL映射文件以及SqlSessionFactory。XML配置文件用于定义数据源、事务管理器等...

    ibatis 使用手册

    入门教程通常从简单的Hello World示例开始,逐步引导读者了解如何创建和配置iBatis项目,编写第一条SQL,处理查询结果,以及如何进行异常处理。同时,还会讲解如何在实际项目中结合Spring等框架进行集成使用。 **...

    ibatis简单CRUD例子

    Ibatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 **Ibatis的主要特点** 1. **简洁的API设计**:Ibatis提供了简单易用的...

    ibatis使用手册

    通过 DAO,开发者可以使用简单的接口来操作数据,而无需关心底层的 SQL 实现。 **二、Ibatis 的使用准备** 在开始使用 Ibatis.Net 之前,你需要进行以下步骤: 1. **下载软件包**:从官方网站...

    ibatis使用及环境搭建文档

    一个简单的Ibatis查询操作示例: 1. 定义Mapper XML文件,包含一个查询所有用户信息的SQL语句: ```xml SELECT * FROM users ``` 2. 创建对应的DAO接口: ```java public interface UserMapper { List&lt;User&gt; ...

    ibatis简单例子

    这个"ibatis简单例子"旨在帮助初学者理解Ibatis的基本用法,包括配置文件的设置、SQL映射文件的编写以及如何在Java代码中调用这些映射的SQL。通过实践这两个小例子,可以深入理解Ibatis如何将数据库操作与业务逻辑...

    ibatis 使用简单配置

    ### ibatis 使用简单配置 #### 一、简介 在本文档中,我们将详细介绍如何通过简单的配置来使用ibatis(现在通常被称为MyBatis),并提供一个具体的示例来帮助理解整个配置过程及其应用场景。 #### 二、ibatis简介...

    IBatis.Net详细使用手册

    在使用iBatis.Net时,首先要理解其核心概念和组成部分: 1. **配置文件**:iBatis.Net 的配置文件包含了数据库连接信息、日志设置以及映射文件引用等关键信息。配置文件通常以XML格式存在,通过`&lt;configuration&gt;`...

    iBATIS缓存的使用方法

    - 这是最简单的缓存实现方式,使用引用计数来管理缓存项。当一个缓存项的引用计数为零时,该项就会被移除。 - MEMORY缓存不支持统一的失效策略,适合对内存使用没有严格限制的场景。 2. **LRU ...

    maven整合ibatis的简单例子

    下面我们将详细探讨如何将Maven与iBatis整合,以实现一个简单的例子。 首先,我们需要创建一个新的Maven项目。在Maven的`pom.xml`文件中,我们需要添加iBatis和其依赖的数据库驱动(如MySQL驱动)作为项目的依赖。...

    Ibatis简易教程

    在iBatis的简易教程中,我们将通过三个例子来逐步理解如何配置和使用iBatis。首先,我们需要创建数据库和对应的表。在本例中,我们使用MySQL 5.0,并创建了一个名为`contact`的表,包含`contactid`、`firstName`、`...

    Ibatis入门例子,Ibatis教程

    以上就是一个简单的Ibatis入门例子,展示了如何使用Ibatis进行数据库查询。实际上,Ibatis还支持动态SQL、结果映射、参数映射等多种高级特性,可以实现更复杂的业务逻辑。例如,你可以通过使用`&lt;if&gt;`、`&lt;choose&gt;`等...

    ibatis简单实例

    **Ibatis简单实例** 在"IbatisTest"这个简单实例中,我们通常会经历以下步骤: 1. **引入依赖**: 在项目中引入Ibatis的jar包,包括核心库mybatis-x.x.x.jar和相关数据库驱动。 2. **配置SqlMapConfig.xml**: 配置...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    ResultMap不仅支持简单的列名映射,还能处理复杂的一对多、一对一关系映射。 六、ParameterHandler ParameterHandler负责设置PreparedStatement的参数。`org.apache.ibatis.executor.parameter.ParameterHandler`...

    Ibatis 入门经典 实例

    Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心概念和常用功能,帮助你快速...

Global site tag (gtag.js) - Google Analytics