`
liulanghan110
  • 浏览: 1064213 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

SQL Map XML 映射文件

阅读更多

一个 SQL Map XML 映射文件可以包含任意多个 Mapped Statement, Parameter Map Result Map. 按照它们之间的逻辑关系 , 为您的应用合理地组织 Mapped Statement, Parameter Map Result Map.

typeAlias 节点

 

    <typeAlias> 节点让您为一个通常较长的、全限定类名指定一个较短的别名 .

    <typeAlias alias=”shortname”  type=”com.long.class.path.Class”/>

  例如:

<typeAlias alias="user" type="com.ibatis.db.User"/>

 

Mapped Statements

SQL Map 的核心概念是 Mapped Statement. Mapped Statement 可以使用任意的 SQL 语句 , 并拥有 Parameter Map( 输入 ) Result Map( 输出 ). 如果是简单情况 , Mapped Statement 可以使用 JAVA 类来作为 Parameter Result. Mapped Statement 也可以使用缓存模型 , 在内存中缓存常用的数据 . Mapped Statement 的结构如下所示 :

<statement id =”statementName”

     [parameterClass=”some.class.Name”]

     [resultclass=”some.class.Name”]

     [parameterMap=”nameOfParameterMap”]

     [resultMap=”nameOfResultMap”]

     [cacheModel=”nameOfCache”]  >

  Select * from t_user where id =[?|#propertyName#]

  order by [$simpleDynamic$]

</statement>

在上面的表达式中 , 括号 [] 里的部分是可选的属性 , 并具在某些情况下只有特定的组合才是合法的 .

 

 

1)Statements节点
<statement> 节点是个通用声明,可以用于任何类型的 SQL 语句。通常,使用具体的 statement 类型是个好主意。具体 statement 类型提供了更直观的 XML DTD ,并拥有某些<statement>节点没有的特性.下表总结了statement类型及其属性和特性:

 

 

Statement 类型

属性

子元素

方法

<statement>

 

id parameterClass resultClass parameterMap resultMap cacheModel xmlResultName

 

所有的动态元素

 

insert update delete 所有的查询方法

 

<insert>

 

id parameterClass parameterMap

 

所有的动态元素 <selectKey>

 

insert

update

  delete

 

<update>

 

id

parameterClass parameterMap

 

所有的动态元素

 

Insert

Update

delete

 

<delete>

 

id parameterClass resultClass parameterMap resultMap cacheModel

 

所有的动态元素

 

所有的查询方法

 

<select>

 

id parameterClass resultClass parameterMap resultMap cacheModel

 

所有的动态元素

 

所有的查询方法

 

<procedure>

 

id parameterClass resultClass parameterMap resultMap xmlResultName

 

所有的动态元素

 

insert update delete 所有的查询方法

 

 

 

2)Sql 语句

SQL 显然是 Mapped Statement 中最重要的部分 , 可以使用对于数据库和 JDBC DRIVER 合法的任意 SQL 语句 . 只要在 JDBC DRIVER 支持 , 可能使用任意的函数 , 甚至是多条语句 . 因为 SQL 语句是嵌在 XML 文档中的 , 因此有些特殊的字符不能直接使用 , 例如大于号和小于号 (<>). 幸运的是 , 解决的办法很简单 , 只需将包含特殊字符的 SQL 语句放在 XML CDATA 区里面就可以了 . 例如 :

 

<statement id = "getUserArrayById" parameterClass="int"
 
       resultClass="user">
 
     <![CDATA[

        SELECT * FROM T_USER WHERE id > #value#
 
        group by id

      ]]>

</statement>

 

DAO

 

实现如下:

 public List<User> findUserArrayById (Integer userId) throws Exception {
        init();
        List<User> list = sqlMap.queryForList("getUserArrayById", userId);
        return list;
     }

 

3) 自动生成主键

很多数据库支持自动生成主键的数据类型 . 不地这通常 ( 并不总是 ) 是个私有的特性 .SQL MAP 通过 <insert> 的子节点 <selectKey> 来支持自动生成的键值 . 它同时支持预生成 ( Oracle ) 和后生成两种类型 ( MS-SQL server, My sql ). 下面是几个例子 .

 

要实现自动生成主键有两个部分的内容:

  1.  建表时,将 id 定义为主键并且加上 auto_increment” 设置为自动增加 .

例如 :

create table ibatis_db.t_user(id int(6)  

PRIMARY KEY auto_increment   not null,

name varchar(15) not null, sex int(1) not null);

  2   User.xml 文件中

<insert id="insertUser" parameterClass="user">
             INSERT INTO t_user(id,name,sex) VALUES(#id#,#name#,#sex#)
</insert>

 修改为:

 

<!-- Oracle SEQUENCE  -->   
<insert id="insertUser-ORACLE" parameterClass="user">    
<selectKey resultClass="int" keyProperty="id" type="pre">    
<![CDATA[
SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
]]>  
</selectKey> 
<![CDATA[
INSERT INTO t_user(id,name,sex)VALUES(#id#,#name#,#sex#)
]]>
</insert> 

 

4) 存储过程

   SQL MAP 通过 <procedure> 节点支持存储过程 . 下面的例子说明如何使用具有输出参数的存储过程 .

<parameterMap id="swapParameters" 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>
<procedure id="swapEmailAddresses" parameterMap="swapParameters">
    {call swap_email_address(?,?)}
 </procedure>

 

5)<statement> 的子节点的属性

1.parameterClass

 

<statement id="statementName" parameterClass="user">
       INSERT INTO t_user VALUES(#id#,#name#,#sex#)
</statement>
 

2.parameterMap

 <parameterMap id ="insert-user-param" class="user">
     <parameter property="id" />
    <parameter property="name" />
    <parameter property="sex" />
 </parameterMap>

 <statement id = "insertUser" parameterMap="insert-user-param">
      INSERT   INTO   T_USER   (id,name, sex) VALUES   (?,?,?)
</statement>
 

3.resultClass

 

<statement id="getUser" parameterClass="String" resultClass="user">
    SELECT id,
         name,
        sex         
        FROM t_user
         WHERE name =#value#
</statement>

 4.resultMap

 

 

<resultMap id="get-user-result" class="user">
      <result  property="id" column="id"/>
      <result property="name"  column="name"/>
      <result property="sex"  column="sex"/>
  </resultMap>
 <statement  id ="getUserList" resultMap="get-user-result">
     select * from t_user
</statement>

 

5.cacheModel

  cacheModel 的属性值等于指定的 cacheModel 元素的 name 属性值 . 属性 cacheModel 定义查询 mapped statement 的缓存 . 每一个查询 mapped statement 可以使用不同或相同的

 

<cacheModel id="user-cache" type="LRU"> 
     <flushInterval hours="24"/> 
      <flushOnExecute statement="insertUser"/> 
      <flushOnExecute statement="updateUser"/> 
    <flushOnExecute statement="deleteUser"/> 
      <property name="size" value="1000"/>
  </cacheModel>
 <statement id ="getUserList"  cacheModel="user-cache">
       SELECT * FROM t_user 
</statement>

 

上面的例子中 , 24 小时刷新一次 , 或当更新的操作发生时刷新 .

 

6.xmlResultName

当直接把查询结果映射成 XML document , 属性 xmlReesultName 的值等于 XML document 根节点的名称 . 例如 :

 

<select  id="getUserById" parameterClass="int" resultClass="xml" xmlResultName="user">
    SELECT id ,
    name ,
    sex 
    FROM t_user
    WHERE id =#value#
</select>

 调用如下 :

 

  String str = (String) sqlMap.queryForObject("getUserById", id);

上面的查询结果将产生一个 XML document, 结构如下 :

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?><user><id>1</id><name>user001</name><sex>0</sex></user>
 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    iBatis SQL Maps开发指南.pdf

    SQL Map XML映射文件 Mapped Statements Statement的类型 SQL 语句 自动生成的主键 存储过程 parameterClass parameterMap Inline Parameter简介 resultClass resultMap cacheModel xmlResultName Parameter Map 和 ...

    iBATIS 帮助文档

    SQL Map XML映射文件..............................................................................................................17 Mapped Statements......................................................

    iBATIS SQL Maps 开发指南 Version 2.0

    SQL Map使用简单的XML配置文件将Java Bean映射成SQL语句,对比其他的数据库持续层和ORM框架(如JDO的实现,Hibernate等),SQL Map最大的优点在于它简单易学。要使用SQL Map,只要熟悉Java Bean,XML和SQL,就能使您...

    iBATIS SQL Maps 开发指南

    SQL Map使用简单的XML配置文件将Java Bean映射成SQL语句,对比其他的数据库持续层和ORM框架(如JDO的实现,Hibernate等),SQL Map最大的优点在于它简单易学。要使用SQL Map,只要熟悉Java Bean,XML和SQL,就能使您...

    iBATIS介绍入门

    iBATIS是以SQL为中心的持久化层...iBATIS能将输入的普通POJO对象、Map、XML等映射到SQL的条件参数上,同时也可以将查询结果映射到普通POJO对象(集合)、Map、XML等上面。 iBATIS使用xml文件来映射这些输入以及输出。

    iBATIS_SQL_Maps_V2.0开发指南_ibatis_

    SQL Map 使用简单的 XML 配置文件将 Java Bean 映射成 SQL 语句,对比其他的数据库持续层和 ORM 框架(如 JDO 的实现, Hibernate 等), SQL Map 最大的优点在于它简单易学。要使用 SQL Map,只要熟悉Java Bean, ...

    iBATIS-SqlMaps-2_cn.rar

    SQL Map使用简单的XML配置文件将Java Bean映射成SQL语句,对比其他的数据库持续层和ORM框架(如JDO的实现,Hibernate等),SQL Map最大的优点在于它简单易学。要使用SQL Map,只要熟悉Java Bean,XML和SQL,就能使您...

    map-engine:Map Engine是一种在运行时将XML文档映射到域对象的引擎

    地图引擎映射引擎是一种在运行时将XML文档映射到域对象的引擎。 我已经为设计和开发了该引擎,该引擎需要处理服务提供商提供的许多XML文档。 编写代码以将这些XML文档转换为域对象是一项令人烦恼且容易出错的任务,...

    mybatis动态sql.doc

    MyBatis 动态 SQL 是一种在 MyBatis 映射文件中使用条件语句来生成动态 SQL 语句的技术。它可以根据不同的条件生成不同的 SQL 语句,从而实现灵活的查询和操作。 在 MyBatis 中,可以使用 `&lt;if&gt;`、`&lt;choose&gt;`、`...

    iBATIS.rar

    SQL Map使用简单的XML配置文件将Java Bean映射成SQL语句,对比其他的数据库持续层和ORM框架(如JDO的实现,Hibernate等),SQL Map最大的优点在于它简单易学。要使用SQL Map,只要熟悉Java Bean,XML和SQL,就能使您...

    ibatis开发指南(中文版)

    SQL Map使用简单的XML配置文件将Java Bean映射成SQL语句,对比其他的数据库持续层和ORM框架(如JDO的实现,Hibernate等),SQL Map最大的优点在于它简单易学。要使用SQL Map,只要熟悉Java Bean,XML和SQL,就能使您...

    ibatis完整学习资料(含最新jar)

    SQL Map使用简单的XML配置文件将Java Bean映射成SQL语句,对比其他的数据库持续层和ORM框架(如JDO的实现,Hibernate等),SQL Map最大的优点在于它简单易学。要使用SQL Map,只要熟悉Java Bean,XML和SQL,就能使您...

    ibatis 开发指南

    SQL Map使用简单的XML配置文件将Java Bean映射成SQL语句,对比其他的数据库持续层和ORM框架(如JDO的实现,Hibernate等),SQL Map最大的优点在于它简单易学。要使用SQL Map,只要熟悉Java Bean,XML和SQL,就能使您...

    基于SpringBoot和Uniapp的Java商城与Vue后台管理系统设计源码

    本Java商城与Vue后台管理系统基于SpringBoot和Uniapp开发,包含902个文件,包括Java源代码、JavaScript脚本、PNG图片、JPG图片、Vue组件、XML配置文件、SVG图形、JSON配置文件、MAP映射文件、WXSS样式表。...

    基于SSM框架的Java CRUD操作示例源码

    - Map映射文件:4个,用于MyBatis的SQL映射; - JavaScript脚本:4个,实现了页面的动态交互; - JSP页面:3个,构成了用户界面; - Markdown文件:1个,可能包含项目说明或使用指南; - SQL脚本:1个,用于初始化...

    iBATIS实战

    本书是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发...A.2.4 SQL映射文件 267 A.3 到哪里去查找更多的信息 269

    mybatis3 中文文档 CHM格式

    MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 从之前发布其他chm文件下载用户的反映看,有不少朋友反映下载后打开...

    ASP EXCEL导入SQL

     REST软件架构之所以是一个超媒体系统,是因为它可以把网络上所有资源进行唯一的定位,不管你的文件是图片、文件Word还是视频文件,也不管你的文件是txt文件格式、xml文件格式还是其它文本文件格式。它利用支持HTTP...

Global site tag (gtag.js) - Google Analytics