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

<?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. Linux下可以运行bat文件么?

    bat是批处理文件,在windows和linux上都可以使用. 不过在linux的命令行中不可以直接敲"xxx.bat",系统会去找所有的命令. 想要调用bat文件,需要写绝对路径 ...

  2. chkconfig 与 systemctl

    chkconfig命令 主要用来更新(启动或停止)和查询系统服务(service)的运行级信息,用于维护/etc/rc[0-6].d目录的命令行工具. chkconfig -–add httpd 增加 ...

  3. struts之ActionServlet

    ActionServlet类是Struts框架的内置核心控制器组件,它继承了javax. servlet.http.HttpServlet类,Struts的启动一般从加载ActionServlet开始 ...

  4. bzoj3505: [Cqoi2014]数三角形 [数论][gcd]

    Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数m和 ...

  5. NX二次开发-NXOpen方式遍历所有体workPart->Bodies();

    NX11+VS2013 #include <NXOpen/DisplayManager.hxx> #include <NXOpen/Body.hxx> #include < ...

  6. error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.【转载】

    文章出处https://blog.csdn.net/qq_38721302/article/details/82850292 今天编写C++程序在使用头文件#include<cstring> ...

  7. Android Canvas save和restoreToCount

    @Override public void draw(Canvas canvas) { if (mDrawable!=null) { int sc=canvas.save(); if (mAnimat ...

  8. 牛客多校第六场 G Is Today Friday? 蔡勒公式/排列

    题意: 有一堆日期,这些日期都是星期五,但是数字被映射成了字母A~J,现在让你求逆映射,如果存在多种答案,输出字典序最小的那个. 题解: 用蔡勒公式解决关于星期几的问题. 对于映射,可以用笔者刚刚学会 ...

  9. 内置Jetty配置JSP支持过程中的常见报错

    目录 1. 常见报错及解决 1.1 JSP support not configured 1.2 JSTL标签解析 1.3 JSP编译 1.4 JSP实现依赖 1.5 EL表达式支持 2. 小结 1. ...

  10. scp 传输下载

    利用scp传输文件 1.从服务器下载文件 scp username@servername:/path/filename /tmp/local_destination 例如scp codinglog@1 ...