- 浏览: 204709 次
- 性别:
- 来自: 重庆市
文章分类
- 全部博客 (77)
- java (20)
- web (7)
- Struts (1)
- spring (0)
- hibernate (4)
- js (2)
- 编程感想 (7)
- oracle (12)
- 操作系统 (4)
- 工作 经验 总结 (4)
- informix (1)
- shell (1)
- 数学计算 (1)
- linux (2)
- DB2 数据库操作 (1)
- oracle 聚合函数 多行合并 (1)
- 数据结构 java (1)
- log4j (2)
- oracle SQL (1)
- ibatis (1)
- SVN (2)
- myeclipse (2)
- myeclipse10 (1)
- JMS (1)
- activemq (1)
- 中间件 (1)
- ctrl (1)
- 时区 (1)
最新评论
-
youngcarpenter:
...
在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值 -
feiqiu2014:
可以这样处理的 insert into RO_PERSONR ...
ibatis插入数据为null的错误处理 -
lhbthanks:
这个给oracle wm_concat(column)函数功能 ...
oracle使用聚合函数实现 多行合并 -
lhbthanks:
java.lang.StringBuffer线程安全的可变字符 ...
String的重载“+”和StringBuilder效率的巨大区别的实验 -
lcy0202:
有测试过stringbuffer和+的效率区别吗,保证线程安 ...
String的重载“+”和StringBuilder效率的巨大区别的实验
ibatis中输入/输出各种类型的参数分析及#与$区别 (转)
(1)
在数据库持久层的框架中,大家一定听过Hibernate的大名了吧,经典的SSH框架就有它的一份哦!可是我今天要说的却是另外一个持久层的框架,它就是iBatis。与Hibrenate相比,它的主要优势就是简单、小巧、轻量级,但是它的功能却丝毫不亚于 Hibernate,下面让我们来看看iBatis在项目中的应用吧!
iBatis确实很简单,它的工作原理就是通过SQL Map映射文件将sql语句和java对象对应起来(如:在利用对象属性的getter从属性中获取值,查询结果后,将各值用setter方法放到对象中).在iBatis中,sql语句是我们手工编写好的,这一点与Hibernate不同,Hibernate是通过映射java对象和数据库表字段来自动生成的sql语句。
(2)
ibatis中的namespace与resultMap
<sqlMap namespace="admin">在运用时如下:
this.getSqlMapClient().update(“admin.update”, entity);
分析:
ibatis 配置文件中的useStatementNamespaces:是否使用Statement命名空间。这里的命名空间指的是映射文件中,sqlMap节点的 namespace属性,如:<sqlMap namespace="User">。这里,指定了此sqlMap节点下定义的操作均从属于"User"命名空间。
在 useStatementNamespaces="true"的情况下,Statement调用需追加命名空间,如:sqlMap.update("User.updateUser",user);否则直接通过Statement名称调用即可,如:sqlMap.update("updateUser",user);
好处:
在实际应用中,利用namespace可以防止两个同名的方法而引起冲突。如有两个updateUser,可以通过A updateUser/B. updateUser来区分。
另一种方法:
但有一种更方便的方法,可以在不采用namspace的情况下,解决上面的问题:即直接在方法的前面直接命名为A updateUser/B. updateUser。调用时,直接调用A updateUser/B. updateUser即可。如下:
<sqlMap>
<typeAlias type="com.admin.entity.Admin" alias="Admin" />
<select id="Admin.findUserByLoginName" parameterClass="java.lang.String"
resultMap="AdminResult">
select * from T_ADMINISTRATORS where longinName = #value#
and status != 4
</select>
调用时,getSqlMapClientTemplate.queryForList(“Admin.findUserByLoginName”,”test”);即可。
请注意:
此时需要保证所有映射文件中,Statement定义无重名。
第二:
resultMap:结果映射,需结合resultMap节点对映射关系加以定义。
<sqlMap>
<typeAlias type="com.admin.entity.Admin" alias="Admin" />
<resultMap id="AdminResult" class="Admin">
<result column="staff_id" property="id" />
<result column="loginName" property="loginName" />
<result column="password" property="password" />
<result column="staff_name" property="username" />
<result column="status" property="status" />
<result column="phone" property="phone" />
<result column="email" property="email" />
</resultMap>
<select id="Admin.findUserByLoginName" parameterClass="java.lang.String"
resultMap="AdminResult">
select * from T_ADMINISTRATORS where longinName = #value#
and status != 4
</select>
</sqlMap>
(3)关于ibatis中输入/输出各种类型的参数分析
在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.
Xml代码
1.String[] ids;
2............
3.map.put("devId", ids[0]);
4.map.put("appId", ids[1]);
5.
6.<!-- 自动参数映射方式 -->
7. <insert id="DAPermit.addAppDevMapping" parameterClass="java.util.HashMap">
8. insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (#devId#,#appId#,'2');
9. </insert>
10.
11.<!--
12.内联方式:
13. <insert id="DAPermit.addAppDevMapping" parameterClass="java.util.HashMap">
14. insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (#devId:varchar#,#appId:varchar#,'2');
15. </insert>
16.
17.外联方式:
18. <parameterMap id="dapermitParams" class="java.util.HashMap">
19. <parameter property="devId" jdbcType="VARCHAR"/>
20. <parameter property="appId" jdbcType="VARCHAR"/>
21. </parameterMap>
22.
23. <insert id="DAPermit.addAppDevMapping" parameterMap="dapermitParams">
24. insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (?,?,'2');
25. </insert>
26.-->
四,利用parameterMap调用存储过程:
Java代码
1.<!-- example 11: 存储过程 -->
2.<resultMap id="returnResultMap" class="user">
3. <result property="id" column="ID" />
4.</resultMap>
5.<parameterMap id="paramUser" class="java.util.Map">
6. <parameter property="name" jdbcType="VARCHAR" javaType="string" mode="IN" />
7. <parameter property="pass" jdbcType="VARCHAR" javaType="string" mode="IN" />
8. <parameter property="id" jdbcType="INT" javaType="Integer" mode="INOUT" resultMap="returnResultMap" />
9.</parameterMap>
10.
11.<procedure id="pro_insertUser11" parameterMap="paramUser" resultClass="int">
12. <![CDATA[
13. {call proc_userinsert(?,?,?)}
14. ]]>
15.</procedure>
16.然后在UserDaoTest.java中增加如下一个方法:
17.public static void example11() throws Exception {
18. try {
19. Map map = new HashMap();
20. map.put("name", "procedure");
21. map.put("pass", "123456");
22. Integer returnValue = (Integer)sqlMapClient.insert("pro_insertUser11", map);
23. System.out.println(returnValue);
24. } catch (Exception e) {
25. e.printStackTrace();
26. }
27.}
28.
29.(转载,用于自己学习查阅!!)
(1)
在数据库持久层的框架中,大家一定听过Hibernate的大名了吧,经典的SSH框架就有它的一份哦!可是我今天要说的却是另外一个持久层的框架,它就是iBatis。与Hibrenate相比,它的主要优势就是简单、小巧、轻量级,但是它的功能却丝毫不亚于 Hibernate,下面让我们来看看iBatis在项目中的应用吧!
iBatis确实很简单,它的工作原理就是通过SQL Map映射文件将sql语句和java对象对应起来(如:在利用对象属性的getter从属性中获取值,查询结果后,将各值用setter方法放到对象中).在iBatis中,sql语句是我们手工编写好的,这一点与Hibernate不同,Hibernate是通过映射java对象和数据库表字段来自动生成的sql语句。
(2)
ibatis中的namespace与resultMap
<sqlMap namespace="admin">在运用时如下:
this.getSqlMapClient().update(“admin.update”, entity);
分析:
ibatis 配置文件中的useStatementNamespaces:是否使用Statement命名空间。这里的命名空间指的是映射文件中,sqlMap节点的 namespace属性,如:<sqlMap namespace="User">。这里,指定了此sqlMap节点下定义的操作均从属于"User"命名空间。
在 useStatementNamespaces="true"的情况下,Statement调用需追加命名空间,如:sqlMap.update("User.updateUser",user);否则直接通过Statement名称调用即可,如:sqlMap.update("updateUser",user);
好处:
在实际应用中,利用namespace可以防止两个同名的方法而引起冲突。如有两个updateUser,可以通过A updateUser/B. updateUser来区分。
另一种方法:
但有一种更方便的方法,可以在不采用namspace的情况下,解决上面的问题:即直接在方法的前面直接命名为A updateUser/B. updateUser。调用时,直接调用A updateUser/B. updateUser即可。如下:
<sqlMap>
<typeAlias type="com.admin.entity.Admin" alias="Admin" />
<select id="Admin.findUserByLoginName" parameterClass="java.lang.String"
resultMap="AdminResult">
select * from T_ADMINISTRATORS where longinName = #value#
and status != 4
</select>
调用时,getSqlMapClientTemplate.queryForList(“Admin.findUserByLoginName”,”test”);即可。
请注意:
此时需要保证所有映射文件中,Statement定义无重名。
第二:
resultMap:结果映射,需结合resultMap节点对映射关系加以定义。
<sqlMap>
<typeAlias type="com.admin.entity.Admin" alias="Admin" />
<resultMap id="AdminResult" class="Admin">
<result column="staff_id" property="id" />
<result column="loginName" property="loginName" />
<result column="password" property="password" />
<result column="staff_name" property="username" />
<result column="status" property="status" />
<result column="phone" property="phone" />
<result column="email" property="email" />
</resultMap>
<select id="Admin.findUserByLoginName" parameterClass="java.lang.String"
resultMap="AdminResult">
select * from T_ADMINISTRATORS where longinName = #value#
and status != 4
</select>
</sqlMap>
(3)关于ibatis中输入/输出各种类型的参数分析
在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.
Xml代码
1.String[] ids;
2............
3.map.put("devId", ids[0]);
4.map.put("appId", ids[1]);
5.
6.<!-- 自动参数映射方式 -->
7. <insert id="DAPermit.addAppDevMapping" parameterClass="java.util.HashMap">
8. insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (#devId#,#appId#,'2');
9. </insert>
10.
11.<!--
12.内联方式:
13. <insert id="DAPermit.addAppDevMapping" parameterClass="java.util.HashMap">
14. insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (#devId:varchar#,#appId:varchar#,'2');
15. </insert>
16.
17.外联方式:
18. <parameterMap id="dapermitParams" class="java.util.HashMap">
19. <parameter property="devId" jdbcType="VARCHAR"/>
20. <parameter property="appId" jdbcType="VARCHAR"/>
21. </parameterMap>
22.
23. <insert id="DAPermit.addAppDevMapping" parameterMap="dapermitParams">
24. insert into T_Device_App_R_Info(Device_ID,App_ID,Opr) values (?,?,'2');
25. </insert>
26.-->
四,利用parameterMap调用存储过程:
Java代码
1.<!-- example 11: 存储过程 -->
2.<resultMap id="returnResultMap" class="user">
3. <result property="id" column="ID" />
4.</resultMap>
5.<parameterMap id="paramUser" class="java.util.Map">
6. <parameter property="name" jdbcType="VARCHAR" javaType="string" mode="IN" />
7. <parameter property="pass" jdbcType="VARCHAR" javaType="string" mode="IN" />
8. <parameter property="id" jdbcType="INT" javaType="Integer" mode="INOUT" resultMap="returnResultMap" />
9.</parameterMap>
10.
11.<procedure id="pro_insertUser11" parameterMap="paramUser" resultClass="int">
12. <![CDATA[
13. {call proc_userinsert(?,?,?)}
14. ]]>
15.</procedure>
16.然后在UserDaoTest.java中增加如下一个方法:
17.public static void example11() throws Exception {
18. try {
19. Map map = new HashMap();
20. map.put("name", "procedure");
21. map.put("pass", "123456");
22. Integer returnValue = (Integer)sqlMapClient.insert("pro_insertUser11", map);
23. System.out.println(returnValue);
24. } catch (Exception e) {
25. e.printStackTrace();
26. }
27.}
28.
29.(转载,用于自己学习查阅!!)
发表评论
-
在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值
2014-08-10 17:53 25747第一种方法:获取结果String类型 在 Action 中获得 ... -
db link的查看创建与删除
2014-08-08 16:27 10741.查看dblink select owner,object ... -
log4j配置祥解
2013-12-20 12:09 773log4j配置祥解 第一步: ... -
oracle的一些有用的方法总结
2013-11-07 15:35 1274--------------重要--------------- ... -
Oracle创建用户及删除用户的实例
2013-10-16 17:10 918Oracle创建用户及删除用户都是我们经常会用到的,下面就以实 ... -
北六融合项目应用性能与安全开发建议v1.1-ORACLE SQL性能优化系列.rar
2013-10-08 14:33 955北六融合项目应用性能与安全开发建议v1.1-ORACLE SQ ... -
使用POI读取excel文件内容
2013-07-10 14:54 835http://blog.csdn.net/angel_he/a ... -
JDK1.6官方下载 JDK6官方下载地址
2013-07-05 14:17 1181JDK1.6官方下载 JDK6官方下载地址 JDK1.6官方 ... -
map的三种遍历方法!
2012-10-11 21:40 846map的三种遍历方法! 转帖 java hashma ... -
如何删除表中重复记录
2012-06-26 17:14 1090最近项目中遇到了一个需求,即“如何删除表中重复记录,使得所有重 ... -
关于java.lang.OutOfMemoryError:java heap space错误解决方案
2012-06-14 11:41 6634//首先检查程序有没有 ... -
工作中常用的编程技巧
2013-01-13 21:08 9591、System.out.println与System.err ... -
在Java中读写Excel文件
2012-06-13 11:36 2784Jakarta的POI项目提供了一组操纵Windows文档的J ... -
org.apache.commons包介绍及应用
2012-06-10 18:07 1947org.apache.commons是apache组下的一个项 ... -
SqlMapClient对象
2012-06-10 10:52 1132code="java"]这个对象是iBat ... -
ibatis插入数据为null的错误处理
2012-06-04 15:45 11598. 用 iBatis 应用程序连接的数据库是 Oracle, ... -
String的重载“+”和StringBuilder效率的巨大区别的实验
2012-05-23 22:36 2509本程序是根据Thinking in Java简单改编而成。 p ... -
修改数据库字段长度的sql命令
2012-04-25 19:51 1621修改数据库表字段的长度,通过命令alter table tab ... -
oracle数据库性能监控的常用的SQL
2012-04-04 18:20 1622oracle数据库性能监控的SQL 1. 监控事例的等待 SQ ... -
转载:Java编程中“为了性能”尽量要做到的一些地方
2012-03-29 13:12 869最近的机器内存又爆满了,除了新增机器内存外,还应该好好revi ...
相关推荐
### ibatis中输入输出各种类型的参数分析及#与$区别 #### iBatis简介与特点 iBatis作为一款轻量级的Java持久层框架,以其简洁、灵活的特点,在众多框架中占据一席之地。相较于知名的Hibernate框架,iBatis在实现上...
本主题将深入探讨如何在Ibatis中使用存储过程,特别是涉及带有输出参数的存储过程。 Ibatis,由MyBatis的前身发展而来,它是一个轻量级的ORM(对象关系映射)框架,允许开发者编写SQL语句并与Java对象进行绑定,而...
在Java代码中,我们首先准备输入参数并设置输出参数类型,然后调用存储过程并处理返回结果。 ### 总结 通过上述步骤,我们可以看到使用Ibatis框架调用Oracle存储过程并返回自定义类型的过程。这种方法不仅能够提高...
教程中还会详细讲解如何在iBATIS中定义和执行存储过程,包括输入参数、输出参数和结果集的处理。同时,这份教程可能还涵盖了异常处理、事务管理以及性能优化等相关内容。 **iBATIS存储过程调用** 在iBATIS中调用...
在IT行业中,Ibatis是一个非常流行的Java持久层框架,它为开发者提供了灵活的SQL映射功能,使得数据库操作与业务逻辑解耦合。本篇文章将深入探讨Ibatis在开发过程中遇到的取值问题,以及“##”符号在其中的作用。 ...
2. **输出参数**:对于有输出参数的存储过程,需要使用`<resultMap>`来定义输出参数与Java对象的映射关系。 3. **异常处理**:在调用存储过程时应考虑可能出现的异常情况,并进行适当的错误处理。 ### 五、总结 ...
输入参数`x`和`y`的值被放入`map`,输出参数`z`也需要在`map`中占个位置,尽管初始值并不重要。`session.selectOne()`方法调用存储过程,传入映射文件中的`id`和参数`map`。调用完成后,`z`的值会更新在`map`中,...
在实际的软件开发过程中,存储过程因其执行效率高及数据库级别的安全性等优点被广泛应用于各种业务场景之中。而对于使用Ibatis作为持久层框架的应用来说,如何有效地调用存储过程便成为了一个值得探讨的话题。本文将...
在IT行业中,数据库操作是必不可少的一部分,而Ibatis作为一款流行的Java持久层框架,它使得SQL与Java代码更好地结合,提供了灵活的数据库操作方式。然而,数据处理时遇到的编码问题,如乱码,常常会给开发者带来...
这里定义了四个参数,其中`username`是输入输出参数,而`o`, `ooo`, 和`oo`是输出参数。 #### 调用存储过程 使用`procedure`元素来调用存储过程,如: ```xml {call user_account_proc(?,?,?,?)} </procedure> ...
Oracle存储过程是在数据库中编译并存储的一组SQL语句和过程化控制流语句的集合,它们可以接受输入参数,输出参数,甚至返回多个结果集。在本例中,我们创建了两个存储过程:`GetSingleEmpRS` 和 `GetDoubleEmpRS`,...
- **参数映射和结果映射**:讲解如何处理输入参数和输出结果,包括使用#{property}和${property}的区别,以及自动映射和自定义映射。 - **Executor执行器**:简述不同类型的Executor(SimpleExecutor、...
4. 参数映射和结果映射:Ibatis支持动态参数和复杂的结果集映射,使得能够处理多种类型的输入参数和输出结果。 二、Ibatis的工作流程 1. 创建SqlSessionFactory:首先,通过SqlSessionFactoryBuilder,使用配置...
- 如果存储过程有输出参数,你需要在参数Map中声明`mode="OUT"`,例如`#{outputParam, mode=OUT, jdbcType=INTEGER}`。 - 为确保正确映射结果集,你需要清楚地了解存储过程的输出结构。 通过以上步骤,你可以在...
相关class文件可能包含了ibatIS的Mapper接口定义、存储过程的输入输出参数类、Service或DAO实现类等。这些类文件与上述步骤密切相关,它们定义了存储过程的调用方式、参数传递和结果处理。 总结,ibatIS调用存储...
iBATIS 框架是一个轻量级的Java持久层...总的来说,iBATIS框架通过清晰的类层次结构和配置文件,使得Java开发者能够方便地编写和执行SQL,同时处理输入输出的数据映射,从而降低了数据库操作的复杂性,提高了开发效率。
5. **参数映射和结果集映射**:掌握如何将Java对象与SQL语句的输入参数和输出结果进行映射。 6. **事务管理**:理解iBatis的事务隔离级别和控制方式,以及如何与Spring框架集成进行事务管理。 7. **插件机制**:...
2. **映射文件中的配置**:在iBatis的映射文件中定义与存储过程相关的参数和结果集。 3. **调用存储过程**:在DAO层通过调用相应的方法来执行存储过程。 ##### 4.3 iBatis与Spring的整合 为了更好地管理和利用资源...