SQL Map XML 映射文件
来源:互联网 发布:淘宝客批量转换工具 编辑:程序博客网 时间:2024/06/05 10:57
一个SQL Map XML映射文件可以包含任意多个Mapped Statement, Parameter Map 和Result Map.按照它们之间的逻辑关系,为您的应用合理地组织Mapped Statement, Parameter Map 和Result Map.
一 typeAlias 节点
<typeAlias> 节点让您为一个通常较长的、全限定类名指定一个较短的别名.
<typeAlias alias=”shortname” type=”com.long.class.path.Class”/>
例如:
<typeAlias alias="user" type="com.ibatis.db.User"/>
二 Mapped Statements
SQL Map的核心概念是Mapped Statement.否Mapped Statement可以使用任意的SQL语句,并拥有Parameter Map(输入) 和Result Map(输出).如果是简单情况, Mapped Statement可以使用JAVA类来作为Parameter和Result. Mapped Statement也可以使用缓存模型,在内存中缓存常用的数据. Mapped Statement的结构如下所示:
<statement id =”statementName”
[parameterClass=”some.class.Name”]
[resultclass=”some.class.Name”]
[parameterMap=”nameOfParameterMap”]
[resultMap=”nameOfResultMap”]
[cacheModel=”nameOfCache”] >
Select * from t_user where id =[?|#propertyName#]
order by [$simpleDynamic$]
</statement>
在上面的表达式中,括号[]里的部分是可选的属性,并具在某些情况下只有特定的组合才是合法的.
1)Statements节点
<statement>节点是个通用声明,可以用于任何类型的SQL语句。通常,使用具体的statement类型是个好主意。具体statement类型提供了更直观的XML DTD,并拥有某些<statement>节点没有的特性.下表总结了statement类型及其属性和特性:
Statement 类型
属性
子元素
方法
<statement>
id parameterClass resultClass parameterMap resultMap cacheModel xmlResultName
所有的动态元素
insert update delete 所有的查询方法
<insert>
id parameterClass parameterMap
所有的动态元素 <selectKey>
insert
update
delete
<update>
id
parameterClass parameterMap
所有的动态元素
Insert
Update
delete
<delete>
id parameterClass resultClass parameterMap resultMap cacheModel
所有的动态元素
所有的查询方法
<select>
id parameterClass resultClass parameterMap resultMap cacheModel
所有的动态元素
所有的查询方法
<procedure>
id parameterClass resultClass parameterMap resultMap xmlResultName
所有的动态元素
insert update delete 所有的查询方法
2)Sql 语句
SQL显然是Mapped Statement中最重要的部分,可以使用对于数据库和JDBC DRIVER 合法的任意SQL语句.只要在JDBC DRIVER支持,可能使用任意的函数,甚至是多条语句.因为SQL语句是嵌在XML文档中的,因此有些特殊的字符不能直接使用,例如大于号和小于号(<>).幸运的是,解决的办法很简单,只需将包含特殊字符的SQL语句放在XML的CDATA区里面就可以了.例如:
2
3 resultClass="user">
4
5 <![CDATA[
6
7 SELECT * FROM T_USER WHERE id > #value#
8
9 group by id
10
11 ]]>
12
13 </statement>
14
在DAO里
实现如下:
2 /*
3 *
4 * @see com.ibatis.dao.UserDao#findUserArrayById(java.lang.Integer)
5 */
6 @Override
7 public List<User> findUserArrayById (Integer userId) throws Exception {
8 init();
9 List<User> list = sqlMap.queryForList("getUserArrayById", userId);
10 return list;
11 }
12 .
调用此方法,执行后的结果为:
2:User002:1
3:User003:0
4:User004:0
5:User005:0
6:User006:0
7:User007:0
8:User008:0
9:User009:0
10:User0010:0
12:User0012:1
22:User0022:1
32:User0032:1
42:User0042:1
100:User100:1
3)自动生成主键
很多数据库支持自动生成主键的数据类型.不地这通常(并不总是)是个私有的特性.SQL MAP 通过<insert>的子节点<selectKey>来支持自动生成的键值.它同时支持预生成(如 Oracle )和后生成两种类型(如MS-SQL server, My sql).下面是几个例子.
要实现自动生成主键有两个部分的内容:
1. 建表时,将id定义为主键并且加上”auto_increment”设置为自动增加.
例如:
create table ibatis_db.t_user(id int(6)
PRIMARY KEY auto_increment not null,
name varchar(15) not null, sex int(1) not null);
2. User.xml文件中
将
2 INSERT INTO t_user(id,name,sex) VALUES(#id#,#name#,#sex#)
3 </insert>
4
修改为:
1<!-- My sql SEQUENCE-->
2<insert id="insertUser-MY-SQL" parameterClass="user">
3 INSERT INTO T_USER (name, sex) VALUES (#name#,#sex#)
4 <selectKey resultClass="int" keyProperty="id" >
5 SELECT LAST_INSERT_ID() as id
6 </selectKey>
7</insert>
8
9<!-- Oracle SEQUENCE -->
10<insert id="insertUser-ORACLE" parameterClass="user">
11<selectKey resultClass="int" keyProperty="id" type="pre">
12<![CDATA[
13SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
14]]>
15</selectKey>
16<![CDATA[
17INSERT INTO t_user(id,name,sex)VALUES(#id#,#name#,#sex#)
18]]>
19</insert>
20
21<!-- Microsoft SQL Server IDENTITY Column -->
22<insert id="insertUser-MS-SQL" parameterClass="user ">
23<![CDATA[
24INSERT INTO T_USER (name, sex) VALUES (#name#,#sex#)
25]]>
26<selectKey resultClass="int" keyProperty="id" type="post">
27<![CDATA[
28SELECT @@IDENTITY AS ID
29]]>
30<!-- 该方法不安全 应当用SCOPE_IDENTITY() 但这个函数属于域函数,需要在一个语句块中执行。 -->
31</selectKey>
32</insert>
33
34<!-- Microsoft SQL Server IDENTITY Column 改进-->
35<insert id="insertUser-MS-SQL" parameterClass="user">
36<selectKey resultClass="int" keyProperty="id">
37<![CDATA[
38INSERT INTO T_USER (name, sex) VALUES (#name#,#sex#)
39 SELECT SCOPE_IDENTITY() AS ID
40]]>
41</selectKey>
42</insert>
43
4)存储过程
SQL MAP 通过<procedure>节点支持存储过程.下面的例子说明如何使用具有输出参数的存储过程.
5)<statement>的子节点的属性 1.parameterClass 例如:
1 <parameterMap id="swapParameters" class="map">
2 <parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
3 <parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
4 </parameterMap>
5
6 <procedure id="swapEmailAddresses" parameterMap="swapParameters">
7 {call swap_email_address(?,?)}
8 </procedure>
1
2 <statement id="statementName" parameterClass="user">
3 INSERT INTO t_user VALUES(#id#,#name#,#sex#)
4 </statement>
5
2.parameterMap
例如:
1
2 <parameterMap id ="insert-user-param" class="user">
3 <parameter property="id" />
4 <parameter property="name" />
5 <parameter property="sex" />
6 </parameterMap>
7
8 <statement id = "insertUser" parameterMap="insert-user-param">
9 INSERT INTO T_USER (id,name, sex) VALUES (?,?,?)
10 </statement>
11
3.resultClass
例如:
1
2 <statement id="getUser" parameterClass="String" resultClass="user">
3 SELECT id,
4 name,
5 sex
6 FROM t_user
7 WHERE name =#value#
8 </statement>
9
传入参数为”user009”
执行结果如下:
9:user009:1
4.resultMap
例如:
1
2 <resultMap id="get-user-result" class="user">
3 <result property="id" column="id"/>
4 <result property="name" column="name"/>
5 <result property="sex" column="sex"/>
6 </resultMap>
7 <statement id ="getUserList" resultMap="get-user-result">
8 select * from t_user
9 </statement>
10
执行结果如下:
1:user001:0
2:user002:1
3:user003:1
4:user004:1
5:user005:1
6:user006:1
7:user007:1
8:user008:1
9:user009:1
10:user0010:1
11:user0011:0
12:user0012:0
13:user0013:0
14:user0014:0
15:user0015:0
16:user0016:0
17:user0017:0
18:user0018:0
19:user0019:0
20:user0020:0
5.cacheModel
cacheModel 的属性值等于指定的cacheModel元素的name属性值.属性cacheModel定义查询mapped statement 的缓存.每一个查询mapped statement 可以使用不同或相同的
上面的例子中,每24小时刷新一次,或当更新的操作发生时刷新.
6.xmlResultName
当直接把查询结果映射成XML document 时,属性xmlReesultName的值等于XML document根节点的名称.例如:
1
2<select id="getUserById" parameterClass="int" resultClass="xml" xmlResultName="user">
3 SELECT id ,
4 name ,
5 sex
6 FROM t_user
7 WHERE id =#value#
8</select>
9
调用如下:
String str = (String) sqlMap.queryForObject("getUserById", id);
上面的查询结果将产生一个XML document,结构如下:
1 <?xml version="1.0" encoding="UTF-8" standalone="no"?><user><id>1</id><name>user001</name><sex>0</sex></user>
2
- SQL Map XML 映射文件
- SQL Map XML 映射文件
- SQL Map XML 映射文件
- SQL Map XML 映射文件
- SQL Map XML 映射文件。
- 深入学习Sql Map Xml映射文件
- iBatis 之 SQL Map XML映射文件
- SQL映射文件mapper.xml
- sql的映射XML文件
- sql映射的xml文件
- IBatis框架的SQL Map映射文件
- IBatis框架的SQL Map映射文件
- IBatis框架的SQL Map映射文件
- MyBatisx详解之SQL映射XML文件
- MyBatis中SQL映射的XML文件
- 4.IBatis框架的SQL Map映射文件
- Hibernate Map映射文件
- SQL映射的XML
- 对SSL握手协议的研究(2)
- poj1019--Number Sequence题解
- 靠, AnsiString的NULL 和 "0" 不分, 发博以示注意
- DS
- 责任编辑-www.saierhaowaigua.net
- SQL Map XML 映射文件
- js中SetInterval与setTimeout用法
- 性能测试工具WebPerf V1.3
- SQL Map XML 映射文件
- AfxGetReourceHandle错误
- 回调函数
- SQL Map XML 映射文件
- 嵌入式系统 Boot Loader 技术内幕
- Touch LCD 绘图