`
suntao19830709
  • 浏览: 4377 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类

ibatis高级应用

阅读更多
在iBatis的快速入门文章里已经有了简单例子,在这里,只对高级应用说明!
iBatis官方站点:http://ibatis.apache.org/
小技巧:提示自动补全问题
在写配置文件的时候,我们希望文件会带有提示功能,所以在配置文件上都会引用此文件的定义DTD,例:
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"

    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"

    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

可是,在没有上网的情况下,无法得到提示,因为找不到DTD文件,我们可以有两种方式解决这个问题:
a:直接把上面两个地址复制到浏览器上,可以下载这两个DTD文件。

b:在iBatis.jar的com.ibatis.sqlmap.engine.builder.xml这个包里面找到DTD文件。

然后,我们只需要把DTD文件的路径指定上即可:

我把他放到了与类文件同一目录下,所以路径为

<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"

    "./sql-map-config-2.dtd">
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"

    "./sql-map-2.dtd">

创建例子数据库:
create table user_account
(
userid int,
username varchar2(10),
userpwd varchar2(10),
groupname varchar2(10)
);
insert into user_account values(1,'JACK','BEIJING','NBA');
insert into user_account values(2,'TOM','SHANGHAI','NBA');
insert into user_account values(3,'MARY','SHANGHAI','IBM');
返回是POJO类或hashmap是类似的!

一:#与$的区别
我们在用到模糊查询的时候,如果写成
<select id="select1" parameterClass="java.lang.String" resultClass="a.Account">
    select * from user_account where username like '%#username#%'
</select>
这样是错误的,我们要写成
<select id="select1" parameterClass="java.lang.String" resultClass="a.Account">
    select * from user_account where username like '%$username$%'
</select>
二:resultMap
    <!--   显示映射->实体类 -->
    <resultMap id="accoutResult" class="com.air.Account">
       <result property="userid" column="USERID" />
       <result property="username" column="USERNAME" />
       <result property="userpwd" column="USERPWD" />
       <result property="groupname" column="GROUPNAME" />
    </resultMap>
    <select id="getAllUsers4" resultMap="accoutResult"
       parameterClass="string">
       SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName#
    </select>
三:返回XML
       <!--   XML -->
    <select id="selectXML" parameterClass="string" resultClass="xml"
       xmlResultName="log">
       SELECT * FROM USER_ACCOUNT WHERE GROUPNAME=#groupName#
    </select>
    四:paramterMap
    <!--   外联参数映射 -->
    <parameterMap id="parameterMapEx" class="com.air.Account">
       <parameter property="username" jdbcType="VARCHAR"/>
       <parameter property="password" jdbcType="VARCHAR"/>
       <parameter property="groupname" jdbcType="VARCHAR"/>
    </parameterMap>
    <insert id="insertOneUser3" parameterMap="parameterMapEx">
       INSERT INTO USER_ACCOUNT
       (
           USERNAME, PASSWORD, GROUPNAME
       )VALUES(
           ?,?,?
       )
    </insert>
五:自动生成主键
     <insert id="insertOneUser4" parameterClass="a.Account" >
        <selectKey resultClass="int" keyProperty="id" >
           SELECT Sys_Public_Sequence.NEXTVAL AS id FROM DUAL
        </selectKey>
        INSERT INTO USER_ACCOUNT
              (
                  USERID, USERNAME, PASSWORD, GROUPNAME
              )VALUES(
                  #id#,#username#,#userpwd#,#groupname#
              )
    </insert>
六:调用存储过程
Map m=new HashMap();       
m.put("name", new String("LISI"));
sqlMapClient.update("pro_insert",m);
System.out.println("call procedure ok!");
    <!--   存储过程 -->   
    <parameterMap id="pro" class="java.util.Map">
       <parameter property="name" jdbcType="VARCHAR"
            javaType="string" mode="IN"/>
    </parameterMap>
    <procedure id="pro_insert" parameterMap="pro">
       {call new_proc(?)}
    </procedure>
七:批处理
           //批处理
           Account c1=new Account();
           c1.setUsername("ZHOUQI");
           c1.setUserpwd("QINGDAO");
           c1.setGroupname("CN");
           Account c2=new Account();
           c2.setUsername("WANGWU");
           c2.setUserpwd("NANJING");
           c2.setGroupname("CN");
           sqlMapClient.startBatch();
           sqlMapClient.insert("insertOneUser3",c1);
           sqlMapClient.insert("insertOneUser3",c2);
           sqlMapClient.executeBatch();
八:RowHandler
当我们需要对查询后的结果进行加工的时候,我们可以在用到这个RowHandler。它类似一个过滤器,在结果返回前进行加工。
比如说,我们想把查询结果组成一整个XML文件,这里为什么要说“一整个”呢?因为如果把resultClass指定为xml的时候,也可以返回XML文件,只不过这个时候是把每一条记录转换成了一个XML文件,这样就产生了多个XML文件,而在这个例子中,我们得到的XML文件是唯一的:
1:先定义一个实现了RowHandler接口的类XmlRowHandler
public class XmlRowHandler implements RowHandler {
    public StringBuffer xmlDocument=new StringBuffer("<AccountList>");
    public void handleRow(Object o) {
      // TODO Auto-generated method stub
      Account acc=(Account)o;
    xmlDocument.append("<account>");
       xmlDocument.append("<accountID>");
       xmlDocument.append(acc.getUserid());
       xmlDocument.append("</accountID>");
xmlDocument.append("<username>");
       xmlDocument.append(acc.getUsername());
       xmlDocument.append("</username>");
       xmlDocument.append("<password>");
       xmlDocument.append(acc.getPassword());
       xmlDocument.append("</password>");
      xmlDocument.append("<groupname>");
       xmlDocument.append(acc.getGroupname());
       xmlDocument.append("</groupname>");   
      xmlDocument.append("</account>");
    }
    public String getXmlDocument() {
     xmlDocument.append("</AccountList>");
     return xmlDocument.toString();
    }}
2:用queryWithRowHandler调用查询语句,把XmlRowHandler类的一个实例做为参数传过去,这样,查询的结果就会到XmlRowHandler中去处理!
        //RowHandle生产XML
       XmlRowHandler rh=new XmlRowHandler();
       sqlMap.queryWithRowHandler("getAllUsers1", "CN", rh);
       String xmlDoc=rh.getXmlDocument();    
       System.out.println(xmlDoc);
分享到:
评论

相关推荐

    ibatis高级特性

    ### ibatis高级特性详解 #### 一、引言 Ibatis 是一款优秀的持久层框架,它简化了 Java 开发者与数据库之间的交互过程。本文将详细介绍 ibatis 的一些高级特性,包括数据关联、延迟加载、动态映射以及事务管理等...

    ibatis3应用实例(oracle数据库)

    其强大的数据管理能力、丰富的数据类型和高级的SQL特性,为开发者提供了广阔的应用空间。 三、Ibatis3与Oracle的结合 1. 数据源配置:在Ibatis3中,我们需要配置Oracle的JDBC驱动,并指定数据库连接信息,如URL、...

    ibatis在web工程中的应用笔记

    标题 "ibatis在web工程中的应用笔记" 涉及的主要知识点是MyBatis(原名iBatis)在Web应用程序开发中的使用。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。下面将详细阐述MyBatis的基本...

    ajax和ibatis的综合应用例子

    Ajax主要用于提升Web应用的用户体验,通过异步数据交换减少页面刷新,而iBatis则是一个优秀的持久层框架,简化了数据库操作。接下来,我们将深入探讨这两个技术的结合及其应用场景。 **Ajax** 是一种在不重新加载...

    ibatis入门实例(全代码)

    通过数据库准备、SQL Map 编写和 Java 代码集成,我们可以轻松地进行数据库操作,这对于初学者理解 Ibatis 的工作原理及其在实际项目中的应用非常有帮助。同时,这个实例也鼓励学习者进一步探索 Ibatis 的高级特性,...

    ibatis开发指南 经典教材

    《ibatis开发指南》经典教材深入讲解了ibatis框架的核心概念和高级应用,为开发者提供了全面的指导。ibatis,作为一款“半自动化”的对象关系映射(Object-Relational Mapping,简称ORM)工具,其设计理念与传统的...

    iBATIS实战.pdf

    书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。《iBATIS实战》的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该...

    IBATIS_IN_ACTION

    《IBATIS_IN_ACTION》是一本深度探讨iBATIS框架应用与实践的专业书籍,由Clinton Begin、Brandon Goodin和Larry Meadors共同编写。本书详细介绍了iBATIS这一流行开源框架的核心概念、工作原理以及在实际项目中的应用...

    Ibatis

    Ibatis 实战应用** 5.1 DAO 层设计:基于 Ibatis,开发者可以创建自定义的 DAO 接口,接口方法对应 SQL 映射文件中的 SQL 语句,实现业务逻辑的解耦。 5.2 事务管理:Ibatis 提供了事务控制接口 SqlSession,可以...

    ibatis

    标签 "教程" 指出这是一个学习资源,可能是书籍或在线课程,旨在帮助开发者掌握iBATIS的基本用法和高级技巧。 压缩包中的文件名揭示了更具体的学习内容: 1. **spring-reference_cn.pdf**:这可能是Spring框架的...

    iBatis开发指南和一个iBatis实例

    "spring+iBatis处理1对多数据表实例"展示了如何将iBatis与Spring框架集成,实现更高级的数据操作。Spring的依赖注入可以简化iBatis的配置,而Spring的事务管理则能确保数据的一致性。1对多关系的处理通常涉及到集合...

    ibatis基础知识详解

    Ibatis,全称MyBatis,是一个优秀的开源持久层框架,它支持定制化SQL、存储过程以及高级映射。在Java应用中,Ibatis可以帮助开发者将数据库操作与业务逻辑分离,从而简化开发工作,提高代码可读性和可维护性。 ## 1...

    ibatis api 帮助文档+IBATIS 开发文档

    `iBATIS SQL Maps开发指南.pdf`是一份详细的开发者手册,涵盖了从入门到高级的全部内容,以下是其中的重点部分: 1. **SQL映射文件**:每个XML文件代表一个数据库表或视图,包含多个SQL语句。这些语句可以是静态的...

    iBatis文档\ibatis.doc

    本文档将详细讲解iBatis的核心概念、快速入门以及高级特性。 ### iBatis 快速启动 #### 准备工作 在开始使用iBatis之前,确保你已经安装了Java运行环境,并配置了相应的JDBC驱动,这将使iBatis能够与数据库进行...

    经典开源插件之ibatis

    - **性能敏感的应用**:在某些高性能要求的应用场景下,ibatis的高效性得到了很好的体现。 通过上述知识点的介绍,我们可以看到ibatis作为一款经典的开源插件,在数据库操作方面具有独特的优势,尤其是在那些需要...

    ibatisDemo.zip

    Ibatis的核心思想是将SQL语句与Java代码分离,通过XML配置文件或注解方式来定义SQL、存储过程以及高级映射,极大地提高了开发效率。 在这个"ibatisDemo.zip"压缩包中,我们可能找到了一系列关于快速入门Ibatis的...

    iBatis.rar 开发文档

    iBatis 是一款著名的开源Java持久层框架,它允许开发者将SQL...在实际开发中,iBatis不仅可以应用于Web应用,还可以在微服务、大数据等领域发挥重要作用。因此,深入理解并掌握iBatis是每个Java开发者的必备技能之一。

Global site tag (gtag.js) - Google Analytics