`
hn_archer
  • 浏览: 133052 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

iBatis进阶(上)

 
阅读更多

 

小技巧:提示自动补全问题

在写配置文件的时候,我们希望文件会带有提示功能,所以在配置文件上都会引用此文件的定义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);

 

 

分享到:
评论

相关推荐

    mule进阶之ibatis component

    标题 "mule进阶之ibatis component" 指向的是一个关于Mule ESB集成iBatis组件的高级主题。Mule ESB是一个企业级的集成平台,它允许开发者轻松地连接各种系统和应用程序。iBatis则是一个SQL映射框架,它可以将Java...

    iBatis开发指南和一个iBatis实例

    总的来说,这个压缩包为你提供了一个全面的iBatis学习路径,从基础到进阶,从理论到实践。通过深入阅读PDF文档,动手实践代码示例,你将能够熟练地运用iBatis来处理各种数据库操作,提升你的Java开发技能。记得在...

    J2EE核心:iBatis_DAO入门与进阶.doc

    【J2EE核心:iBatis_DAO入门与进阶】 DAO(Data Access Object)模式在J2EE应用中扮演着关键角色,它提供了一种将业务逻辑与数据访问操作解耦的方式。DAO模式的核心思想是创建一个接口,该接口定义了所有与数据源...

    IBatis.NET开发文档

    iBATIS.NET是一款开源的持久层框架,它在.NET平台上为开发者提供了强大的数据访问和SQL映射功能。这个开发文档集合包含了"iBATIS SQL Maps 开发指南"、"iBATIS SQL Maps入门教程"以及"ibatis 开发指南"等资源,旨在...

    iBatis资料 语法

    SqlMaps-2_cn.pdf`、`ibatis 开发指南.pdf`、`iBATIS-SqlMaps-2-Tutorial_cn.pdf`是一系列的iBatis教程和指南,包括英文版和中文版,它们提供了详尽的iBatis学习材料,覆盖了从入门到进阶的所有主题。 总之,这个...

    iBatis简明教程及快速入门

    #### 五、进阶使用 - **动态SQL**:iBatis支持动态SQL,允许在映射文件中根据不同的条件构建复杂的SQL语句。 - **分页查询**:通过自定义SQL语句来实现分页查询功能。 - **缓存机制**:合理使用iBatis提供的缓存...

    ibatis guide

    - **ibatis_developing.pdf**: 可能是关于iBATIS开发指南或进阶教程,可能涵盖了iBATIS的高级特性、最佳实践,甚至源码解析等深入内容。 通过阅读这两个PDF文件,开发者可以深入了解iBATIS的原理和使用技巧,提升...

    iBATIS-SqlMaps-中文教程

    《iBATIS-SqlMaps-中文教程》是一个深入解析iBATIS框架的资源,适合对Java Web开发感兴趣的初学者和进阶者。iBATIS是一个持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java代码的分离,简化...

    ibatis分页

    标题中的“ibatis分页”指的是在使用iBATIS(一个SQL映射框架)时,如何实现数据库查询结果的分页显示。...对于进阶学习者,深入源码分析将帮助理解iBATIS的内部工作流程,从而更好地进行定制和优化。

    iBATIS-SqlMaps中文教程集合

    2. **进阶篇** - 动态SQL:讲解iBATIS的动态SQL功能,如if、choose、where、trim等标签,实现灵活的SQL构建。 - ResultMap与AutoMapping:探讨ResultMap如何映射复杂的结果集,以及自动映射机制的使用。 - ...

    iBatis入门(三)

    对于进阶用户,了解iBatis的源码有助于更好地理解和优化应用程序。源码中包含了很多关键组件,如`Executor`执行器、`StatementHandler`语句处理器、`ParameterHandler`参数处理器等。通过对这些组件的工作原理的理解...

    ibatis-2-mybatis-2.3.5.zip

    六、进阶话题 1. 映射器工厂:理解SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession之间的关系,以及如何通过它们创建和管理映射器。 2. 异常处理:了解iBatis的异常体系,如SqlMapClientException、...

    iBATIS-SqlMaps-2-Tutorial_cn

    总的来说,《iBATIS-SqlMaps-2-Tutorial_cn》是一本全面覆盖iBATIS基础和进阶内容的教程,它不仅适合初学者入门,也对有一定经验的开发者有很好的参考价值。通过阅读本书,你可以深入理解iBATIS的工作原理,掌握其...

    ibatis基础项目

    【Ibatis基础项目】是一个旨在帮助开发者熟悉IBM开源的轻量级持久层框架Ibatis的实践项目。这个项目的核心目标是让开发者了解...同时,这也为后续深入学习Spring与Ibatis的整合、MyBatis-Plus等进阶话题打下坚实基础。

    Ibatis的相关指南

    - "J2EE核心:iBatis DAO入门与进阶二中国IT实验室.mht":可能包含Ibatis在J2EE环境中的高级用法和最佳实践。 - "ibatis开发人员指南.mht"、"ibatis开发人员指南2.mht"、"ibatis开发人员指南3.mht":这些指南可能...

    iBATIS实战

    第11章 DAO使用进阶 194 11.1 不是基于SQLMap的DAO实现 194 11.1.1 Hibernate版本的DAO实现 194 11.1.2 JDBC版本的DAO实现 199 11.2 为其他数据源使用DAO模式 203 11.2.1 示例:为LDAP使用DAO 203 11.2.2 示例:为...

    ibatis tutorial

    ## 六、iBATIS进阶 1. **ResultHandler**:自定义结果处理,可以对结果集进行更复杂的处理。 2. **ParameterHandler**:自定义参数处理,处理复杂类型的参数绑定。 3. **TypeHandler**:用于Java类型与数据库类型...

    ibatis入门教程_ibatis入门教程_源码

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得...通过学习这个Ibatis入门教程,你可以了解并掌握如何在Java应用中使用Ibatis进行数据操作,为后续的进阶学习和项目开发打下坚实的基础。

    jsp+struct+hibernate+ibatis资源集锦珍藏

    进阶学习者则可以通过示例项目和实战案例,提升在实际开发中的应用能力。 总之,掌握JSP、Struts、Hibernate和iBatis这四大技术,将有助于你构建高质量、高性能的Java Web应用。这份资源集锦对于个人学习或团队开发...

    ibatis.rar学习手册

    10. **进阶内容**:可能涵盖MyBatis(iBatis的升级版)的特性,以及如何使用插件扩展iBatis功能。 通过深入学习这个“ibatis.rar”压缩包中的资料,你可以从零开始,逐步成长为一个熟练的iBatis使用者,从而在项目...

Global site tag (gtag.js) - Google Analytics