- 浏览: 824740 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (488)
- struts1 (4)
- spring (13)
- extjs (36)
- mysql (3)
- sqlserver (2)
- oracle (37)
- 杂谈 (11)
- 面试相关 (35)
- Java基础知识总结 (5)
- Java重要知识点 线程和io流知识点 (6)
- 服务器相关 (1)
- 生活 (1)
- jsp (7)
- servlet (2)
- junit (3)
- struts2 (9)
- 开发必备 (4)
- 使用开发工具总结的知识 (4)
- ibatis (12)
- ajax (2)
- dwr (2)
- jquery (1)
- 设计模式 (4)
- Lucene的学习 (5)
- 经验总结 (19)
- mysql全文搜索相关 (7)
- hibernate (33)
- Sphinx (1)
- log4j的总结 (1)
- 敏捷开发 (9)
- 持续集成 (15)
- UML使用总结 (1)
- Scrum (1)
- OO(面向对象编程) (1)
- struts1和struts2总结 (1)
- 数据库加密 (1)
- 多线程和Socket编程 (6)
- PowerDesigner (2)
- 权限相关 (1)
- ant应用总结 (4)
- 面试必知知识点总结 (6)
- io流与nio流总结 面试相关 (1)
- 敏捷管理工具的使用 (7)
- hsqldb相关 (1)
- svn源码相关 (2)
- debug调试技巧总结 (1)
- hibernate和ibatis对比相关 (6)
- eclipse mylyn 插件的使用总结 (2)
- fisheye使用总结 (2)
- java泛型总结 (1)
- ssh整合总结 (10)
- SpringSide的学习总结 (1)
- JPA学习总结 (2)
- RoR 总结 (2)
- 模型驱动 总结 (1)
- Oracle SQL优化技巧 (4)
- 数据库相关资料 (1)
- oracle练习相关 (4)
- PowerDesigner 使用总结 (2)
- Struts实现国际化相关 (2)
- 权限框架 Spring Security (1)
- freemarker使用总结 (1)
- jsp servlet总结相关 (3)
- Java NIO总结 (1)
- 自己学习必须 (3)
- 蝴蝶容器相关 (2)
- eclipse插件的使用 (1)
- myeclipse的使用 (1)
- flex相关 (1)
- javaeye重生后总结的知识点 (2)
- 公司学习总结 (3)
- JAXB 相关 (1)
- ECSide (1)
- EdoJs 企业ajax框架 (1)
- RSA加密算法 (1)
- jbpm相关 (1)
- JMF原理 (1)
- MyEclipse使用总结 (1)
- Funsion Charts 相关总结 (3)
- 常用知识2011 (2)
- Flex与Java整合 (1)
- IBM WebSphere相关 (1)
- jQuery使用技巧 (2)
- 2011年面试相关知识点总结 (2)
- sqlserver开发相关 (8)
- eclipse 打jar相关 (2)
- Oracle/Mysql/SqlServer比较 (1)
- WebService Axis1.4开发相关 (4)
- 进制数的转换 总结 (1)
- WebService Axis2.0开发相关 (0)
- iteye Struts2 Spring Hibernate整合相关 (3)
- iteye osgi资料相关总结 (1)
- iteye ifos相关相关 (1)
- iteye 国际化相关 (1)
- iteye Hibernate缓存机制 (4)
- iteye Struts2 总结 (1)
- iteye Struts标签总结 (0)
- iteye web配置文件大全 (6)
- iteye Efs 框架总结 (1)
- iteye sql优化 (2)
- iteye 大数据量高并发的数据库优化 (1)
- iteye 开发相关 (1)
- iteye s1sh 和 s2sh整合中的问题以及解决 (1)
- iteye s1sh整合实例 (1)
- iteye s2sh整合实例 (1)
- iteye 面试相关 基础篇 (1)
- iteye Android相关 (1)
- iteye 面试相关 Web篇 (1)
- iteye Sql Server相关 (0)
- iteye struts1与struts2比较 (1)
- iteye jquery 和Struts2 (0)
- iteye struts2与其他插件整合 (0)
- iteye jquery 开发相关 (1)
- iteye eclipse结合spket(Ext,Jquery)开发相关 (0)
- iteye myeclipse 使用技巧相关 (0)
- iteye Memcached 缓存系统相关 (0)
- iteye 常用软件相关 (0)
- iteye 最新技术预览 AjaxSwing (0)
- iteye struts上传下载相关 (0)
- iteye 新技术相关 (0)
- test (0)
- iteye 开发Java游戏相关 (0)
- iteye Java反编译 (0)
- iteye XML解析相关 (0)
- iteye 压缩ZIP相关 (0)
- iteye 面试相关 (0)
- iteye Android开发相关 (4)
- csdn (0)
- e-inoc (0)
- iteye http错误码对应说明 (0)
- iteye 面试扩展知识点 (0)
- iteye oracle面试相关 存储过程,触发器,游标等 (0)
- iteye english study (0)
- iteye starflow工作流引擎 (0)
- iteye IBM WebSphere Application Server Toolkit使用相关 (0)
- iteye spring3 (0)
- iteye mybatis (0)
- iteye js技巧总结 (0)
- iteye SEO优化相关 (2)
- iteye QUI网页界面集成框架 (1)
- iteye AjaxAnywhere (1)
- iteye Nutz相关 (1)
- iteye ibatis技巧 (0)
- iteye dwz (0)
- 128个ajax/javascript框架 (0)
- iteye 2012 Java Swing教程 (1)
- iteye 码头集装箱相关 (1)
- iteye swing (2)
- 兼职工作 (0)
- 2012 新总结的面试相关知识点 常用知识点 (1)
- 淘宝网店相关 (0)
- oracle 常用函数 2012新总结 (1)
- 我的时尚潮流屋 (0)
- 2012 年 面试新总结知识 (1)
- 技巧 (1)
- 2013总结 (1)
- 2015工作相关 (3)
- springmvc (5)
- EasyPR-Java (1)
- java (2)
- editplus 4.0 注册码 (1)
- android (1)
- oracle连接数据库相关 (1)
- 编程资料总结 (2)
- 20160808 (1)
- visio 2013 (1)
最新评论
-
drew926:
泛型的类型参数可以有多个?这是java哪个版本支持的?
java泛型总结 -
listenan:
赞!非常感谢。
Scrum总结 -
cwscwj:
写的很深刻,谢谢,看了一遍,过段时间打算再看一遍。
Scrum总结 -
hwedwin:
w
Struts 2中的OGNL\EL的使用总结 -
lanni2460:
不错 很好 支持……
sqlserver三个驱动包下载
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即可。如下:
调用时,getSqlMapClientTemplate.queryForList(“Admin.findUserByLoginName”,”test”);即可。
请注意:
此时需要保证所有映射文件中,Statement定义无重名。
第二:
(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各种参数数据集
原型参数
注意:#与$区别:
1.#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by "id",这当然会报错..
2.$传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了.
$方式一般用于传入数据库对象.例如传入表名.
#方式一般用于传入插入/更新的值或查询/删除的where条件
ibatis各种返回数据集
蓝色部分#classify.id#翻译过来实际是product.getClassify().getId(),classify是Product对象的一个子对象。
(4)关于参数的三种设置方法 及 ParameterMap用法
前提:有一个user的javabean.
一,自动参数映射:
备注: 好像将属性对应的数据类型故意写错,程序也可正常执行,没报错.
三,外联参数映射:
外联方式:
四,利用parameterMap调用存储过程:
(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. 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(); } }
发表评论
-
ibatis优缺点总结
2010-09-30 14:45 1647ibatis优缺点总结 1.优点 简单: 易于学习, ... -
iBatis SqlMap 的配置总结
2010-09-30 14:43 1516iBatis SqlMap 的配置总结 核心提示:S ... -
ibatis总结
2010-09-22 17:08 12321. IBatis简介 IBatis是以SQL为中心的 ... -
ibatis #和$的区别 总结
2010-08-31 21:01 1084ibatis #和$的区别 在写ibatis中的sql ... -
ibaits知识点
2010-08-29 21:11 1176ibaits知识点:如果你要在DaoImpl里面得到一个Lis ... -
IBatis学习总结
2010-08-24 07:35 998IBatis学习总结 一、 介绍: 相对于Hibernat ... -
ibaits #和$有什么区别
2010-08-23 15:18 1314#和$有什么区别,即select * from t ... -
ibatis总结
2010-08-17 09:56 13471. IBatis简介 IBatis是以SQL为中心的持久 ... -
如何进行ibatis动态多条件组合查询以及模糊查询(oracle,mysql)
2010-08-13 20:29 1603这几天在学习使用IBATIS突然要使用模糊查询,以及动态多个条 ... -
ibatis动态SQL语句
2010-08-13 16:53 1469ibatis动态SQL语句 动态SQL ... -
让iBatis中的insert返回主键
2010-08-11 15:09 1445让iBatis中的insert返回主键 <!-- ...
相关推荐
### ibatis中输入输出各种类型的参数分析及#与$区别 #### iBatis简介与特点 iBatis作为一款轻量级的Java持久层框架,以其简洁、灵活的特点,在众多框架中占据一席之地。相较于知名的Hibernate框架,iBatis在实现上...
本主题将深入探讨如何在Ibatis中使用存储过程,特别是涉及带有输出参数的存储过程。 Ibatis,由MyBatis的前身发展而来,它是一个轻量级的ORM(对象关系映射)框架,允许开发者编写SQL语句并与Java对象进行绑定,而...
在Java代码中,我们首先准备输入参数并设置输出参数类型,然后调用存储过程并处理返回结果。 ### 总结 通过上述步骤,我们可以看到使用Ibatis框架调用Oracle存储过程并返回自定义类型的过程。这种方法不仅能够提高...
教程中还会详细讲解如何在iBATIS中定义和执行存储过程,包括输入参数、输出参数和结果集的处理。同时,这份教程可能还涵盖了异常处理、事务管理以及性能优化等相关内容。 **iBATIS存储过程调用** 在iBATIS中调用...
在IT行业中,Ibatis是一个非常流行的Java持久层框架,它为开发者提供了灵活的SQL映射功能,使得数据库操作与业务逻辑解耦合。本篇文章将深入探讨Ibatis在开发过程中遇到的取值问题,以及“##”符号在其中的作用。 ...
在IT行业中,数据库操作是必不可少的一部分,而Ibatis作为一款流行的Java持久层框架,它使得SQL与Java代码更好地结合,提供了灵活的数据库操作方式。然而,数据处理时遇到的编码问题,如乱码,常常会给开发者带来...
2. **输出参数**:对于有输出参数的存储过程,需要使用`<resultMap>`来定义输出参数与Java对象的映射关系。 3. **异常处理**:在调用存储过程时应考虑可能出现的异常情况,并进行适当的错误处理。 ### 五、总结 ...
输入参数`x`和`y`的值被放入`map`,输出参数`z`也需要在`map`中占个位置,尽管初始值并不重要。`session.selectOne()`方法调用存储过程,传入映射文件中的`id`和参数`map`。调用完成后,`z`的值会更新在`map`中,...
在实际的软件开发过程中,存储过程因其执行效率高及数据库级别的安全性等优点被广泛应用于各种业务场景之中。而对于使用Ibatis作为持久层框架的应用来说,如何有效地调用存储过程便成为了一个值得探讨的话题。本文将...
这里定义了四个参数,其中`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,使用配置...
因此,解决方案是在`{call}`语句中添加与`parameterMap`中定义相同的问号数量,表示输入和输出参数: ```xml {call P_DJ_GETRYANDPYRBYRYID(?,?,?,?)} </procedure> ``` 在服务类中调用iBATIS时,我们需要创建一...
- 如果存储过程有输出参数,你需要在参数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的整合 为了更好地管理和利用资源...