首先给出一个常见的映射文件局部模板

<?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="dwSysParam">
    // typeAlias 顾名思义别名,后面用的时候不需要写这么长的全名了       
     <typeAlias alias="dwSysParam" type="com.geostar.geosmarter.dwms.secondaryDev.core.entity.DwSysParam" />
     <typeAlias alias="dwSummaryInfo" type="com.geostar.geosmarter.dwms.core.entity.DwSummaryInfo" />
//一个查询语句,parameterClass是参数类型,不是参数,resultClass是返回类型也不是指返回值
     <select id="queryList" resultClass="dwSysParam" parameterClass="java.util.Map">
          SELECT sysId,sysName,sysAlias,paramValue,createTime FROM dw_sys_param 
          <dynamic prepend=" WHERE ">//简单的理解为append就行了,而且能自动去掉第一个prepend的值,否则sql肯定是不对的
               <isNotNull prepend=" AND " property="sysId">sysId=#sysId#</isNotNull>
               <isNotNull prepend=" AND " property="sysName">sysName=#sysName#</isNotNull>
               <isNotNull prepend=" AND " property="sysAlias">sysAlias=#sysAlias#</isNotNull>
               <isNotNull prepend=" AND " property="paramValue">sysId=#paramValue#</isNotNull>
               <!-- <isNotNull prepend=" AND " property="createTime">createTime=#createTime#</isNotNull> -->
          </dynamic>
     </select>

     <select id="queryBySysName" resultClass="String" parameterClass="String">
          SELECT paramValue FROM dw_sys_param WHERE sysName = #sysName# 
     </select>

//插入语句当插入的id的数据库自增的时候用 selectKey ,而且注意oracle和mysql自增的时间不同,oracle是先有产生id再插入

     <insert id="insert" parameterClass="dwSysParam">
          INSERT INTO dw_sys_param VALUES(#sysId#,#sysName#,#sysAlias#,#paramValue#,#createTime#)
          <selectKey resultClass="java.lang.String" keyProperty="sysId">
           SELECT LAST_INSERT_ID() AS sysId
          </selectKey>
     </insert>
 //关于时间这个字段,数据库和java的对应关系,一般数据库是datetime类型,java就用java.sql.Timestamp对应吧,其他的可以自己查
 <update id="update" parameterClass="dwSysParam">
      UPDATE dw_sys_param
          <dynamic prepend="SET">
               <isNotEmpty property="sysName" prepend=",">sysName = #sysName#</isNotEmpty>
               <isNotEmpty property="paramValue" prepend=",">paramValue = #paramValue#</isNotEmpty>
               <isNotEmpty property="createTime" prepend=",">createTime = #createTime:TIMESTAMP#</isNotEmpty>
          </dynamic>
          <dynamic prepend="WHERE">
               <isNotEmpty property="sysAlias">sysAlias = #sysAlias#</isNotEmpty>
          </dynamic>
 </update>
 <update id="update_dwSummaryInfo" parameterClass="java.util.Map">
  UPDATE dw_summary_info
  <dynamic prepend="SET">
   <isNotEmpty property="keyValue" prepend=",">keyValue = #keyValue#</isNotEmpty>
   <isNotEmpty property="updateTime" prepend=",">updateTime = #updateTime#</isNotEmpty>
  </dynamic>
  <dynamic prepend="WHERE">
   <isNotEmpty property="keyName">keyName = #keyName#</isNotEmpty>
  </dynamic>
 </update>
 <delete id="delete" parameterClass="dwSysParam">
  DELETE FROM dw_sys_param WHERE sysId = #sysId#
 </delete>
</sqlMap>

id:顾名思义,一个标识,在java的daoImpl调用时,作为参数,告诉后台调用哪个元素节点下的sql

#与$区别说通俗一点就是

$中间的变量就是直接替换成值的,类似于append,直接拼接字符串

#会根据变量的类型来进行替换,用于变量的替换,类似preparedStatement的setXX方法

这是一个最基本功能的xml映射文件,不涉及到批量插入操作,不涉及到存储过程的执行,关于存储过程,单独开一篇文章记录

下面给出dao层调用这个映射文件增删改查方法的例子
首先编写一个继承了SqlMapClientDaoSupport的类
public class SuperDAO extends SqlMapClientDaoSupport{

@Resource(name="sqlMapClient")
      private SqlMapClient sqlMapClient;

public SqlMapClient getSqlMapClient (){
        return this.sqlMapClient;
      }

@PostConstruct
      public void initSqlMapClient(){
        super.setSqlMapClient(this.sqlMapClient);
      }
}
web启动时,会自动执行  @PostConstruct下的initSqlMapClient这个方法 ,该方法调用SqlMapClientDaoSupport的setSqlMapClient
这个方法,将 sqlMapClient初始化
在daoImpl层,首先获取一个sqlMapClient
SqlMapClient sqlMapClient = getSqlMapClient (); 
现在我想调用namespace为dwSysParam下的id为queryList的这个节点的查询,直接用queryForList这个方法,参数如下
sqlMapClient.queryForList("dwSysParam.queryList", queryMap); 
可以看到返回的resultClass为dwSysParam,这个方法返回的是dwSysParam引用类型的一个List<DwSysParam>结果

更多的参数玩法可以继续研究下,不再细究

第十三篇:一点一滴学ibatis(二)映射文件的更多相关文章

  1. Java IDE 编辑器 --- IntelliJ IDEA 进阶篇 生成 hibernate 实体与映射文件

    原文:转:Java IDE 编辑器 --- IntelliJ IDEA 进阶篇 生成 hibernate 实体与映射文件 2011-04-30 12:50 很多人不知道怎么用 IntelliJ IDE ...

  2. 第十一篇:一点一滴学ibatis(一)

    一.常见ORM框架1.原生的JDBC.自己写的JDBC,基本上就只够程序跑起来,缺陷和漏洞一堆堆.回顾下jdbc的几个操作,加载驱动,建立连接,预处理语句,执行,结果集遍历.这个过程中,因为连接Con ...

  3. Hibernate第三篇【主配置文件、映射文件、复合主键映射】

    前言 目前已经学了如何搭建Hibernate的开发环境,以及Hibernate对应的API了-在快速入门还没讲解的就是配置文件是怎么配置的.因此,本博文主要讲解主配置文件以及映射配置文件.. 主配置文 ...

  4. 第二十三篇、IO多路复用 二

    基于IO多路复用实现socket的连接 下面流程:1.先创建列表,让自己的socket对象传入,然后遍历select第一个参数2.客户端连接,那么客户端socket就传入到了列表里面,3.遍历,接收客 ...

  5. 咱就入个门之NHibernate映射文件配置(二)

    上一篇主要介绍了NHibernate映射文件的基础配置,这篇我们介绍下NHibernate的一对多及多对一配置(文中我直接使用双向关联,即一和多两端都配置,开发中可以只使用一端),同时略带介绍下NHi ...

  6. MyBatis 映射文件详解(六)

    MyBatis 配置文件类型 MyBatis配置文件有两种类型,如下: 全局配置文件(如 mybatis-config.xml) Mapper XML 映射文件(如 UserMapper.xml) 上 ...

  7. Python开发【第十三篇】:jQuery(二)

    http://www.bubuko.com/infodetail-1438296.html 处理完毕需要整理贴进来 Python之路[第十三篇]jQuery案例-Form表单&插件及扩展   ...

  8. (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...

  9. 跟我学SpringCloud | 第十三篇:Spring Cloud Gateway服务化和过滤器

    SpringCloud系列教程 | 第十三篇:Spring Cloud Gateway服务化和过滤器 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich. ...

随机推荐

  1. 22. 异常(Eception)

    1. 现实生活的病 现实生活中万物在发展和变化会出现各种各样不正常的现象. 1)例如:人的成长过程中会生病. |——病 |——不可治愈(癌症晚期) |——可治愈 |——小病自行解决(上火,牙痛) |— ...

  2. AbstractQueuedSynchronizer 详解

    package java.util.concurrent.locks; 基本介绍 AbstractQueuedSynchronizer(队列同步器)可以看作是并发包(java.util.concurr ...

  3. 2、go 运行操作

    1)有且只有一个函数入口,main liteIDE,直接图形界面编译,一个文件夹里的只能有一个main函数 或者 go build XXX.go 编译go代码,生成一个可执行程序 然后运行可执行程序 ...

  4. Grafana + Influxdb Android性能监控部署

    目录 前言 一.前提准备 二.安装 Grafana 三.安装 Influxdb 四.Grafana 添加 Influxdb 数据源 五.Shell 脚本写入数据到 Influxdb 前言 你是否为了数 ...

  5. 异或空间求基(模板)——hdu3949

    输出样例有点问题的.. #include<bits/stdc++.h> using namespace std; #define ll unsigned long long #define ...

  6. DELPHI 异形窗体

    一定有很多人看到过一些奇形怪状的窗体,例如一些屏幕精灵.其实实现起来非常容易,做到三点就好啦.下面我使用Delphi做了一个VCL控件(TBmpShape),你只需要指定一幅图片就可以将窗体变成你的图 ...

  7. NX二次开发-获取面的法向向量UF_MODL_ask_face_data

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> #include <uf_obj.h> #include <u ...

  8. [NOI.AC] candy

    题意:求净利益. 思路: 其实我也不怎么懂题面. 不过这种题一般来说就是从最大的开始选. 所以考虑贪心. 那么代价如何处理呢?? 我们考虑两个序列同时选数,把代价每次记录到一个序列的和上,那么对于两次 ...

  9. 微信-小程序-开发文档-服务端-模板消息:templateMessage.deleteTemplate

    ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.deleteTemplate 1.返回顶部 1. templateMessage.deleteTemplate ...

  10. [17]APUE:线程

    通常情况下,线程模型的并发性能优于进程模型,但不总是这样 线程的优势: 线程的创建.销毁及上下文切换代价比进程低 某些情况下,使用线程可以简化逻辑,避免异步编程的复杂性 同一进程内所有线程共享全局内存 ...