第十三篇:一点一滴学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 paramValue FROM dw_sys_param WHERE sysName = #sysName#
</select>
//插入语句当插入的id的数据库自增的时候用 selectKey ,而且注意oracle和mysql自增的时间不同,oracle是先有产生id再插入
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 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 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(二)映射文件的更多相关文章
- Java IDE 编辑器 --- IntelliJ IDEA 进阶篇 生成 hibernate 实体与映射文件
原文:转:Java IDE 编辑器 --- IntelliJ IDEA 进阶篇 生成 hibernate 实体与映射文件 2011-04-30 12:50 很多人不知道怎么用 IntelliJ IDE ...
- 第十一篇:一点一滴学ibatis(一)
一.常见ORM框架1.原生的JDBC.自己写的JDBC,基本上就只够程序跑起来,缺陷和漏洞一堆堆.回顾下jdbc的几个操作,加载驱动,建立连接,预处理语句,执行,结果集遍历.这个过程中,因为连接Con ...
- Hibernate第三篇【主配置文件、映射文件、复合主键映射】
前言 目前已经学了如何搭建Hibernate的开发环境,以及Hibernate对应的API了-在快速入门还没讲解的就是配置文件是怎么配置的.因此,本博文主要讲解主配置文件以及映射配置文件.. 主配置文 ...
- 第二十三篇、IO多路复用 二
基于IO多路复用实现socket的连接 下面流程:1.先创建列表,让自己的socket对象传入,然后遍历select第一个参数2.客户端连接,那么客户端socket就传入到了列表里面,3.遍历,接收客 ...
- 咱就入个门之NHibernate映射文件配置(二)
上一篇主要介绍了NHibernate映射文件的基础配置,这篇我们介绍下NHibernate的一对多及多对一配置(文中我直接使用双向关联,即一和多两端都配置,开发中可以只使用一端),同时略带介绍下NHi ...
- MyBatis 映射文件详解(六)
MyBatis 配置文件类型 MyBatis配置文件有两种类型,如下: 全局配置文件(如 mybatis-config.xml) Mapper XML 映射文件(如 UserMapper.xml) 上 ...
- Python开发【第十三篇】:jQuery(二)
http://www.bubuko.com/infodetail-1438296.html 处理完毕需要整理贴进来 Python之路[第十三篇]jQuery案例-Form表单&插件及扩展 ...
- (十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字
. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...
- 跟我学SpringCloud | 第十三篇:Spring Cloud Gateway服务化和过滤器
SpringCloud系列教程 | 第十三篇:Spring Cloud Gateway服务化和过滤器 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich. ...
随机推荐
- spark-sql中的分析函数的使用
分析函数的应用场景: (1)用于分组后组内排序 (2)指定计算范围 (3)Top N (4)累加计算 (5)层次计算 分析函数的一般语法: 分析函数的语法结构一般是: 分析函数名(参数) over ...
- Linux基本使用命令
一.常用命令归纳分类 课外网站 http://man.linuxde.net/ http://www.jb51.net/linux/ http ...
- Go 转义字符
Go 转义字符 package main import "fmt" func main() { fmt.Printf("Hello\tWorld!") } 本文 ...
- MySQL主键跟外键
定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄. 身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证 ...
- BZOJ 3779: 重组病毒(线段树+lct+树剖)
题面 escription 黑客们通过对已有的病毒反编译,将许多不同的病毒重组,并重新编译出了新型的重组病毒.这种病毒的繁殖和变异能力极强.为了阻止这种病毒传播,某安全机构策划了一次实验,来研究这种病 ...
- JS对象的可枚举属性和不可枚举属性
昨天在写文章(转载)的时候发现了有些对象的方法是分可枚举性和不可枚举性的.简单的查了一下资料,今天来捋一捋啥是对象的可枚举啥是不可枚举. 可枚举性: 对象的每一个属性都有一个描述对象,用来描述和控制该 ...
- spring注解方式配置以及spring4的泛型注入 (4)
目录 一.@Controller 注解控制层(action) 二.@Service 注解服务层 三.@Repository 持久层 四.spring4的泛型注入测试 1 创建两个实体User和Role ...
- DLL注入技术之依赖可信进程注入
DLL注入技术之依赖可信进程注入 依赖可信进程注入原理是利用Windows 系统中Services.exe这个权限较高的进程,首先将a.dll远线程注入到Services.exe中,再利用a.dll将 ...
- JVM虚拟机瓜分内存原则
操作系统分配给每个进程的内存是有限制的,例如32位的Windows限制为2GB.虚拟机提供了参数来控制java堆和方法区(非堆)这两部分内存的最大值.则剩余的内存为2GB(操作系统限制)减去Xmx(最 ...
- Django中的HttpResponse和JsonResponse
Django中的HttpResponse和JsonResponse 我们在编写一些借口函数的时候,经常需要给调用者返回json格式的数据,那么如何返回可直接解析的数据呢? 首先第一种方式: from ...