call mysql store procedure in ibatis with spring

[b]call mysql store procedure in ibatis with spring[/b]

1.sqlmap文件编写

1)无参存储过程

<procedure id="testp">
{call test}
</procedure>

2)有参存储过程
1)无out参数

<parameterMap class="java.util.HashMap" id="roleMap">
<parameter property="userID" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="name" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="sex" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
<parameter property="icon" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
<procedure id="insertRole" parameterMap="roleMap">
<![CDATA[
{call insertRole(?,?,?,?)}
]]>
</procedure>

2)有out参数

<parameterMap class="java.util.HashMap" id="userMap_4">
<parameter property="userName" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="number" jdbcType="INT" javaType="java.lang.Integer" mode="OUT"/>
</parameterMap>
<procedure id="checkUserName" parameterMap="userMap_4">
{call checkUserName(?,?)}
</procedure>

[color=brown]
注意点:
I.parameterMap中定义的参数顺序与procedure中调用的存储过程的参数顺序相同
II.parameterMap中定义属性的jdbcType,javaType,mode要仔细
III.procedure中传参用parameterMap,小心用错parameterClass
[/color]

2.Java中的调用
1)仅带in参数存储过程调用:

Map p = new HashMap();
p.put("userID",new Integer(role.getId()));
p.put("name",role.getName());
p.put("sex", new Integer(role.getSex()));
p.put("icon", new Integer(role.getIcon()));
getSqlMapClientTemplate().queryForObject("insertRole",p);

2)带有out参数存储过程调用:

public int checkUserName(String name){
HashMap<String,Object> p=new HashMap<String,Object>();
p.put("userName", name);
p.put("number", null);
getSqlMapClientTemplate().insert("checkUserName", p);
return (Integer)p.get("number");
}

[color=red]注意:调用带有out参数的存储过程要用insert,如果用queryFor...会卡死在调用处..[/color]

3.有参返回结果集存储过程
1).存储过程:
[color=indigo]在MySQL 5.0中,游标只能使用在存储过程中.不过,如果你在 SELECT 语句中如果没有打开游标的话,那么结果集会被直接发送给客户端,也可以 SELECT INTO 到变量中[/color]
[color=indigo]如果你在存储过程或存储函数中执行一条普通的 SELECT 语句,那么结果集会直接返回给客户端.需要使用MySQL 4.1的客户端-服务器协议来支持它,这意味着 - 例如在PHP中,就需要用 mysqli 扩展而非 mysql 扩展才能实现.
[/color]

create procedure getRoleByUserID(in userID int)
label_proc:begin
select * from role where user_id=userID;
end label_proc

2)sqlMap:

<parameterMap class="java.util.HashMap" id="roleMap_1">
<parameter property="userID" jdbcType="INT" javaType="java.lang.Integer" mode="IN"/>
</parameterMap>
<procedure id="getRoleByUserID" parameterMap="roleMap_1" resultClass="role">
<![CDATA[
{call getRoleByUserID(?)}
]]>
</procedure>

[color=red]我所犯过的错误:围绕着oracle的做法,在存储过程中设置一个out sys_outcursor参数,然后在parameter中设置一个hashmap results接收这个参数....折腾了几个小时...[/color]
[color=brown]这里的关键点就在于,把这个存储过程当一个普通的select元素,设置个resultClass来格式化结果集就行了.[/color]

3 java中调用:
调用就像普通select一样调用

Map p = new HashMap();
p.put("userID", userID);
Role role=(Role)getSqlMapClientTemplate().queryForObject("getRoleByUserID",p);
System.out.println("成功:"+role.getId()+"->"+role.getName());
资源下载链接为: https://pan.quark.cn/s/5c50e6120579 在Android移动应用开发中,定位功能扮演着极为关键的角色,尤其是在提供导航、本地搜索等服务时,它能够帮助应用获取用户的位置信息。以“baiduGPS.rar”为例,这是一个基于百度地图API实现定位功能的示例项目,旨在展示如何在Android应用中集成百度地图的GPS定位服务。以下是对该技术的详细阐述。 百度地图API简介 百度地图API是由百度提供的一系列开放接口,开发者可以利用这些接口将百度地图的功能集成到自己的应用中,涵盖地图展示、定位、路径规划等多个方面。借助它,开发者能够开发出满足不同业务需求的定制化地图应用。 Android定位方式 Android系统支持多种定位方式,包括GPS(全球定位系统)和网络定位(通过Wi-Fi及移动网络)。开发者可以根据应用的具体需求选择合适的定位方法。在本示例中,主要采用GPS实现高精度定位。 权限声明 在Android应用中使用定位功能前,必须在Manifest.xml文件中声明相关权限。例如,添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />,以获取用户的精确位置信息。 百度地图SDK初始化 集成百度地图API时,需要在应用启动时初始化地图SDK。通常在Application类或Activity的onCreate()方法中调用BMapManager.init(),并设置回调监听器以处理初始化结果。 MapView的创建 在布局文件中添加MapView组件,它是地图显示的基础。通过设置其属性(如mapType、zoomLevel等),可以控制地图的显示效果。 定位服务的管理 使用百度地图API的LocationClient类来管理定位服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值