• 第十三篇:一点一滴学ibatis(二)映射文件


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

    <?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>结果

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

  • 相关阅读:
    ftp 传文件完整代码(二)
    生成文件 权限 以及ftp 传数据(一)
    定时任务配置
    发送电子邮件遇到问题
    mysql 主从分离配置
    知道开始时间结束时间 计算这之间一共多少天
    mysql 语句集(二)
    mysql 的sql文件导出导入
    mysql 批量添加 更新
    Spring Boot中如何干掉if else
  • 原文地址:https://www.cnblogs.com/yb38156/p/9821943.html
Copyright © 2020-2023  润新知