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

<?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. spark运行任务报错:Container [...] is running beyond physical memory limits. Current usage: 3.0 GB of 3 GB physical memory used; 5.0 GB of 6.3 GB virtual memory used. Killing container.

    spark版本:1.6.0 scala版本:2.10 报错日志: Application application_1562341921664_2123 failed 2 times due to AM ...

  2. Servlet 上传图片

    目录 Servlet 上传图片 预备 需求包 pom 前端代码 Servlet 上传图片 预备 需求包 commons-fileupload -用于上传 jstl -用于jsp页面遍历 servlet ...

  3. vue-cli搭建vue开发环境

    前置环境 npm install -g vue-cli vue list 已安装环境后: vue init webpack sell 建立项目名称sell----------------------- ...

  4. JUC 一 CountDownLatch(闭锁)

    java.util.concurrent 介绍 CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待 CountDownLatch cou ...

  5. 听说“辣鸡小隔膜”出V1.3了?

    点击下载zip就送屠龙宝刀升级脚本(Version 1.2) 点击下载zip就送倚天宝剑种子测试器(Version 1.2) 顺便膜一波orz::Kevin

  6. bzoj1293题解

    [题意分析] 给你一条有n个点的数轴,每个点属于一个种类,总共有k个种类.求一段最短的线段,使对于每个种类,这段线段上有至少一个点属于它. [算法分析] 1.对于50%的数据,N≤10000 对于每一 ...

  7. NOIp2018集训test-9-16(联考二day2)

    T1旋转子段 一开始脑袋抽了花了近一个小时写了个跟这题毫无关系的莫名其妙的代码,一急代码就各种bug,最后t1就花了一个半小时多,然后后面时间不太够了,考得稀烂. 因为每个数存在唯一的中心使得绕这个中 ...

  8. Unity UGUI和特效(含粒子系统和3D Object)之间层级问题

    撰写本文时使用Unity的版本为2017.4.10f1(64bit) 1.描述问题 需求:通过UGUI制作一个界面之后,我需要在界面的后面跟前面各添加一个特效. 问题:同一层级UI是最后渲染的,所以U ...

  9. C++之内存分区

  10. opencv-图像形态学之开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    转自:https://blog.csdn.net/poem_qianmo/article/details/24599073 1.1 开运算(Opening Operation) 开运算(Opening ...