Ibatis入门基本语法

1.       Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate、Toplink等在java编程的对象持久化方面深受开发人员欢迎。

对象关系映射(ORM):简单原理是通过面向对象方式操作关系型数据库,目前存储数据最常用最流行的工具是关系型数据库,其操作方式是通过SQL语句操作数据库的表,但是对于Java面向对象编程语言中,所有的操作对象都是对象,因此对象关系映射就是把数据库表和java编程语言中的对象对应起来,把表的列同java对象中的字段对应起来,程序员在程序开发过程中不再是使用原始SQL语句去直接操作数据库,而是通过ORM提供的查询语句操作普通的java对象,ORM将其提供的对普通java对象的查询语句翻译成SQL语句来操作数据库,从而屏蔽了不同数据库SQL语句的差别,简化了程序开发工作,提高了程序的可移植性。

2.       Ibatis开发的准备工作:

(1).将Ibaits相关的jar包添加到工程的类路径下。

(2).Ibatis工程的主要配置文件为:

a.Ibatis的总配置文件SqlMapConfig.xml。

b.Ibatis的实体映射文件。

3.Ibatis总配置文件sql-map-config.xml:

Ibatis的总配置文件主要是配置数据库连接相关信息,和Ibatis实体映射文件。其写法示例如下:

<? 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>
       <transactionManager type=”JDBC” commitRequired=”false”>
              <dataSource type=”SIMPLE”>
                     <property name= “JDBC.Driver” value=”数据库的jdbc驱动”/>
                     <property name=”JDBC.ConnectionURL” value=”数据库的url”/>
                     <property name=”JDBC.Username” value=”数据库用户名”/>
                     <property name=”JDBC.Password” value=”数据库的密码”/>
                     ……
              </dataSource>
       </transactionManager>
       <sqlMap resource=”Ibatis的实体映射文件”/>
       ……
</sqlMapConfig>  

4.  Ibatis实体映射文件user.xml的写法示例:

Ibatis的实体映射文件是Ibatis框架的核心,起作用是将Java的持久化实体对象和关系型数据库映射起来,其内容主要是包括java实体各种增删改查操作对应的数据库语句。其写法示例如下:

<? 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=”Ibatis命名空间”>
       <typeAlias alias=”实体类类别名” type=”实体类全路径”/>
       <!--restultMap主要是用于Ibatis对数据增删改查操作的返回值结果对于java对象的映射,一般用于所返回的对象可能包含的是一个以上java对象的字段,如果是一个java对象中的字段一般使用resultClass-->
       <resultMap id=”结果集id” class=”实体类别名”>
              <result property=”java实体类中的属性名” column=”数据库表中的列名”/>
              ……
       </resultMap>
       ……
</sqlMap>  

5.       读取Ibatis的总配置文件得到SqlMapClient:

private static SqlMapClient sqlMapClient = null;
static{
  try{
       Reader reader = com.ibatis.common.resource.Resources.getResourceAsReader(“Ibatis总配置文件路径”);
       sqlMapClient = com.ibatis.sqlMap.client.SqlMapClientBuilder.builderSqlMapClient(reader);
       reader.close();
  }catch(IOException e){
       异常处理…….
  }
}  

6.       Ibatis的SQL Map:

(1).Ibatis的SQL Map的核心概念是Mapped Statement。Mapped Statement可以使用任意的SQL语句,并拥有parameterMap/parameterClass(输入参数)和resultMap/resultClass(输出结果)。

(2). <statement>元素是个通用的声明,可以用于任何类型的SQL语句,但是通常使用具体的<statement>类型,如:查询使用<select>,添加使用<insert>,更新使用<update>,删除使用<delete>。

7.       Ibatis的增删改查操作简单例子:

(1).实体类必须遵循JavaBean的规范,提供一个无参数的构造方法,字段必须提供get和set方法。

(2).在Ibatis对应的实体映射文件的<sqlMap>标签元素添加如下:

a.Ibatis添加:

<insert id=”Ibatis添加实体操作Id” parameterClass=”参数类型”>
     insert into 实体对应数据库中的表名(实体字段对应的表的列名1, 实体字段对应的表的列名2,……) values(#实体类字段1#,#实体类字段2#......);
</insert>

  注意:Ibatis增删改查语句的参数是通过parameterClass或者parameterMap传递的。Ibatis只能传递一个参数,如果又多个参数需要封装在一个对象中。

b. Ibatis删除:

<delete id=”Ibatis删除实体操作Id” parameterClass=”参数类型”>
       delete from 实体对应数据库中的表名 where 列名=#列名对应的实体字段名#;
</delete>

注意:删除和查询时,经常需要根据一定条件操作,有时可能需要模糊查询,对于

c.  Ibatis 模糊查询

如name like‘%c%’。在Ibatis中有两种写法:

写法1:在java方法中传递参数时写成:”%字段名%”。

写法2:在Ibatis的sql语句中可以写成如:where name=’%$字段名$%’。

d.       Ibatis更新:

<update id=”Ibatis更新实体操作Id” parameterClass=”参数类型”>
       update 实体对应数据库的表名 set 列名1=#字段1#,列名2=#字段2#,…….where ….;
</update>   

e.       Ibatis查询

<select id=”Ibatis查询实体操作Id” resultClass=”查询结果类型” >
       select * from 实体对应的表名;
</select>

  注意:这里演示的是最简单的查询,其结果是一个实体的集合。

8.       在java对象中使用Ibatis的statement操作:

(1).根据Ibatis总配置文件得到SqlMapClient对象,具体方法参见“5. 读取Ibatis的总配置文件得到SqlMapClient”。

(2).使用SqlMapClient对象的queryForObject(),queryForList(),insert(),delete(),update()方法。这些方法都需要一个传递一个参数:在实体映射文件中定义的操作statementId,如果这些定义的操作还需要输入参数,则还需要传递输入参数对象。简单用法如下:

实体对象类型 对象= sqlMapClient.queryForObject(“实体映射文件命名空间.statementId”, “查询条件参数”); 例如:
user = (User) sqlMapClient.queryForObject("querybyid",id);
list = sqlMapClient.queryForList("queryAll",user);
sqlMapClient.update("update", user);
sqlMapClient.delete("delete",id);
sqlMapClient.insert("insert", user);
user = (User)sqlMapClient.queryForObject("login", u);

9.       Ibatis主键自动生成:

通过使用<select>的子元素<selectkey>来支持自动生成主键。对于不同的数据库主键自动生成机制是不同的,Oracle是通过自增序列欲生成的,MS-SQL Server是通过Identity后生成的。这里以Oracle数据库为例简单讲述一下主键自动生成的方法:

(1).首先在Oracle数据库中创建一个自增的序列:

create Sequence 序列名
start with 1
increment 1;

(2).在insert标签中插入selectkey子标签:

<insert id=”添加实体操作Id” parameterClass=”输入参数类型”>
       <selectkey resultClass=”int” keyProperty=”自定义主键名称”>
              select 序列名.nextval from dual;
       </selectkey>
       insert into 表名(主键,列名1,列名2,……)  values(#自定义主键名称#,#字段1#,#字段2#,…….);
</insert>

  注意:selectkey标签中的keyProperty属性是主键赋值的对象。

10.   Ibatis的内嵌参数:

所谓内嵌参数是指,使用Ibatis时,当没有给定参数传递值时,Ibatis会使用默认的值代替。

语法为:#参数值:数据库中数据类型:内嵌参数#

一个简单的例子如下:

<statement id=”insertProduct” parameterClass=”Product”>
      Insert into Product(PRD_ID,PRD_DESC)  values(#id:Number:-999999#,#desc:varchar:noEntry#);
</statement>

  当id没有给定值是数据库中默认为0,当desc没有给定值是数据库默认给定noEntry。

11.   Ibatis对象之间的关系:

Ibatis的输入参数和输出参数只能是一个,因此,当输入参数在一个实体对象时,使用parameterClass,当输入对象也只在一个实体对象中时,使用resultClass。

但是有很多时候输入参数和输出参数可能包含在几个实体对象中,我们不能为了只传递一个参数而专门为这些输入和输出参数组合专门创建类,因此就需要使用parameterMap和resultMap来组合多个实体对象中的字段。

以resultMap为例,使用方法如下:

<resultMap id=”resultMapId”>
       <result property=”……” column=”…….” select=”实体映射文件中的StatementId”/>
       ……
</resultMap>   
<sqlMap>
  <typeAlias alias="User" type="com.pojo.User" />
     <resultMap id="UserResult" class="User">
       <result property="id" column="ID" />
	   <result property="username" column="USERNAME" />
	   <result property="password" column="PASSWORD" />
	 </resultMap>

	 <select id="login" resultMap="UserResult" parameterClass="User">
		 select * from USER where USERNAME=#username# and PASSWORD=#password#
	 </select>

	 <insert id="insert" parameterClass="User">
		insert into USER(ID,USERNAME,PASSWORD)values(#id#,#username#,#password#)
	 </insert>

	<delete id="delete" parameterClass="int">
        delete from USER where ID = #id#
    </delete>

	<update id="update" parameterClass="User">
        update USER set USERNAME=#username#,PASSWORD=#password# where ID = #id#
    </update>

	<select id="querybyid" parameterClass="int" resultClass="User">
        select * from USER where ID = #id#
    </select> 

     <select id="queryAll" parameterClass="User" resultClass="User">
        select * from USER
    </select>
</sqlMap>	

12.   Ibatis的SQL Map通过<procedure>标签元素调用存储过程:

存储过程是数据库将一组完成特定功能的Sql语句进行编译,每次调用时不必重新编译,因此执行速度和效率都比直接使用Sql语句有很大优势。在Ibatis中通过<procedure>标签元素可以直接调用数据库的存储过程,其过程如下:

(1).定义存储过程所需输入/输出参数,如:

<parameterMap id=”存储过程参数” class=”map”>
       <parameter property=”email1” jdbcType=”varchar” javaType=”java.lang.String” mode=”INOUT”/>
       <parameter property=”email2” jdbcType=”varchar” javaType=”java.lang.String” mode=”INOUT”/>
</parameterMap>   

(2).调用存储过程,如:

<procedure id=”Ibatis调用存储过程” parameterMap=” 存储过程参数”>
       {call 存储过程名(?,?)}
</procedure>   

注意:Ibatis调用存储过程时,要确保始终只使用JDBC标准的存储过程语法。

13.   Ibatis与Spring集成:

现在Java Web开发中,SSH(Spring,Sturts,Hibernate)三个开源框架组合非常流行,对于一些对Hibernate不熟悉或者怀疑Hibernate性能的人,也可以使用Ibatis代替Hibernate框架,即SSI(Spring,Struts,Ibatis)。Spring和Struts的集成这里不多说了,具体说一下Spring和Ibatis的集成。

(1).对Ibatis工程引入Spring支持,即将Spring相关的jar包加入到类路径中,在/src目录下创建spring配置文件,在web.xml文件中指定spring配置文件并添加spring的WebContext启动监听器。

(2).将对数据库的连接信息放交由spring管理,在spring配置文件中添加数据库连接信息:

<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”>
       <property name=”driverClassName” value=”数据库驱动类”/>
       <property name=”url” value=”数据库连接URL”/>
       <property name=”username” value=”数据库连接用户名”/>
       <property name=”password” value=”数据库连接密码”/>
</bean>   

(3).在spring配置文件中添加对Ibatis的支持:

<bean id=”sqlMapClient” class=”org.springframework.orm.ibatis.SqlMapClientFactoryBean”>
       <property name=”configLocation” value=”Ibatis总配置文件路径”/>
       <!--为Spring创建的SqlMapClient对象指定数据源-->
       <property name=”dataSource” ref=”dataSource”/>
</bean>  
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
        <property name="configLocation">
            <value>/WEB-INF/sql-map-config.xml</value>
        </property>
    </bean>

 (4).在Ibatis总配置文件中移除关于数据库连接的信息,只需在Ibatis总配置文件中配置实体映射文件即可。

至此,Spring和Ibatis就无缝集成起来,在使用时Spring会读取创建SqlMapClient对象,并为其注入数据源,直接通过spring获得SqlMapClient对象就可以直接使用。

14.   Ibatis优缺点总结:

优势:使用标准的Sql语句,与JDBC相比简单方便,减少了代码量,架构和性能得到增强;与Hibernate等ORM工具相比因为更接近Sql语句,性能可控;sql语句与程序代码分隔,简化了项目分工,大大提高并行开发的可能性。

缺点:还需要写标准的sql语句,不像Hibernate完全屏蔽了底层数据库的差异,程序的可移植性比Hibernate和JPA要差;输入参数和输出参数都只能有一个,程序编写的灵活性不是太高。

时间: 2024-10-14 15:53:58

Ibatis入门基本语法的相关文章

Ibatis入门基本语法(转)

Ibatis入门基本语法 1.       Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate.Toplink等在java编程的对象持久化方面深受开发人员欢迎. 对象关系映射(ORM):简单原理是通过面向对象方式操作关系型数据库,目前存储数据最常用最流行的工具是关系型数据库,其操作方式是通过SQL语句操作数据库的表,但是对于Java面向对象编程语言中,所有的操作对象都是对象,因此对象关系映射就是把数据库表和java编程语言中的对象对应起来,把

iBatis 入门笔记

iBatis简介 iBatis是一个"半自动"的轻量级O/R Mapping框架. O/R Mapping是指对象与数据库之间的映射,而iBatis就是这样一个映射器,映射器的主要作用是在对象和数据库之间搬运数据,同时保证对象.数据库和映射器之间相互独立. 通过O/R Mapping你将不用再面对那一堆令人厌恶的JDBC代码,为一堆打开连接.关闭连接的代码而眼花头昏. 何为"半自动"?    这里的半自动是与Hibernate这样的O/R Mapping方案对比得出

ibatis入门教程一

这几天研究ibatis玩,参考一篇贴子进行安装配置:蓝雪森林 选择这个帖子来跟随配置是因为这个帖子看着比较干净,但是我仍旧在配置得过程中出现了好几个问题,所以我决定在这个帖子的基础上将更多细节加上,做一个傻瓜教程. 一.前期准备 虽然ibatis能处理多种数据库,不过初学者还是比较适应mysql,因此我选择mysql作为我的数据载体.另外我准备建的是一个普通的java 工程,并采用maven命令行来建立这个工程.所以在这之前,电脑上需要安装maven和mysql. 二.工程建立 ①使用maven

&lt;javascript入门&gt;基本语法

<javascript入门>基本语法一.什么是javascript?javascript语言有什么特点?脚本语言的特点?    1.如果说css是给html页面进行化妆装饰以使html页面更加美观漂亮,那么javascript就是对html中DOM树上的节点进行增删改以使html页面实现动态的效果.    2.javascript语言是一种基于面向对象的.弱类型的.平台无关性的.安全性的语言.之所以说javascript基于面向对象是说它不是一种纯粹的面向对象,而是需要面向对象时即面向对象,需

php正则表达式入门-常用语法格式

原文地址:http://www.jbxue.com/article/24467.html 分享下php正则表达式中的一些常用语法格式,用于匹配字母.数字等,个人感觉还不错. 语法格式:位于定界符"/"之间.较为常用的元字符包括: “+”, “*”,以及 “?”.其中, “+”元字符规定其前导字符必须在目标对象中连续出现一次或多次, “*”元字符规定其前导字符必须在目标对象中出现零次或连续多次, 而“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次. /jim{2,6}/<

一个简单的iBatis入门例子

一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import java.util.Date; public class Person { private int id; private String firstName; private String lastName; private double weightInKilograms; private do

Swift轻松入门——基本语法介绍和详细地Demo讲解(利用WebView打开百度、新浪等网页)

本文主要分为两个部分,第一部分介绍Swift的基本语法,第二部分讲解一个利用WebView来打开百度.sina等网页的小demo,如果对swift的语法不感兴趣的同学可以直接跳到第二部分来感受下Swift的魅力-(本文的demo源码已上传至github:https://github.com/iOSGeek0829/XSurfing) 一.Swift常用语法 Swift是Apple去年推出的一门新的语言,基于C和Objective-C,而没有C的一些兼容约束,它采用了安全的编程模式和添加现代的功能

前端入门7-JavaScript语法之相关术语

声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Translation/JavaScript 作为一个前端小白,入门跟着这几个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下. PS:梳理的内容以<JavaScript权威指南>这本书中的内容为主,因此接下去跟 JavaScrip

前端入门12-JavaScript语法之函数

声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Translation/JavaScript 作为一个前端小白,入门跟着这几个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下. PS:梳理的内容以<JavaScript权威指南>这本书中的内容为主,因此接下去跟 JavaScrip