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

<?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. 区别 |python |[-1]、[:-1]、[::-1]、[2::-1]的使用

    格式 list[start :end :方向] start——>开始下标位置 end——>结束下标位置 方向——> 读取方向.默认正向,-1表示反方向读取 如: import num ...

  2. 牛客多校第九场 B Quadratic equation 模平方根

    题意: 已知 $x+y$ $mod$ $q = b$ $x*y$ $mod$ $q = c$ 已知b和c,求x和y 题解: 容易想到$b^2-4c=x^2-2xy+y^2=(x-y)^2$ 那么开个根 ...

  3. python round, ceil, flooor

    round(num, n) 保留n位小数 round(80.23456, 2) : 80.23 round(100.000056, 3) : 100.0 round(-100.000056, 3) : ...

  4. faster-rcnn代码阅读-rpn-data层

    这一节讲述rpn-data层,和这一层有关的结构图如下: rpn-data层的prototxt定义如下: layer { name: 'rpn-data' type: 'Python' bottom: ...

  5. BOM DOM 简介

    BOM和DOM简介 BOM,Browser Object Model ,浏览器对象模型. BOM主要提供了访问和操作浏览器各组件的方式. 浏览器组件:   window(浏览器窗口)   locati ...

  6. 剑指offer——27二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

  7. 多线程中Runnable 和Thread关于synchronized的疑点

    学java时和同学碰到的一道题: 转自https://blog.csdn.net/qq_40857349/article/details/102809100 某公司组织年会,会议入场时有两个入口,在入 ...

  8. 3.4_springboot2.x整合spring Data Elasticsearch

    Spring Data Elasticsearch 是spring data对elasticsearch进行的封装. 这里有两种方式操作elasticsearch: 1.使用Elasticsearch ...

  9. Android读取logcat信息

    测试的时候,经常遇到开发需要logcat分析定位bug,今天简单记录一下获取logcat的方法 前提条件:电脑中要安装好Android SDK 1.cmd 进入到这个界面 2.电脑连上手机,手机记得打 ...

  10. lucene入门-搜索方式

    1 package com.home.utils; import java.util.ArrayList; import java.util.List; import org.apache.lucen ...