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 ...
随机推荐
- .NET中如何有效的使用Cache
原文发布时间为:2009-09-30 -- 来源于本人的百度文章 [由搬家工具导入] Cache 即高速缓存 ,我想很多人对他的第一印象一定像我一样,感觉他一定能提高系统得性能和运行速度。 C ...
- .NET获取URL的各种方式及其区别
原文发布时间为:2009-11-11 -- 来源于本人的百度文章 [由搬家工具导入] http://www.test.com/testweb/default.aspx?id=1 Request.App ...
- group by having执行顺序
原文发布时间为:2009-07-28 -- 来源于本人的百度文章 [由搬家工具导入] 核心原理 where>group>having>order by 只有深入理解这些语句执行的过程 ...
- windows 加入域
点击computer,右击选system ,点 change setting,填写domain和computer-name 加入域,下次登陆加入,在域中会检查computer name
- [LeetCode] Permutations II 排列
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...
- JDBC连接池&DBUtils使用
使用连接池改造JDBC的工具类: 1.1.1 需求: 传统JDBC的操作,对连接的对象销毁不是特别好.每次创建和销毁连接都是需要花费时间.可以使用连接池优化的程序. * 在程序开始的 ...
- python3 定义向量运算
from math import hypot #定义向量的构造方法 class Vector: def __init__(self,x=0,y=0): self.x=x; self.y=y; ''' ...
- 交换机的MAC地址作用
交换机的MAC地址在交换机进行数据交换时是没有作用的,因为交换机并不对转发的数据帧进行拆包重封装. 如果只是完成数据帧交换,则可以不要MAC地址(仅指二层交换机,三层交换机完成路由功能自然每个端口得有 ...
- (5)ASP.NET HTML服务器控件
工具箱 与服务端交互 <body> <form id="form1" runat="server"> <div> <% ...
- NULL的学问
在数据库中存在一种特殊的值:NULL(空值).一个字段如果没有被赋值,那么它的值就是NULL,NULL并不代表没有值而是表示值未知.员工信息表中存储着身份证号.姓名.年龄等信息,其中某条记录中年龄字段 ...