iBatis2 SqlMap中经常使用sql语句
1、命名空间:
否则是必须的。
Oracle、DB2亦如此。方法是在插入语句标签<insert....>之前配置上:
<selectKey resultClass="long" keyProperty="sctId">
SELECT SEQ_TEST.NEXTVAL FROM DUAL
</selectKey>
比方MySQL
<selectKey resultClass="long" keyProperty="sctId">
SELECT LAST_INSERT_ID()
select * from customer where id = #value#
</select>
能够自己写一个将对象或者对象集合转换为map的工具(我已经实现一个了)。
这两种类型的选择经常会令人迷惑不解,一言明其理:
否则,则查询出来填充的对象属性为空(数字的为0。对象的为null)。
<result property="id" column="ACC_ID"/>
<result property="firstName" column="ACC_FIRST_NAME"/>
<result property="lastName" column="ACC_LAST_NAME"/>
<result property="emailAddress" column="ACC_EMAIL"/>
</resultMap>
<isNotEmpty prepend="and" property="$$$$$">
$name like '%'|| #$name# ||'%'
</isNotEmpty>
<isGreaterThan prepend="and" property="$$$$$" compareValue="$$$number">
$code like '%'|| #$code# ||'%'
</isGreaterThan>
</dynamic>
该语法也非常easy,关键是要会用心思考组织动态SQL。
<resultMap id="base" class="Account">
<result property="id" column="ACC_ID"/>
<result property="firstName" column="ACC_FIRST_NAME"/>
<result property="lastName" column="ACC_LAST_NAME"/>
</resultMap>
<resultMap id="AccountResult" class="Account" extends="Account.base">
<result property="emailAddress" column="ACC_EMAIL"/>
</resultMap>
这样,就非常easy扩展了一个映射策略。
private Long id;
private String name;
private String address;
private String postcode;
private String sex;
private List<Orders> orderlist = new ArrayList<Orders>();
<result property="id" column="id"/>
<result property="name" column="name"/>
<result property="address" column="address"/>
<result property="postcode" column="postcode"/>
<result property="sex" column="sex"/>
<result property="orderlist" column="id" select="orders.findByCustomerId"/>
</resultMap>
select * from orders where customerId = #value#
</select>
先运行部分页的SQL查询语句,然后得到一个ResultSet。然后依据分页范围选择有效的记录填充到对象中。终于以集合的形式返回。
对于10w条一下的记录的表。不存在性能问题。假设存在,你能够选择第二中方式。
我主张用map分装入參,连同分页參数一块传递进来,就搞定了。假设原来没有考虑到分页,而用的是对象做參数,则能够通过apache 的 beanutils组件来实现一个object到map之间的转换工具,问题迎刃而解。
Oracle的解决思路也一样,不一样的地方就是拼装分页SQL改变了。
以下的样例说明怎样使用具有输出參数
的存储过程。
<parameterMap id="swapParameters" class="map">
<parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
<parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
</parameterMap>
<procedure id="swapEmailAddresses" parameterMap="swapParameters">
{call swap_email_address (?, ?)}
</procedure>
调用上面的存储过程将同一时候互换两个字段(数据库表)和參数对象(Map)中的两个 email地址。
假设參数的 mode 属性设为 INOUT 或 OUT,则參数对象的值被改动。否则保持不变。
注意。要确保始终仅仅使用 JDBC 标准的存储过程语法。參考 JDBC 的 CallableStatement
文档以获得更具体的信息。
这样。就须要在领域活动层的设计上下功夫了。
能够通过数据库生成sqlmap、entity、dao,然后将这些东西改吧改吧就完毕大部分的工作量。本人已经实现过了,当然开发这个工具的前提是你对iBatis有深入研究和理解。
本附录是译者加入的,列出了刚開始学习的人easy出错的地方。作为完毕高速入门课程后的学习
笔记,能够让刚開始学习的人少走些弯路。仅供參考。
1) 在 parameterMap 和 resultMap 中。字段数据类型是 java.sql.Types 类定义的常量名
称。经常使用的数据类型包含 BLOB,CHAR,CLOB,DATE,LONGVARBINARY。
INTEGER,NULL,NUMERIC,TIME,TIMESTAMP 和 VARCHAR 等。
2) 对于数据表中 NULLABLE 的字段,必须在 parameterMap 和 resultMap 中指定字段
的数据类型。
3) 对于数据类型是 DATE,CLOB 或 BLOB 的字段。最好在 parameterMap 和 resultMap中指定数据类型。
4) 对于二进制类型的数据。能够将 LONGVARBINARY 映射成 byte[]。
5) 对于文本类型较大的数据,能够将 CLOB 映射成 String。
6) Java Bean 必须拥有缺省的构造器(即无參数的构造器)。
7) Java Bean 最好实现 Serializable 接口,以备应用的进一步扩展。
iBatis2 SqlMap中经常使用sql语句的更多相关文章
- SQL Server中常用的SQL语句(转):
SQL Server中常用的SQL语句 转自:http://www.cnblogs.com/rainman/archive/2013/05/04/3060428.html 1.概述 名词 笛卡尔积.主 ...
- 如何找出MySQL数据库中的低效SQL语句
面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改. MySQL数据库有几个配置选项可以帮助我 ...
- SQL*PLUS中批量执行SQL语句
SQL*PLUS中批量执行SQL语句 今天由于工作的需要,要在CMD中批量执行大量的SQL语句,对于Oracle学习还处在入门阶段的我,只能硬着头皮到处去寻找资料(主要是网络资料,也包括自己的电子书) ...
- 在ADO.NET中使用参数化SQL语句访问不同数据库时的差异
在ADO.NET中经常需要跟各种数据库打交道,在不实用存储过程的情况下,使用参数化SQL语句一定程度上可以防止SQL注入,同时对一些较难赋值的字段(如在SQL Server中Image字段,在Orac ...
- SQL点滴32—Excel中CONCATENATE函数生成SQL语句
原文:SQL点滴32-Excel中CONCATENATE函数生成SQL语句 当拿到一个Excel的时候需要将这里面的数据插入到数据库里面,该怎么办,除了使用SSIS数据导入之外还可以使用Excel中的 ...
- 在程序开发中怎样写SQL语句可以提高数据库的性能
以下内容是公司dba总结. 1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条SQL语句如果用来 ...
- Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项)
Oracle数据库中,在SQL语句中连接字符串的方法是哪个?(选择1项) A.cat B.concat C.join D.+ 解答:B
- 面试、笔试中常用的SQL语句(数据库知识必杀)一共50个!!!
Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(S#,C#,score) 成绩表 Teacher(T#,Tname) 教师表 ...
- 【spring boot】【mybatis】spring boot中mybatis打印sql语句
spring boot中mybatis打印sql语句,怎么打印出来?[参考:https://www.cnblogs.com/sxdcgaq8080/p/9100178.html] 在applicati ...
随机推荐
- 17.2.10 NOIP模拟赛 藏妹子之处(excel)
藏妹子之处(excel) 问题描述: 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: ( ...
- 【转】SqlCacheDependency的使用 强大的功能
原文发布时间为:2009-10-25 -- 来源于本人的百度文章 [由搬家工具导入] 最近我在忙于研究负载平衡、并发性容错性等性能优化问题,ASP.NET有太多强大的功能等待学习和挖掘。今天, ...
- mvc filters
1.controller using System; using System.Collections.Generic; using System.Linq; using System.Web; us ...
- java通过读取本地文件获取反射方法参数,执行对象方法
运用到的知识点 IO流, 集合properties 反射 在工程目录下新建file config.properties #one time only can run one method cl ...
- HDU 4343 Interval query(贪心 + 倍增)
题目链接 2012多校5 Problem D 题意 给定$n$个区间,数字范围在$[0, 10^{9}]$之间,保证左端点严格大于右端点. 然后有$m$个询问,每个询问也为一个区间,数字范围在$[ ...
- POJ3086 Treats for the Cows(区间DP)
题目链接 Treats for the Cows 直接区间DP就好了,用记忆化搜索是很方便的. #include <cstdio> #include <cstring> #i ...
- slam学习足迹
1.slam入门介绍 2.齐次坐标系 3.贝叶斯滤波 均值:平均值 标准差:样本的集中程度/分散度 方差:标准差的平方 协方差:不同维度之间的关系(相关度) 协方差矩阵:多维度之间的关系(相关度) 4 ...
- NOIP2016模拟赛三 Problem C: 不虚就是要AK
题目大意 给定一棵带有边权的树, 问你在树上随机选两个点, 它们最短路径上的边权之和为\(4\)的倍数的概率为多少. Solution 树分治. 没什么好讲的. #include <cstdio ...
- 【转】浅谈多核CPU、多线程、多进程
浅谈多核CPU.多线程.多进程 1.CPU发展趋势 核心数目依旧会越来越多,依据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的桌面PC有望在2017年末2018年初达到24核心(或者16核3 ...
- C++ 11中几个我比较喜欢的语法(二)
之前在文章C++ 11中几个我比较喜欢的语法中介绍了几个我比较喜欢的C++语法,其中有些语法由于VC 11还不支持,无法跨平台,所以没有介绍.前几天VS 2013 Preview发布后,对C++ 11 ...