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

ibatis的应用

阅读更多

原本是 ibatis-2.3.4 中的一个例子 但是发现例子中有少量的错误,以及功能并不全面所以加以修改

 

首先创建一个 实体bean

Account.java

public class Account {

  private int id;
  private String firstName;
  private String lastName;
  private String emailAddress;

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String getEmailAddress() {
    return emailAddress;
  }

  public void setEmailAddress(String emailAddress) {
    this.emailAddress = emailAddress;
  }

  @Override
	public String toString() {
		return "id:"+this.id+"\tfirstName:"+this.firstName+"\tlastName:"+lastName+"\temailAddress:"+this.emailAddress;
	}
}

 

可以直接借用一下源码例子中的这个类,我只是重写了一下他自身的 toString 方法。

 

然后编写一个 ibatis实现的CRUD 类

SimpleExample.java

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

/**
 * This is not a best practices class.  It's just an example
 * to give you an idea of how iBATIS works.  For a more complete
 * example, see JPetStore 5.0 at http://www.ibatis.com.
 */
public class SimpleExample {

  /**
   * SqlMapClient instances are thread safe, so you only need one.
   * In this case, we'll use a static singleton.  So sue me.  ;-)
   */
  private static SqlMapClient sqlMapper;

  /**
   * It's not a good idea to put code that can fail in a class initializer,
   * but for sake of argument, here's how you configure an SQL Map.
   */
  static {
    try {
      Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
      sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
      reader.close(); 
    } catch (IOException e) {
      throw new RuntimeException("Something bad happened while building the SqlMapClient instance." + e, e);
    }
  }

  public static List<?> selectAllAccounts () throws SQLException {
    return sqlMapper.queryForList("selectAllAccounts");
  }
  
  public static List<?> selectAccountByName(String str) throws SQLException{
	  return sqlMapper.queryForList("selectAccountByName",str) ;
  }

  public static Account selectAccountById  (int id) throws SQLException {
    return (Account) sqlMapper.queryForObject("selectAccountById", id);
  }

  public static void insertAccount (Account account) throws SQLException {
    try {
		sqlMapper.startTransaction() ;
		sqlMapper.insert("insertAccount", account);
		sqlMapper.commitTransaction() ;
	} catch (SQLException e) {
		sqlMapper.getCurrentConnection().rollback();
		e.printStackTrace();
	}
  }

  public static void insertAccountBySequence (Account account) throws SQLException {
	try {
		sqlMapper.startTransaction() ;
		sqlMapper.insert("insertAccountBySequence", account);
		sqlMapper.commitTransaction() ;
	} catch (SQLException e) {
		sqlMapper.getCurrentConnection().rollback();
		e.printStackTrace();
	}
  }
  
  public static void updateAccount (Account account) throws SQLException {
	  try {
			sqlMapper.startTransaction() ;
			sqlMapper.update("updateAccount", account);
			sqlMapper.commitTransaction() ;
		} catch (SQLException e) {
			sqlMapper.getCurrentConnection().rollback();
			e.printStackTrace();
		}
  }

  public static void deleteAccount (int id) throws SQLException {
	  try {
			sqlMapper.startTransaction() ;
			sqlMapper.delete("deleteAccount", id);
			sqlMapper.commitTransaction() ;
		} catch (SQLException e) {
			sqlMapper.getCurrentConnection().rollback();
			e.printStackTrace();
		}
  }

}

  

我在里面添加了模糊查询及其主键自动增长的添加方式

 

现在将源码例子中的两个 XML 文件复制到 src 目录

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>
	<properties resource="SqlMap.properties"/>
  <!-- Configure a built-in transaction manager.  If you're using an 
       app server, you probably want to use its transaction manager 
       and a managed datasource -->
  <transactionManager type="JDBC" commitRequired="false">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="${driver}"/>
      <property name="JDBC.ConnectionURL" value="${url}"/>
      <property name="JDBC.Username" value="${username}"/>
      <property name="JDBC.Password" value="${password}"/>
    </dataSource>
  </transactionManager>

  <!-- List the SQL Map XML files. They can be loaded from the 
       classpath, as they are here (com.domain.data...) -->
  <sqlMap resource="Account.xml"/>

</sqlMapConfig>

 

修改为以上的内容

 

Account.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="Account">

  <!-- Use type aliases to avoid typing the full classname every time. -->
  <typeAlias alias="Account" type="Account"/>

  <!-- Result maps describe the mapping between the columns returned
       from a query, and the class properties.  A result map isn't
       necessary if the columns (or aliases) match to the properties 
       exactly. -->
  <resultMap id="AccountResult" class="Account">
    <result property="id" column="ID"/>
    <result property="firstName" column="FIRSTNAME"/>
    <result property="lastName" column="LASTNAME"/>
    <result property="emailAddress" column="EMAILADDRESS"/>
  </resultMap>

  <!-- Select with no parameters using the result map for Account class. -->
  <select id="selectAllAccounts" resultMap="AccountResult">
    select * from ACCOUNT
  </select>

  <select id="selectAccountByName" parameterClass="String" resultClass="Account">
  	select
      ID as id,
      FIRSTNAME as firstName,
      LASTNAME as lastName,
      EMAILADDRESS as emailAddress
    from ACCOUNT
    where FIRSTNAME like '%$firstName$%'
  </select>
  
  <!-- A simpler select example without the result map.  Note the 
       aliases to match the properties of the target result class. -->
  <select id="selectAccountById" parameterClass="int" resultClass="Account">
    select
      ID as id,
      FIRSTNAME as firstName,
      LASTNAME as lastName,
      EMAILADDRESS as emailAddress
    from ACCOUNT
    where ID = #id#
  </select>
   
  <!-- Insert example, using the Account parameter class -->
  <insert id="insertAccount" parameterClass="Account">
    insert into ACCOUNT ( ID, FIRSTNAME, LASTNAME, EMAILADDRESS)
    values ( #id#, #firstName#, #lastName#, #emailAddress# )
  </insert>
  
  <insert id="insertAccountBySequence" parameterClass="Account" >
  	<selectKey keyProperty="id" resultClass="int">
  		select accountPK.nextVal as id from dual
  	</selectKey>
    insert into ACCOUNT ( ID, FIRSTNAME, LASTNAME, EMAILADDRESS)
    values ( #id#, #firstName#, #lastName#, #emailAddress# )
  </insert>

  <!-- Update example, using the Account parameter class -->
  <update id="updateAccount" parameterClass="Account">
    update ACCOUNT set
      FIRSTNAME = #firstName#,
      LASTNAME = #lastName#,
      EMAILADDRESS = #emailAddress#
    where
      ID = #id#
  </update>

  <!-- Delete example, using an integer as the parameter class -->
  <delete id="deleteAccount" parameterClass="int">
    delete from ACCOUNT where ID = #id#
  </delete>

</sqlMap>

 

 

以上操作完毕之后,需要创建一个 属性文件

SqlMap.properties 文件

driver = oracle.jdbc.driver.OracleDriver
url = jdbc:oracle:thin:@localhost:1521:DBLEE
username = jlee
password = jlee

 

 

然后将 操作Oracle数据库的 驱动包与 ibatis的jar 全部加载到 项目的 calsspath 目录下

为了可以清晰的看到 ibatis 执行的SQL语句 加入log4j的支持 所以将log4j 的jar 同样添加

到classpath 目录下 并且创建 log4j.properties 文件

log4j.properties

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d%p[%c]-%m%n
log4j.logger.com.ibatis=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,stdout

 

 

创建一个 测试类

IbatisTest.java

import java.util.List;

import org.apache.log4j.Logger;

class IbatisTest {
	static Logger logger = Logger.getLogger(IbatisTest.class.getName());//为了在控制台可以看到打印出来的SQL语句添加log4j


	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		
		Account account = new Account() ;
		account.setId(1) ;
		account.setLastName("java") ;
		account.setFirstName("JLee") ;
		account.setEmailAddress("44444444") ;
		
		account.setId(2) ;
		account.setLastName("java") ;
		account.setFirstName("JLee") ;
		account.setEmailAddress("444823046@qq.com") ;
		/**
		 * 执行添加记录
		 */
		SimpleExample.insertAccount(account) ;
		
		/**
		 * 以主键自动增长的方式进行添加数据
		 * 首先在  Oracle 对应的库中创建一个 Sequence
		 * create sequence accountPK start with 100 increment by 1 ;
		 */
		SimpleExample.insertAccountBySequence(account);
		
		/**
		 * 执行查询指定的记录
		 */
		account = (Account)SimpleExample.selectAccountById(1) ;
		System.out.println(account.toString());
		
		/**
		 * 执行查询所有记录
		 */
		List<Account> listAccount = (List<Account>)SimpleExample.selectAllAccounts();
		for(Account a : listAccount){
			System.out.println(a.toString());
		}
		
		/**
		 * 执行模糊查询
		 */
		List<Account> list = (List<Account>)SimpleExample.selectAccountByName("a");
		for(Account a : list){
			System.out.println("模糊查询:"+a.toString());
		}
		
		/**
		 * 修改一条记录
		 */
		account.setId(1) ;
		account.setFirstName("Java") ;
		account.setLastName("JLee") ;
		account.setEmailAddress("JavaEE") ;
		SimpleExample.updateAccount(account) ;
		//修改之后查看
		account = (Account)SimpleExample.selectAccountById(1) ;
		System.out.println(account.toString());
		
		/**
		 * 删除一条记录
		 */
		SimpleExample.deleteAccount(2) ;
		//删除之后进行查看
		for(Account a : (List<Account>)SimpleExample.selectAllAccounts()){
			System.out.println(a.toString());
		}
		
	}

}

  

好了 ,项目创建完成!

项目的源文件已经上传上来。

3
3
分享到:
评论

相关推荐

    Ibatis应用实例.docx

    《Ibatis应用实例》 iBatis是一个轻量级的持久层框架,它作为O/R Mapping解决方案,与Hibernate等其他框架相比,其最大的优势在于简洁易用。对于不需要复杂功能的项目,iBatis是理想的选择,它允许开发者自由地编写...

    ibatis应用

    【ibatis应用】 Ibatis,一个轻量级的Java持久层框架,由Clinton Begin于2003年创建,最初是作为MyBatis的前身。它允许开发者将SQL语句直接写在配置文件中,避免了传统的JDBC代码编写,提高了开发效率。Ibatis的...

    Ibatis应用事例

    ### Ibatis应用实例详解 #### 一、Ibatis配置与数据库连接 在开始Ibatis的应用之前,我们需要确保Ibatis能够正确地与数据库建立连接。这一步骤主要涉及到两个文件的配置:`SqlMap.properties` 和 `SqlMapConfig....

    Ibatis应用笔记

    Ibatis 是一款轻量级的Java持久层框架,它的核心在于映射文件,这个文件用于配置SQL语句、参数映射和结果映射等关键信息。Ibatis 的映射文件主要包括四大部分:Mapped Statements、Parameter Maps、Result Maps 和 ...

    Ibatis 练习Demo和笔记

    而"IbatisStudy"可能是一个示例项目,包含了一个简单的Ibatis应用场景,如用户管理模块,包含实体类、Mapper接口、Mapper XML文件以及相关的测试代码。通过运行这个项目,你可以更直观地了解Ibatis的工作流程。 ...

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

    《iBATIS_DBL-2.1.5.582.zip》是iBATIS数据库库的安装包,其中包含了运行iBATIS应用程序所需的JAR文件和其他依赖项。解压后,开发者可以将其添加到项目的类路径中,以便使用iBATIS的功能。 使用iBATIS时,首先需要...

    ibatis教程外加jar包

    - **ibatis-2.3.4.726.jar**:这是Ibatis的核心库,包含了所有必要的类和接口,用于构建Ibatis应用。 - **iBatis教程中文版.doc**:这份文档详细介绍了Ibatis的使用方法,包括配置、SQL映射、结果映射、动态SQL等...

    iBATIS官方

    3. DAO(Data Access Object):DAO层是iBATIS应用中的一个常见设计模式,它是业务逻辑层与数据库交互的桥梁。DAO类通常会实现Mapper接口,从而调用对应的SQL Maps进行数据操作。 4. Transactions:iBATIS支持事务...

    iBatis资料 语法

    `一个简单的ibatis示例.doc`是一个基础的iBatis应用示例,通常会展示如何创建SqlMapConfig.xml配置文件,定义SQL映射文件,以及在Java代码中如何使用SqlSession进行数据库操作。通过这个例子,你可以了解到iBatis的...

    Ibatis开发实例

    #### 二、Spring宠物店项目中的Ibatis应用 Spring宠物店是一个非常典型的展示了 Spring 和 Ibatis 整合的应用案例。在这个项目中,我们可以通过一系列步骤来了解如何使用 Ibatis 来进行数据库操作。 ##### 2.1 ...

    iBATIS缓存的使用方法

    ### iBATIS缓存的使用方法 ...通过合理地配置缓存模型和选择合适的缓存控制器,可以显著提升iBATIS应用程序的性能。开发者可以根据具体的业务需求和数据访问模式,灵活选择不同的缓存策略,以达到最佳的性能效果。

    Ibatis视频下载

    7. **实战演练**:通过实际项目案例,视频会教你如何将Ibatis应用到实际开发中,解决常见的问题,如多表联查、分页查询等。 8. **最佳实践**:视频会分享一些Ibatis使用的最佳实践,帮助你编写更高效、可维护的代码...

    ibatis开发指南(中文版)

    最后,遵循最佳实践能提升iBatis应用的质量和性能。比如,避免在Mapper接口中直接使用复杂SQL,而是将其分解为更小的、可重用的部分;合理利用缓存,避免过多的数据库交互;及时关闭SqlSession,防止资源泄漏;以及...

    ibatis配置

    Ibatis,全名MyBatis,是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在Ibatis中,SQL语句的编写与Java代码完全分离,使得开发者可以更好地...这是一次成功的Ibatis应用实践,值得分享和学习。

    ibatis完整实例

    通过这个项目,你可以深入了解 Ibatis 的工作原理,学习如何构建和运行一个实际的 Ibatis 应用。同时,这个实例也强调了 Ibatis 的灵活性和易用性,这对于任何需要处理数据库操作的 Java 开发者来说都是一份宝贵的...

    ibatis生成工具

    综上所述,这个“ibatis生成工具”是一个旨在简化iBATIS应用开发过程的工具,它可能包括自动生成Mapper接口、XML配置文件以及对应的SQL映射等功能。用户需要依赖提供的文档来了解如何配置和利用这个工具。依赖的两个...

    ibatis-in-action

    - **设计模式**:分享如何运用设计模式改进iBATIS应用程序的设计质量。 #### 4.2 实战案例 - **项目架构**:展示一个完整的基于iBATIS构建的应用程序架构示例。 - **问题解决**:针对实际开发过程中可能遇到的问题...

    ibatis打印sql

    综上所述,"ibatis打印sql"这个主题涵盖了解决iBATIS应用中的调试、性能监控和问题定位的关键技术,主要通过集成Log4j并配置合适的日志级别来实现。理解和掌握这些知识点对于有效管理和维护使用iBATIS的项目至关重要...

Global site tag (gtag.js) - Google Analytics