- 浏览: 1882824 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (514)
- OPEN (41)
- WARN (33)
- EXPER (16)
- RESOURCE (7)
- TOOL (4)
- DWR (10)
- Struts1.x (10)
- Ibtais (18)
- MyEclipse (30)
- Sql Server (64)
- Tomcat (7)
- APACHE (4)
- JSP (18)
- SERVLET (6)
- ENGLISH (0)
- ECSide (8)
- JasperReports (7)
- JAVA (24)
- JS (42)
- XML (26)
- CVS (8)
- Mind (1)
- JQUERY (2)
- IBATIS (6)
- PROJECT (0)
- STRUTS2 (0)
- PROXOOL (0)
- SPRING (4)
- Hibernate (0)
- SSI (0)
- JBPM (11)
- FLEX (3)
- JSON (2)
- GWT (1)
- jeecms v3 (1)
- Flash (2)
- DATA (1)
- ORACLE (3)
- 查询oracle 中逗号分隔字符串中所有值 (1)
最新评论
-
小小西芹菜:
GoEasy web三步轻松实现web实时推送1. 引入goe ...
服务器推送技术 java -
kg_1997:
这个方法太棒了,可以不用to_date函数,实在是棒!!!
java/oracle日期处理 -
wodesunday:
:idea:
SQL的分段统计查询语句 -
wodesunday:
引用
SQL的分段统计查询语句 -
BlueSkator:
讲的有点浅,没有深入进去
tomcat需要的重新发布和重启服务器的几种情况
在ibatis,输入的参数对象常以parameterClass来定义,输出的结果集常以resultMap来定义。(resultMap:方便JAVABEAN属性及字段的映射,调用JAVABEAN的setter进行设置值。通常我们不采用resultClass属性进行映射,因为它不具备映射数据库表字段的持久化特性。)
在ibateis中,parameterClass的类型大都是:string,int/对象/hashmap
resultclass/resultMap的类型大都是:对象/hashmap
当parameterClass为string,int时,可用#value#表示或直接用传入的值名表示。
当parameterClass/resultMap的类型是对象时,用#属性#表示。程序会调用JAVABEAN的getter方法,进行获得属性值。
当parameterClass/resultMap的类型是hashmap(Map是key-value结构的)时,那程序会直接通过key来分析取参数。
具体请见以下两部分:
ibatis各种参数数据集
原型参数
<select id="select1" parameterClass="java.lang.String" resultClass="AppLog">
select
ID as id,
TYPE as type,
DESCR as descr
from APP_LOG
where ID = #id#
</select>
sqlMapper.queryForObject("select0", id);
--参数名与传入值名称一样。--应该也可用参数#value#表示
Map类参数
<select id="select2" parameterClass="java.util.HashMap" resultClass="AppLog">
select
ID as id,
TYPE as type,
DESCR as descr
from APP_LOG
where ID = #ids#
</select>
map.put("ids", id);
AppLog log = (AppLog) sqlMapper.queryForObject("select0", map);
--通过key来获得值
对象参数
<select id="select3" parameterClass="AppLog" resultClass="AppLog">
select
ID as id,
TYPE as type,
DESCR as descr
from APP_LOG
where ID = #id#
</select>
AppLog p=new AppLog();
p.setId(id);
AppLog log = (AppLog) sqlMapper.queryForObject("select3", p);
动态字段、表
<select id="selectd" resultClass="java.util.HashMap" parameterClass="java.util.HashMap"
remapResults="true">
select $fieldList$
from $table$
where ID = #id#
</select>
Map p = new HashMap();
p.put("id", id);
p.put("table","APP_LOG");
p.put("fieldList", "ID,TYPE,DESCR");
Map map = (Map) sqlMapper.queryForObject("selectd", p);
String id1 = (String) map.get("ID");
String type = (String) map.get("TYPE");
String descr = (String) map.get("DESCR");
注重:#与$区别:
1.#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by "id",这当然会报错..
2.$传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了.
$方式一般用于传入数据库对象.例如传入表名.
#方式一般用于传入插入/更新的值或查询/删除的where条件
ibatis各种返回数据集
别名映射->实体类 + resultClass
<select id=" selectAll" resultClass="AppLog">
select
ID as id,
TYPE as type,
DESCR as descr
from APP_LOG
where ID = #id#
</select>
List list = sqlMapper.queryForList("selectAll");
for (int i = 0; i < list.size(); i ) {
AppLog log = (AppLog) list.get(i);
//add your code here;
}
注重:
为什么定义了resultClass="AppLog",而queryForList出来的是list?
这里的resultClass="AppLog",是指查询出来的每条记录的格式是AppLog。
当我们queryForList时,系统会将各条记录(即各个AppLog放到list中)传回给我们。当我们queryForObject时,就只传回一个AppLog。
别名映射->Map类+resultClass --》把每条记录放于map中,字段名为key,值为value.
<select id=" selectAll" resultClass="java.util.HashMap">
select
ID as id,
TYPE as type,
DESCR as descr
from APP_LOG
where ID = #id#
</select>
List list = sqlMapper.queryForList("selectAll");
for (int i = 0; i < list.size(); i ) {
Map map = (Map) list.get(i);
String id = (String) map.get("id");
String type = (String) map.get("type");
String descr = (String) map.get("descr");
//add your code here;
}
无映射
<select id="selectAll3" resultClass="java.util.HashMap">
select * from APP_LOG
</select>
List list = sqlMapper.queryForList("selectAll3");
for (int i = 0; i < list.size(); i ) {
Map map = (Map) list.get(i);
String id = (String) map.get("ID");
String type = (String) map.get("TYPE");
String descr = (String) map.get("DESCR");
}
显式映射->实体类:resultMap
<resultMap id="AppLogResult" class="AppLog">
<result property="id" column="ID"/>
<result property="type" column="Type"/>
<result property="descr" column="DESCR"/>
</resultMap>
<select id="selectAll" resultMap="AppLogResult">
select * from APP_LOG
</select>
List list = sqlMapper.queryForList("selectAll");
for (int i = 0; i < list.size(); i ) {
AppLog log = (AppLog) list.get(i);
//add your code here;
}
显式映射->Map类:resultMap --》把每条记录放于map中,字段名为key,值为value.
<resultMap id="map-result" class="java.util.HashMap">
<result property="id" column="ID"/>
<result property="type" column="Type"/>
<result property="descr" column="DESCR"/>
</resultMap>
<select id="selectAll2" resultMap="map-result">
select * from APP_LOG
</select>
List list = sqlMapper.queryForList("selectAll2");
for (int i = 0; i < list.size(); i ) {
Map map = (Map) list.get(i);
String id = (String) map.get("id");
String type = (String) map.get("type");
String descr = (String) map.get("descr");
}
又如:
map.put("appIds", Ids);
executor.update("Device.OpenClientApp", map);
下面的property属性及循环变量,都是对应map的key名。
-----证实,ibatis对于hashmap,都是通过key来获得值的。所以,所有参数须用key来表示!!!
如下:
<update id="Device.OpenClientApp" parameterClass="java.util.HashMap">
update T_Device_App_R_Info set Opr='1' where App_ID in
<iterate conjunction="," open="(" close=")" property="appIds">
#appIds[]#
</iterate>
</update>
例子:
<statement id=”statementName” parameterClass=” examples.domain.Product”>
insert into PRODUCT values (#id#, #description#, #price#, #classify.id#)
</statement>
蓝色部分#classify.id#翻译过来实际是product.getClassify().getId(),classify是Product对象的一个子对象。
(4)关于参数的三种设置方法 及 ParameterMap用法
前提:有一个user的javabean.
一,自动参数映射:
<insert id="insertUser7" parameterClass="user">
<![CDATA[
INSERT INTO t_user ( ID, NAME, PASS )VALUES( #id#,#name#,#pass# )
]]>
</insert>
二,内联参数映射:
<insert id="insertUser8" parameterClass="user">
<![CDATA[
INSERT INTO t_user ( ID, NAME, PASS ) VALUES( #id:INT#, #name:VARCHAR#, #pass:VARCHAR# )
]]>
</insert>
备注: 似乎将属性对应的数据类型故意写错,程序也可正常执行,没报错.
三,外联参数映射:
以上二种方式都用paramClass,但此处用parameterMap.
<parameterMap id="parameterMap" class="user">
<parameter property="id" jdbcType="INTEGER" />
<parameter property="name" jdbcType="VARCHAR" />
<parameter property="pass" jdbcType="VARCHAR" />
</parameterMap>
<insert id="insertUser9" parameterMap="parameterMap">
<![CDATA[
INSERT INTO t_user ( ID, NAME, PASS )VALUES( ?,?,? )
]]>
</insert>
若此处的对象不是javabean,而是一个hashMap.用法也一样,只是id,name,pass不是javabean的属性,而是hashMap的key.
String[] ids;
...........
map.put("devId", ids[0]);
map.put("appId", ids[1]);
<!-- 自动参数映射方式 -->
<insert id="DAPermit.addAppDevMapping" parameterClass="java.util.HashMap">
insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (#devId#,#appId#,'2');
</insert>
<!--
内联方式:
<insert id="DAPermit.addAppDevMapping" parameterClass="java.util.HashMap">
insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (#devId:varchar#,#appId:varchar#,'2');
</insert>
外联方式:
<parameterMap id="dapermitParams" class="java.util.HashMap">
<parameter property="devId" jdbcType="VARCHAR"/>
<parameter property="appId" jdbcType="VARCHAR"/>
</parameterMap>
<insert id="DAPermit.addAppDevMapping" parameterMap="dapermitParams">
insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (?,?,'2');
</insert>
-->
四,利用parameterMap调用存储过程:
<!-- example 11: 存储过程 -->
<resultMap id="returnResultMap" class="user">
<result property="id" column="ID" />
</resultMap>
<parameterMap id="paramUser" class="java.util.Map">
<parameter property="name" jdbcType="VARCHAR" javaType="string" mode="IN" />
<parameter property="pass" jdbcType="VARCHAR" javaType="string" mode="IN" />
<parameter property="id" jdbcType="INT" javaType="Integer" mode="INOUT" resultMap="returnResultMap" />
</parameterMap>
<procedure id="pro_insertUser11" parameterMap="paramUser" resultClass="int">
<![CDATA[
{call proc_userinsert(?,?,?)}
]]>
</procedure>
然后在UserDaoTest.java中增加如下一个方法:
public static void example11() throws Exception {
try {
Map map = new HashMap();
map.put("name", "procedure");
map.put("pass", "123456");
Integer returnValue = (Integer)sqlMapClient.insert("pro_insertUser11", map);
System.out.println(returnValue);
} catch (Exception e) {
e.printStackTrace();
}
}
如何用Map类型的对象作为传入参数?
<!--
这里,可以使用全路径类名,如:
java.util.Map
java.util.HashMap
java.util.TreeMap
或
map
-->
<insert id="insertUser" parameterClass="map">
insert into t_user values (
null,#username#,#password#
)
</insert>
Map user = new TreeMap();
user.put("username", "Map用户");
user.put("password", "Map用户密码");
sqlMapper.insert("insertUser",user);
如何将查询结果集的元素转换为Map类型的对象?
<!--
resultClass可以定义为java.util.HashMap类型,
将能自动转换
-->
<select id="selectMapUsers" resultClass="java.util.HashMap">
select * from t_user
</select>
List list = (List)sqlMapper.queryForList("selectMapUsers");
System.out.println(list);
for (Iterator iter = list.iterator(); iter.hasNext();) {
Map map = (Map) iter.next();
//可在此输出map的数据
}
在ibateis中,parameterClass的类型大都是:string,int/对象/hashmap
resultclass/resultMap的类型大都是:对象/hashmap
当parameterClass为string,int时,可用#value#表示或直接用传入的值名表示。
当parameterClass/resultMap的类型是对象时,用#属性#表示。程序会调用JAVABEAN的getter方法,进行获得属性值。
当parameterClass/resultMap的类型是hashmap(Map是key-value结构的)时,那程序会直接通过key来分析取参数。
具体请见以下两部分:
ibatis各种参数数据集
原型参数
<select id="select1" parameterClass="java.lang.String" resultClass="AppLog">
select
ID as id,
TYPE as type,
DESCR as descr
from APP_LOG
where ID = #id#
</select>
sqlMapper.queryForObject("select0", id);
--参数名与传入值名称一样。--应该也可用参数#value#表示
Map类参数
<select id="select2" parameterClass="java.util.HashMap" resultClass="AppLog">
select
ID as id,
TYPE as type,
DESCR as descr
from APP_LOG
where ID = #ids#
</select>
map.put("ids", id);
AppLog log = (AppLog) sqlMapper.queryForObject("select0", map);
--通过key来获得值
对象参数
<select id="select3" parameterClass="AppLog" resultClass="AppLog">
select
ID as id,
TYPE as type,
DESCR as descr
from APP_LOG
where ID = #id#
</select>
AppLog p=new AppLog();
p.setId(id);
AppLog log = (AppLog) sqlMapper.queryForObject("select3", p);
动态字段、表
<select id="selectd" resultClass="java.util.HashMap" parameterClass="java.util.HashMap"
remapResults="true">
select $fieldList$
from $table$
where ID = #id#
</select>
Map p = new HashMap();
p.put("id", id);
p.put("table","APP_LOG");
p.put("fieldList", "ID,TYPE,DESCR");
Map map = (Map) sqlMapper.queryForObject("selectd", p);
String id1 = (String) map.get("ID");
String type = (String) map.get("TYPE");
String descr = (String) map.get("DESCR");
注重:#与$区别:
1.#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by "id",这当然会报错..
2.$传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了.
$方式一般用于传入数据库对象.例如传入表名.
#方式一般用于传入插入/更新的值或查询/删除的where条件
ibatis各种返回数据集
别名映射->实体类 + resultClass
<select id=" selectAll" resultClass="AppLog">
select
ID as id,
TYPE as type,
DESCR as descr
from APP_LOG
where ID = #id#
</select>
List list = sqlMapper.queryForList("selectAll");
for (int i = 0; i < list.size(); i ) {
AppLog log = (AppLog) list.get(i);
//add your code here;
}
注重:
为什么定义了resultClass="AppLog",而queryForList出来的是list?
这里的resultClass="AppLog",是指查询出来的每条记录的格式是AppLog。
当我们queryForList时,系统会将各条记录(即各个AppLog放到list中)传回给我们。当我们queryForObject时,就只传回一个AppLog。
别名映射->Map类+resultClass --》把每条记录放于map中,字段名为key,值为value.
<select id=" selectAll" resultClass="java.util.HashMap">
select
ID as id,
TYPE as type,
DESCR as descr
from APP_LOG
where ID = #id#
</select>
List list = sqlMapper.queryForList("selectAll");
for (int i = 0; i < list.size(); i ) {
Map map = (Map) list.get(i);
String id = (String) map.get("id");
String type = (String) map.get("type");
String descr = (String) map.get("descr");
//add your code here;
}
无映射
<select id="selectAll3" resultClass="java.util.HashMap">
select * from APP_LOG
</select>
List list = sqlMapper.queryForList("selectAll3");
for (int i = 0; i < list.size(); i ) {
Map map = (Map) list.get(i);
String id = (String) map.get("ID");
String type = (String) map.get("TYPE");
String descr = (String) map.get("DESCR");
}
显式映射->实体类:resultMap
<resultMap id="AppLogResult" class="AppLog">
<result property="id" column="ID"/>
<result property="type" column="Type"/>
<result property="descr" column="DESCR"/>
</resultMap>
<select id="selectAll" resultMap="AppLogResult">
select * from APP_LOG
</select>
List list = sqlMapper.queryForList("selectAll");
for (int i = 0; i < list.size(); i ) {
AppLog log = (AppLog) list.get(i);
//add your code here;
}
显式映射->Map类:resultMap --》把每条记录放于map中,字段名为key,值为value.
<resultMap id="map-result" class="java.util.HashMap">
<result property="id" column="ID"/>
<result property="type" column="Type"/>
<result property="descr" column="DESCR"/>
</resultMap>
<select id="selectAll2" resultMap="map-result">
select * from APP_LOG
</select>
List list = sqlMapper.queryForList("selectAll2");
for (int i = 0; i < list.size(); i ) {
Map map = (Map) list.get(i);
String id = (String) map.get("id");
String type = (String) map.get("type");
String descr = (String) map.get("descr");
}
又如:
map.put("appIds", Ids);
executor.update("Device.OpenClientApp", map);
下面的property属性及循环变量,都是对应map的key名。
-----证实,ibatis对于hashmap,都是通过key来获得值的。所以,所有参数须用key来表示!!!
如下:
<update id="Device.OpenClientApp" parameterClass="java.util.HashMap">
update T_Device_App_R_Info set Opr='1' where App_ID in
<iterate conjunction="," open="(" close=")" property="appIds">
#appIds[]#
</iterate>
</update>
例子:
<statement id=”statementName” parameterClass=” examples.domain.Product”>
insert into PRODUCT values (#id#, #description#, #price#, #classify.id#)
</statement>
蓝色部分#classify.id#翻译过来实际是product.getClassify().getId(),classify是Product对象的一个子对象。
(4)关于参数的三种设置方法 及 ParameterMap用法
前提:有一个user的javabean.
一,自动参数映射:
<insert id="insertUser7" parameterClass="user">
<![CDATA[
INSERT INTO t_user ( ID, NAME, PASS )VALUES( #id#,#name#,#pass# )
]]>
</insert>
二,内联参数映射:
<insert id="insertUser8" parameterClass="user">
<![CDATA[
INSERT INTO t_user ( ID, NAME, PASS ) VALUES( #id:INT#, #name:VARCHAR#, #pass:VARCHAR# )
]]>
</insert>
备注: 似乎将属性对应的数据类型故意写错,程序也可正常执行,没报错.
三,外联参数映射:
以上二种方式都用paramClass,但此处用parameterMap.
<parameterMap id="parameterMap" class="user">
<parameter property="id" jdbcType="INTEGER" />
<parameter property="name" jdbcType="VARCHAR" />
<parameter property="pass" jdbcType="VARCHAR" />
</parameterMap>
<insert id="insertUser9" parameterMap="parameterMap">
<![CDATA[
INSERT INTO t_user ( ID, NAME, PASS )VALUES( ?,?,? )
]]>
</insert>
若此处的对象不是javabean,而是一个hashMap.用法也一样,只是id,name,pass不是javabean的属性,而是hashMap的key.
String[] ids;
...........
map.put("devId", ids[0]);
map.put("appId", ids[1]);
<!-- 自动参数映射方式 -->
<insert id="DAPermit.addAppDevMapping" parameterClass="java.util.HashMap">
insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (#devId#,#appId#,'2');
</insert>
<!--
内联方式:
<insert id="DAPermit.addAppDevMapping" parameterClass="java.util.HashMap">
insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (#devId:varchar#,#appId:varchar#,'2');
</insert>
外联方式:
<parameterMap id="dapermitParams" class="java.util.HashMap">
<parameter property="devId" jdbcType="VARCHAR"/>
<parameter property="appId" jdbcType="VARCHAR"/>
</parameterMap>
<insert id="DAPermit.addAppDevMapping" parameterMap="dapermitParams">
insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (?,?,'2');
</insert>
-->
四,利用parameterMap调用存储过程:
<!-- example 11: 存储过程 -->
<resultMap id="returnResultMap" class="user">
<result property="id" column="ID" />
</resultMap>
<parameterMap id="paramUser" class="java.util.Map">
<parameter property="name" jdbcType="VARCHAR" javaType="string" mode="IN" />
<parameter property="pass" jdbcType="VARCHAR" javaType="string" mode="IN" />
<parameter property="id" jdbcType="INT" javaType="Integer" mode="INOUT" resultMap="returnResultMap" />
</parameterMap>
<procedure id="pro_insertUser11" parameterMap="paramUser" resultClass="int">
<![CDATA[
{call proc_userinsert(?,?,?)}
]]>
</procedure>
然后在UserDaoTest.java中增加如下一个方法:
public static void example11() throws Exception {
try {
Map map = new HashMap();
map.put("name", "procedure");
map.put("pass", "123456");
Integer returnValue = (Integer)sqlMapClient.insert("pro_insertUser11", map);
System.out.println(returnValue);
} catch (Exception e) {
e.printStackTrace();
}
}
如何用Map类型的对象作为传入参数?
<!--
这里,可以使用全路径类名,如:
java.util.Map
java.util.HashMap
java.util.TreeMap
或
map
-->
<insert id="insertUser" parameterClass="map">
insert into t_user values (
null,#username#,#password#
)
</insert>
Map user = new TreeMap();
user.put("username", "Map用户");
user.put("password", "Map用户密码");
sqlMapper.insert("insertUser",user);
如何将查询结果集的元素转换为Map类型的对象?
<!--
resultClass可以定义为java.util.HashMap类型,
将能自动转换
-->
<select id="selectMapUsers" resultClass="java.util.HashMap">
select * from t_user
</select>
List list = (List)sqlMapper.queryForList("selectMapUsers");
System.out.println(list);
for (Iterator iter = list.iterator(); iter.hasNext();) {
Map map = (Map) iter.next();
//可在此输出map的数据
}
发表评论
-
There is no READABLE property named * in class 'java.lang.Integer'
2010-12-02 10:29 14062使用ibatis出现了下列问 ... -
ibatis 返回新增id问题
2010-09-02 10:12 1801一般在处理ibatis新增的时候使用@@IDENTITY 来返 ... -
写在iBATIS3 GA之前-1000 words
2010-04-28 14:07 1066可以看到基本的架构没有变,唯一多的就是一个Mapper Ann ... -
写在iBATIS3 GA之前-API越来越象Hibernate
2010-04-28 14:06 1382Hibernate应该基本是这样,记得不是很清楚了: xml ... -
写在iBATIS3 GA之前-Cache
2010-04-28 14:05 1791缓存,也就是Cache 在iBATIS2中以其较粗的粒度而为 ... -
写在iBATIS3 GA之前-Dynamic SQL
2010-04-28 14:04 1611相比于iBATIS的大量难懂的动态标签,iBATIS3可谓巨大 ... -
ibatis 3 学习笔记 6
2010-04-28 10:07 3713SqlSessionFactoryBuilder SqlSe ... -
ibatis 3 学习笔记 5
2010-04-28 10:05 2283原创 ibatis 3 学习笔记 5 收藏 动态sql语句 ... -
ibatis 学习笔记 4
2010-04-28 10:01 1712这篇实践一下一对一、一对多两种关系的映射操作,首先建立数据库 ... -
ibatis 学习笔记 3
2010-04-27 12:11 4770SQL Map XML Files ibatis最大的优点就 ... -
ibatis 3 学习笔记 2
2010-04-27 12:05 2526上篇简单调试了一个实 ... -
ibatis 3 学习笔记1
2010-04-27 12:00 1728Ibatis更新还真快!呵呵,看到csdn友博客,受益匪浅,转 ... -
IBatis简单实现(附主键自动生成)
2010-01-02 14:54 2057相对 Hibernate和Apache OJB等“一站式”OR ... -
ibatis 开发手册
2009-10-22 15:39 2249atis 开发指南 ibatis Quick ... -
iBATIS模糊查询的实现实例浅析
2009-10-22 11:41 1394iBATIS模糊查询的实现是如何的呢?让我们先看看例子,仿照J ... -
iBATIS动态查询的实现浅析
2009-10-22 11:37 1335iBATIS动态查询的实现主 ... -
iBATIS ResultMap基础浅析
2009-10-22 11:22 3178iBATIS ResultMap是我们学习iBATIS中非常重 ...
相关推荐
### ibatis中输入输出各种类型的参数分析及#与$区别 #### iBatis简介与特点 iBatis作为一款轻量级的Java持久层框架,以其简洁、灵活的特点,在众多框架中占据一席之地。相较于知名的Hibernate框架,iBatis在实现上...
本主题将深入探讨如何在Ibatis中使用存储过程,特别是涉及带有输出参数的存储过程。 Ibatis,由MyBatis的前身发展而来,它是一个轻量级的ORM(对象关系映射)框架,允许开发者编写SQL语句并与Java对象进行绑定,而...
教程中还会详细讲解如何在iBATIS中定义和执行存储过程,包括输入参数、输出参数和结果集的处理。同时,这份教程可能还涵盖了异常处理、事务管理以及性能优化等相关内容。 **iBATIS存储过程调用** 在iBATIS中调用...
在Java代码中,我们首先准备输入参数并设置输出参数类型,然后调用存储过程并处理返回结果。 ### 总结 通过上述步骤,我们可以看到使用Ibatis框架调用Oracle存储过程并返回自定义类型的过程。这种方法不仅能够提高...
- **参数映射和结果映射**:讲解如何处理输入参数和输出结果,包括使用#{property}和${property}的区别,以及自动映射和自定义映射。 - **Executor执行器**:简述不同类型的Executor(SimpleExecutor、...
输入参数`x`和`y`的值被放入`map`,输出参数`z`也需要在`map`中占个位置,尽管初始值并不重要。`session.selectOne()`方法调用存储过程,传入映射文件中的`id`和参数`map`。调用完成后,`z`的值会更新在`map`中,...
在IT行业中,数据库操作是必不可少的一部分,而Ibatis作为一款流行的Java持久层框架,它使得SQL与Java代码更好地结合,提供了灵活的数据库操作方式。然而,数据处理时遇到的编码问题,如乱码,常常会给开发者带来...
在描述中提到的“##”是Ibatis中的一个特殊占位符,它的主要功能是在拼接SQL字符串时处理参数。与常用的“#{}”占位符不同,“##”处理的是SQL的关键词或表名,它会将占位符及其内的内容原样输出到SQL语句中,而不是...
4. 参数映射和结果映射:Ibatis支持动态参数和复杂的结果集映射,使得能够处理多种类型的输入参数和输出结果。 二、Ibatis的工作流程 1. 创建SqlSessionFactory:首先,通过SqlSessionFactoryBuilder,使用配置...
5. **参数映射和结果集映射**:掌握如何将Java对象与SQL语句的输入参数和输出结果进行映射。 6. **事务管理**:理解iBatis的事务隔离级别和控制方式,以及如何与Spring框架集成进行事务管理。 7. **插件机制**:...
2. **输出参数**:对于有输出参数的存储过程,需要使用`<resultMap>`来定义输出参数与Java对象的映射关系。 3. **异常处理**:在调用存储过程时应考虑可能出现的异常情况,并进行适当的错误处理。 ### 五、总结 ...
相关class文件可能包含了ibatIS的Mapper接口定义、存储过程的输入输出参数类、Service或DAO实现类等。这些类文件与上述步骤密切相关,它们定义了存储过程的调用方式、参数传递和结果处理。 总结,ibatIS调用存储...
- 如果存储过程有输出参数,你需要在参数Map中声明`mode="OUT"`,例如`#{outputParam, mode=OUT, jdbcType=INTEGER}`。 - 为确保正确映射结果集,你需要清楚地了解存储过程的输出结构。 通过以上步骤,你可以在...
开发者需要编写SQL语句,然后在映射文件中指定SQL的输入参数和输出结果如何映射到Java对象。这样,业务逻辑层只需处理Java对象,而数据库交互的细节则交给Ibatis处理。这种设计使得Ibatis具有高度的灵活性,可以适应...
iBATIS 框架是一个轻量级的Java持久层...总的来说,iBATIS框架通过清晰的类层次结构和配置文件,使得Java开发者能够方便地编写和执行SQL,同时处理输入输出的数据映射,从而降低了数据库操作的复杂性,提高了开发效率。
这里的 `namespace` 代表一个命名空间,`select` 标签定义了一个查询操作,`id` 属性是查询的唯一标识,`parameterClass` 指定输入参数的类型,`resultClass` 定义了返回结果的对象类型。 在 Java 代码中,我们需要...
- `<insert>` 标签用于插入数据,设置 `parameterClass` 指定输入参数类型。 - `<update>` 标签用于更新数据。 - `<delete>` 标签用于删除数据。 在测试时,可以通过主配置文件解析出 SqlMapClient 对象,调用其...
它可以接收输入参数(IN参数)、输出参数(OUT参数)或者两者都有(IN/OUT参数),并可以执行一系列操作,如更新数据、查询等。例如,`PROCEDURE update_employee_status(id NUMBER, status OUT VARCHAR2);` 在...
在iBATIS中,SQL语句被视为一组输入(参数)和输出(结果集)。输入参数常用于WHERE子句,而输出则是SELECT子句中的列。通过XML配置文件,开发者可以明确指定SQL语句的参数和结果集如何映射到对象。例如,一个简单的...