ibatis调用ms sqlserver 调用函数存储过程参数简化

Ibatis编程--调用存储过程
1、Ibatis.xml文件代码
&?xml version="1.0"
encoding="UTF-8"?&
sqlMapConfig&&&&&
&&& PUBLIC
"-//ibatis.apache.org//DTD SQL Map Config
2.0//EN"&&&&&
&sqlMapConfig&
&&cacheModelsEnabled="true"
&&errorTracingEnabled="true"
&&enhancementEnabled="true"
&&classInfoCacheEnabled="true"
&&lazyLoadingEnabled="true"
&&maxRequests="32"
&&maxSessions="15"
&&maxTransactions="5"
&&useStatementNamespaces="false"
&transactionManager
type="JDBC"&
&&&dataSource
type="SIMPLE"&
&&&&property
name="JDBC.Driver"
value="oracle.jdbc.driver.OracleDriver"/&
&&&&property
name="JDBC.ConnectionURL"
value="jdbc:oracle:thin:@localhost:1521:xe"/&
&&&&property
name="JDBC.Username" value="zzx"/&
&&&&property
name="JDBC.Password" value="zzx"/&
&&&/dataSource&
&&/transactionManager&
resource="com/yiduedu/po/Customer.xml"/&
&/sqlMapConfig&
2、Customer实体类代码
package com.yiduedu.
public class Customer {
&private S
&private S
&public Customer(){}
&public Customer(String name,String
password){
&&this.password=
&&this.name=
&public int getCid() {
&public void setCid(int cid) {
&&this.cid =
&public String getName() {
&public void setName(String name) {
&&this.name =
&public String getPassword() {
&public void setPassword(String password) {
&&this.password =
3、实体类对应的XML映射文件
&?xml version="1.0"
encoding="GBK"?&
sqlMap&&&&&
&&& PUBLIC
"-//ibatis.apache.org//DTD SQL Map
2.0//EN"&&&&&
&&resultMap
class="com.yiduedu.po.Customer" id="map"&
property="cid" column="c_id"/&
property="name" column="c_name"/&
property="password" column="c_pwd"/&
&&/resultMap&
&&statement id="insertObject"
parameterClass="com.yiduedu.po.Customer"&
insert into customer
values(#cid#,#name#,#password#)--&
&&insert into customer
values(seq_id.nextval,#name#,#password#)
&&/statement&
&&delete id="deleteObject"
parameterClass="int"&
&&delete from customer where
c_id=#cid#
&&/delete&
&&select id="selectObject"
parameterClass="int"
resultClass="com.yiduedu.po.Customer"&
&&select c_id as cid,c_name as
name,c_pwd as password from customer where c_id=#x#
&&/select&
&&update id="updateObject"
parameterClass="com.yiduedu.po.Customer"&
&&update customer set
c_name=#name#,c_pwd=#password# where c_id=#cid#;
&&/update&
&&select id="getList"
resultClass="com.yiduedu.po.Customer"
resultMap="map"&
&&select * from customer
&&/select&
&&!-- 在ibatis中调用存储过程
&&parameterMap
class="java.util.HashMap" id="pro"&
&&&parameter
property="name" jdbcType="VARCHAR"
javaType="java.lang.String"&
mode="IN"/&
&&&parameter
property="password" jdbcType="VARCHAR" javaType="java.lang.String"
mode="IN"/&
&&&parameter
property="msg" jdbcType="INTEGER" javaType="java.lang.Integer"
mode="OUT"/&
&&/parameterMap&
&&procedure
id="getProcedure"&&
parameterMap="pro"&
pk_test.pro_test1(?,?,?)}
&&/procedure&
调用存储过程返回游标(如果是其他的数据库jdbcType="OTHER",切记:OTHER一定要大写)
&&parameterMap
class="java.util.HashMap" id="pro1"&
&&&parameter
property="result" jdbcType="ORACLECURSOR"
javaType="java.sql.ResultSet" resultMap="map"
mode="OUT"/&
&&/parameterMap&
&&procedure id="getCur"
parameterMap="pro1"&
pk_test.pro_get_cur(?)}
&&/procedure&
& &!-- 模糊查询方法一
& &select id="getLike"
parameterClass="java.lang.String"
& resultClass="com.yiduedu.po.Customer"
resultMap="map"&
& &select * from customer where
c_name like '%$name$%'
& &/select&
& &!-- 模糊查询方法二
& &select id="getLike2"
parameterClass="String"
& resultClass="com.yiduedu.po.Customer"
resultMap="map"&
& &select * from customer where
c_name like '$name$'
& &/select&
&/sqlMap&&&&
4、读取映射文件
package com.yiduedu.
import java.io.IOE
import java.io.R
import mon.resources.R
import com.ibatis.sqlmap.client.SqlMapC
import com.ibatis.sqlmap.client.SqlMapClientB
public class TestUtil {
&private SqlMapClient client=
&public SqlMapClient getClient(){
&&Reader reader=
&&&reader=Resources.getResourceAsReader("Ibatis.xml");
&&&client=SqlMapClientBuilder.buildSqlMapClient(reader);
&&} catch (Exception e) {
&&&e.printStackTrace();
&&}finally{
&&&&&if(reader!=null)
&&&&&reader.close();
catch (IOException e) {
&&&&&e.printStackTrace();
5、测试代码
package com.yiduedu.
import java.sql.SQLE
import java.util.HashM
import java.util.I
import java.util.L
import java.util.M
import com.ibatis.sqlmap.client.SqlMapC
import com.yiduedu.po.C
public class Test1 {
&private TestUtil t=new TestUtil();
&public void getInsert(Customer cus) throws
SQLException{
&&SqlMapClient
client=t.getClient();
&&client.insert("insertObject",
&public int getDel(int id) throws
SQLException{
&&SqlMapClient
client=t.getClient();
client.delete("deleteObject", new Integer(id));
&public Object getSelect(int id) throws
SQLException{
&&SqlMapClient
client=t.getClient();
client.queryForObject("selectObject",new Integer(id));
&public int getUpdate(Customer cus) throws
SQLException{
&&SqlMapClient
client=t.getClient();
client.update("updateObject", new Integer(cus.getCid()));
&public List getList() throws SQLException{
&&SqlMapClient
client=t.getClient();
client.queryForList("getList");
&public Map getMap() throws SQLException{
&&SqlMapClient
client=t.getClient();
client.queryForMap("getList", null,
"cid");//在此处cid来自Customer类中的属性名
&public Object getProcedure(Map map) throws
SQLException{
&&SqlMapClient
client=t.getClient();
&&client.insert("getProcedure",
&&return map.get("msg");
&public Object getListCur(Map map) throws
SQLException{
&&SqlMapClient
client=t.getClient();
&&//client.queryForObject("getCur",
map);//若用这个方法就会报错,所以一定要用insert()方法
&&client.insert("getCur",
&&return map.get("result");
&public List getLike(String like) throws
SQLException{
&&SqlMapClient
client=t.getClient();
client.queryForList("getLike", like);
&public List getLike2(String like) throws
SQLException{
&&SqlMapClient
client=t.getClient();
client.queryForList("getLike2", like);
&public static void main(String[] args) {
&&Test1 t1=new Test1();
&&Customer cus=new
Customer("zzx6","zz");
&&//cus.setCid(2);
&&&//t1.getInsert(cus);
a=t1.getDel(1);
//&&&System.out.println();
//&&&Customer
cu=(Customer) t1.getSelect(2);
//&&&System.out.println(cu.getName()+"---"+cu.getPassword());
&&&//t1.getUpdate(cus);
list=t1.getList();
//&&&Iterator
it=list.iterator();
//&&&while(it.hasNext()){
//&&&&Customer
c=(Customer) it.next();
//&&&&System.out.println(c.getCid()+"---"+c.getName()+"---"+c.getPassword());
map=t1.getMap();
//&&&System.out.println(map);
set=map.keySet();
(Iterator iterator = set.iterator(); iterator.hasNext();) {
//&&&&Integer
str = (Integer) iterator.next();
//&&&&Customer
cu=(Customer) map.get(str);
//&&&&System.out.println(cu.getCid()+"----"+cu.getName());
//&&&Map map=new
HashMap();
//&&&map.put("name",
cus.getName());
//&&&map.put("password",
cus.getPassword());
//&&&map.put("msg",
//&&&Integer
in=(Integer) t1.getProcedure(map);
//&&&System.out.println(in);
&&&Map map=new
HashMap();
&&&map.put("result",
list=(List) t1.getListCur(map);
&&&Iterator
it=list.iterator();
&&&while(it.hasNext()){
&&&&Customer
cust=(Customer) it.next();
&&&&System.out.println(cust.getCid()+"-----"+cust.getName());
&&&//System.out.println(t1.getListCur(map));
list=t1.getLike("x");
//&&&Iterator
it=list.iterator();
//&&&while(it.hasNext()){
//&&&&Customer
cust=(Customer) it.next();
//&&&&System.out.println(cust.getCid()+"----"+cust.getPassword());
list=t1.getLike2("%z%");
//&&&Iterator
it=list.iterator();
//&&&while(it.hasNext()){
//&&&&Customer
cust=(Customer) it.next();
//&&&&System.out.println(cust.getCid()+"----"+cust.getPassword());
&&} catch (SQLException e)
&&&e.printStackTrace();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&Java和Ibatis调用存储过程并取得返回值详解
存储过程可以减少sql语句的网络传输,使得很多开发人员喜欢用存储过程,但是如果想把存储过程用好,用灵活还是需要花费一定的时间和努力的。本文主要java调用存储过程和ibatis调用存储过程并取得返回值的实现,并给出了详细的代码。本实例采用的是Oracle 10g。
java调用存储过程并取得返回值如下:
package&com.;&& &&import&java.sql.CallableS&& &&import&java.sql.C&& &&import&java.sql.DriverM&& &&import&java.sql.ResultS&&&
public&static&void&main(String[]&args)&{&& &&//&TODO&Auto-generated&method&stub&&& &&try{&& &&Class.forName(&oracle.jdbc.driver.OracleDriver&);&& &&Connection&ct&=&DriverManager.getConnection(&jdbc:oracle:thin:@172.17.40.227:1521:orcl&,&scott&,&tiger&);&& &&//参数说明:表名、每页显示记录数、当前页,总记录数、总页数、结果集&&& &&CallableStatement&cs&=&ct.prepareCall(&{call&paging_pro(?,?,?,?,?,?)}&);&& &&//以下三个都是in类型的参数&&& &&//给第一个参数赋值&&& &&cs.setString(1,&&emp&);&& &&//给第二个参数注册&&& &&cs.setInt(2,&10);&& &&//给第三个参数注册&&& &&cs.setInt(3,&1);&&&
//以下三个是out类型的参数,必须在java中进行注册&&&
cs.registerOutParameter(4,&oracle.jdbc.OracleTypes.INTEGER);&& &&cs.registerOutParameter(5,&oracle.jdbc.OracleTypes.INTEGER);&& &&cs.registerOutParameter(6,&oracle.jdbc.driver.OracleTypes.CURSOR);&&&
//执行存储过程 &&
cs.execute();&& &&System.out.println(&表名:emp,每页显示记录数:10,当前页:1&);&& &&System.out.println(&总记录数:&+cs.getInt(4)+&&总页数&+cs.getInt(5));&&&
//通过getObject获得cursor中的数据集,强制转换为ResultSet &&
ResultSet&rs&=&(ResultSet)cs.getObject(6);&& &&while(rs.next()){&& &&System.out.println(rs.getInt(1)+&&&&+rs.getString(2)+&&&+rs.getFloat(6));&& &&}&& &&}catch(Exception&e){&& &&e.printStackTrace();&& &&}finally{&& &&//关闭资源&&& &&。。。。&& &&}&& &&}&& &&}&&&
下面介绍ibatis调用存储过程并取得返回值,该部分来自论坛:/topic/84224
ibatis中的xml代码如下:
xml&代码:
&class=&map&&id=&swapParameters&&&&property=&namestr&&&javaType=&java.lang.String&&jdbcType=&varchar&&mode=&IN&&&&property=&returnid&&&javaType=&java.lang.Integer&&jdbcType=&int&&mode=&OUT&&&&&&id=&insertNameByProcedure&&parameterMap=&swapParameters&&&{call&UP_GETINSERTEDIDENTITY_TT(?,?)} &&&&&
存储过程代码:
CREATE&PROCEDURE&`UP_GETINSERTEDIDENTITY_TT`(inname&VARCHAR(20),&OUT&returnid&INTEGER(11)) &&NOT&DETERMINISTIC& &&SQL&SECURITY&INVOKER &&COMMENT&'' &&BEGIN &&insert&into&`tt`(NAME)&values(inname); &&select&LAST_INSERT_ID()&into&returnid&; &&END;&
java代码:
Integer&returnid&=&null; &&HashMap,Object&paramMap&=&new&HashMap,Object(); &&paramMap.put(&namestr&,&insertname); &&paramMap.put(&returnid&,&returnid); &&this.getSqlMapClientTemplate().queryForObject(&insertNameByProcedure&,&paramMap); &&return&(Integer)paramMap.get(&returnid&);&&&
以上,要注意paramMap这个map中java、xml和sql中的关系就行了。
本文就介绍到这里,如果您想了解更多Oracle数据库的知识,可以看一下这里的文章:,您的收获就是我们最大的快乐!
【编辑推荐】
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力
(www.hnhaozhan.net)<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&您所在的位置: &
Java和Ibatis调用存储过程并取得返回值详解
Java和Ibatis调用存储过程并取得返回值详解
jiandanfeng2
本文主要介绍了Java和Ibatis调用存储过程的方法,并给出了详细的代码,希望能对读者有所帮助。
存储过程可以减少sql语句的网络传输,使得很多开发人员喜欢用存储过程,但是如果想把存储过程用好,用灵活还是需要花费一定的时间和努力的。本文主要java调用存储过程和ibatis调用存储过程并取得返回值的实现,并给出了详细的代码。本实例采用的数据库是Oracle 10g。
java调用存储过程并取得返回值如下:
package&com.&& &&import&java.sql.CallableS&& &&import&java.sql.C&& &&import&java.sql.DriverM&& &&import&java.sql.ResultS&&&
public&static&void&main(String[]&args)&{&& &&//&TODO&Auto-generated&method&stub&&& &&try{&& &&Class.forName(&oracle.jdbc.driver.OracleDriver&);&& &&Connection&ct&=&DriverManager.getConnection(&jdbc:oracle:thin:@172.17.40.227:1521:orcl&,&scott&,&tiger&);&& &&//参数说明:表名、每页显示记录数、当前页,总记录数、总页数、结果集&&& &&CallableStatement&cs&=&ct.prepareCall(&{call&paging_pro(?,?,?,?,?,?)}&);&& &&//以下三个都是in类型的参数&&& &&//给第一个参数赋值&&& &&cs.setString(1,&&emp&);&& &&//给第二个参数注册&&& &&cs.setInt(2,&10);&& &&//给第三个参数注册&&& &&cs.setInt(3,&1);&&&
//以下三个是out类型的参数,必须在java中进行注册&&&
cs.registerOutParameter(4,&oracle.jdbc.OracleTypes.INTEGER);&& &&cs.registerOutParameter(5,&oracle.jdbc.OracleTypes.INTEGER);&& &&cs.registerOutParameter(6,&oracle.jdbc.driver.OracleTypes.CURSOR);&&&
//执行存储过程 &&
cs.execute();&& &&System.out.println(&表名:emp,每页显示记录数:10,当前页:1&);&& &&System.out.println(&总记录数:&+cs.getInt(4)+&&总页数&+cs.getInt(5));&&&
//通过getObject方法获得cursor中的数据集,强制转换为ResultSet &&
ResultSet&rs&=&(ResultSet)cs.getObject(6);&& &&while(rs.next()){&& &&System.out.println(rs.getInt(1)+&&&&+rs.getString(2)+&&&+rs.getFloat(6));&& &&}&& &&}catch(Exception&e){&& &&e.printStackTrace();&& &&}finally{&& &&//关闭资源&&& &&。。。。&& &&}&& &&}&& &&}&&&
下面介绍ibatis调用存储过程并取得返回值,该部分来自论坛:/topic/84224
ibatis中的xml代码如下:
xml&代码:
&class=&map&&id=&swapParameters&&&&property=&namestr&&&javaType=&java.lang.String&&jdbcType=&varchar&&mode=&IN&&&&property=&returnid&&&javaType=&java.lang.Integer&&jdbcType=&int&&mode=&OUT&&&&&&id=&insertNameByProcedure&&parameterMap=&swapParameters&&&{call&UP_GETINSERTEDIDENTITY_TT(?,?)} &&&&&
存储过程代码:
CREATE&PROCEDURE&`UP_GETINSERTEDIDENTITY_TT`(inname&VARCHAR(20),&OUT&returnid&INTEGER(11)) &&NOT&DETERMINISTIC& &&SQL&SECURITY&INVOKER &&COMMENT&'' &&BEGIN &&insert&into&`tt`(NAME)&values(inname); &&select&LAST_INSERT_ID()&into&returnid&; &&END;&
java代码:
Integer&returnid&=&null; &&HashMap,Object&paramMap&=&new&HashMap,Object(); &&paramMap.put(&namestr&,&insertname); &&paramMap.put(&returnid&,&returnid); &&this.getSqlMapClientTemplate().queryForObject(&insertNameByProcedure&,&paramMap); &&return&(Integer)paramMap.get(&returnid&);&&&
以上,要注意paramMap这个map中java、xml和sql中的关系就行了。
本文就介绍到这里,如果您想了解更多Oracle数据库的知识,可以看一下这里的文章:,您的收获就是我们最大的快乐!
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&&&的更多文章
又是一周匆匆而过。上周五、周六两天,2013年51CTO云计算架构师
数据库产品
数据库综合
数据库新闻
维基百科将切换到另外一款开源数据库MariaDB
本专题将带领大家走入MongoDB的世界,了解MongoDB是怎
SQL Server 2008提供了全民啊行的空间支持,但同时空
你的SQL Server代码安全吗?请你与我一起跟随作者来探
Linux主要用于架设网络服务器。如今关于服务器和网站被黑客攻击的报告几乎每天都可以见到,而且随着网络应用的丰富多样,攻击的
51CTO旗下网站

我要回帖

更多关于 sqlserver 调用函数 的文章

 

随机推荐