Ibatis调用存储过程实现增删改以及分页查询
1、Ibatis实现增删改操作很简单了,通常我是将某一模块的增删改功能写在一个存储过程里,通过一个标识符去区分执行增加还是修改抑或删除操作。
statement:
<!-- 存储过程:实现学生的增删改操作 -->
<procedure id="crud" parameterClass="xuesheng" >
{call PRO_STUDENT_SUBMIT(
#xs_id#,
#xs_name#,
#zy_id#,
#xs_num#,
#xs_sfz#,
#xs_tel#,
#xs_email#,
#xs_address#,
#xs_sex#,
#xs_date#,
#bq#
)}
</procedure>
procedure:
create or replace procedure PRO_STUDENT_SUBMIT(
v_xs_id in varchar2,
v_xs_name in varchar2,
v_zy_id in varchar2,
v_xs_num in varchar2,
v_xs_sfz in varchar2,
v_xs_tel in varchar2,
v_xs_email in varchar2,
v_xs_address in varchar2,
v_xs_sex in varchar2,
v_xs_date in varchar2,
v_bq in varchar2
) is
begin
--当bq为1时,执行添加操作;为2时,执行修改操作;为3时执行删除操作
if (v_bq = '1') then
insert into xs
(xs_id, xs_name, zy_id, xs_num, xs_sfz, xs_tel, xs_email, xs_address, xs_sex,xs_date)
values
(seq_xs.nextval , v_xs_name, v_zy_id, v_xs_num, v_xs_sfz, v_xs_tel, v_xs_email, v_xs_address, v_xs_sex,v_xs_date);
end if; if (v_bq = '2') then
update xs
set xs_id = v_xs_id,
xs_name = v_xs_name,
zy_id = v_zy_id,
xs_num = v_xs_num,
xs_sfz = v_xs_sfz,
xs_tel = v_xs_tel,
xs_email = v_xs_email,
xs_address = v_xs_address,
xs_sex = v_xs_sex,
xs_date=v_xs_date
where xs_id = v_xs_id;
end if; if (v_bq = '3') then
delete xs
where xs_id = v_xs_id;
end if;
end PRO_STUDENT_SUBMIT;
2、重要要说的是通过ibatis调用存储过程实现分页查询(带模糊查询),我们需要有一个返回参数,该参数是游标类型。
通过调用存储过程实现的分页查询要比上文介绍的ibatis分页查询性能上好很多。
代码实例如下(经测试完全好使,ibatis版本2.3)
/**
* 在存储过程内实现查询的分页 与 模糊查询
* 需要传入到存储过程的参数 模糊查询的包括 学生姓名 学号 性别 入学时间的起止两个时间 一共5个
* 分页需要的参数 那就是 pageNo pageSize 一共2个 总共需要7个IN参数 返回的肯定是游标了 所以有一个OUT 类型的 CURSOR;
* 这些IN 参数都可以通过page对象传过去
*/
public String queryByPro (){
((XueShengPage)page).setXs_name(xs.getXs_name());
((XueShengPage)page).setXs_num(xs.getXs_num());
((XueShengPage)page).setDateFrom(xs.getPage_dateFrom());
((XueShengPage)page).setDateTo(xs.getPage_dateTo());
((XueShengPage)page).setXs_sex(xs.getXs_sex());
Date nowMilDate = new Date();
long time1 = nowMilDate.getTime();
xsList=this.xsService.queryByPro((XueShengPage)page);
Date time2 = new Date();
LogUtil.info("存储过程实现分页查询用时:"+(time2.getTime()-time1));
return "query";
}
public List queryByPro(XueShengPage page) {
int rowCount=this.dao.queryForInt("xuesheng.queryListCount", page);//查询总条数
page.setRowCount(rowCount);
page.accountPageCount();//计算总页数
List xsList=new ArrayList();
Map map1 = new HashMap();
map1.put("xs_name",page.getXs_name());
map1.put("xs_num", page.getXs_num());
map1.put("xs_sex", page.getXs_sex());
map1.put("dateFrom", page.getDateFrom());
map1.put("dateTo", page.getDateTo());
map1.put("pageNo", page.getPageNo());
map1.put("pageSize", page.getPageSize());
this.dao.queryOne("xuesheng.pro_cursor", map1);
List<Map> list=(List<Map>) map1.get("backcursor");//调用存储过程进行查询
for(int i=0;i<list.size();i++){
XueSheng xs=new XueSheng();//需要传递模糊查询 和 分页所需要的参数(页号pageNo和每页显示多少条pageSize)
xs.setXs_id(list.get(i).get("xs_id").toString());
xs.setXs_address(list.get(i).get("xs_address").toString());
xs.setXs_date(list.get(i).get("xs_date").toString());
xs.setXs_email(list.get(i).get("xs_email").toString());
xs.setXs_name(list.get(i).get("xs_name").toString());
xs.setXs_num(list.get(i).get("xs_num").toString());
xs.setXs_sex(list.get(i).get("xs_sex").toString());
xs.setXs_sfz(list.get(i).get("xs_sfz").toString());
xs.setXs_tel(list.get(i).get("xs_tel").toString());
xs.setXy_name(list.get(i).get("xy_name").toString());
xs.setZy_id(list.get(i).get("zy_id").toString());
xs.setZy_name(list.get(i).get("zy_name").toString());
xsList.add(xs);
}
return xsList;
}
<resultMap class="hashmap" id="backmap">
<result property="xs_id" column="XS_ID"/>
<result property="xs_name" column="XS_NAME"/>
<result property="zy_id" column="ZY_ID"/>
<result property="xs_num" column="XS_NUM"/>
<result property="xs_sfz" column="XS_SFZ"/>
<result property="xs_tel" column="XS_TEL"/>
<result property="xs_email" column="XS_EMAIL"/>
<result property="xs_address" column="XS_ADDRESS"/>
<result property="xs_date" column="XS_DATE"/>
<result property="xs_sex" column="XS_SEX"/>
<result property="zy_name" column="ZY_NAME"/>
<result property="xy_name" column="XY_NAME"/>
</resultMap> <parameterMap class="hashmap" id="pro_cursor_map">
<parameter property="backcursor" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT" resultMap="backmap"/>
<parameter property="xs_name" javaType="String" jdbcType="VARCHAR" mode="IN"/>
<parameter property="xs_num" javaType="String" jdbcType="VARCHAR" mode="IN"/>
<parameter property="xs_sex" javaType="String" jdbcType="VARCHAR" mode="IN"/>
<parameter property="dateFrom" javaType="String" jdbcType="VARCHAR" mode="IN"/>
<parameter property="dateTo" javaType="String" jdbcType="VARCHAR" mode="IN"/>
<parameter property="pageNo" javaType="int" jdbcType="NUMBER" mode="IN"/>
<parameter property="pageSize" javaType="int" jdbcType="NUMBER" mode="IN"/>
</parameterMap> <procedure id="pro_cursor" parameterMap="pro_cursor_map">
{call queryXsByPro(?,?,?,?,?,?,?,?)}
</procedure>
create or replace procedure queryXsByPro
(
my_cursor out sys_refcursor,
v_xs_name IN VARCHAR2,
v_xs_num in varchar2,
v_xs_sex in varchar2,
v_dateFrom in varchar2,
v_dateTo in varchar2,
v_pageNo in number,
v_pageSize in number
)
as
xs_begin number(10);--从哪条记录开始查
xs_end number(10);--查到哪条记录结束
v_sql varchar2(1000);
begin
xs_begin:=(v_pageNo-1)*v_pageSize+1;
xs_end :=xs_begin+v_pageSize;
v_sql :=
'SELECT
XS_ID,
XS_NAME,
XS.ZY_ID,
XS_NUM,
XS_SFZ,
XS_TEL,
XS_EMAIL,
XS_ADDRESS,
XS_DATE,
XS_SEX,
ZY.ZY_NAME,
XY.XY_NAME
FROM XS XS
INNER JOIN ZY ZY
ON XS.ZY_ID = ZY.ZY_ID
INNER JOIN XY
ON XY.XY_ID = ZY.XY_ID
WHERE 1=1 ';
if v_xs_sex is not null then
v_sql :=v_sql||' and xs_sex=v_xs_sex ';
end if; if v_dateFrom is not null then
v_sql :=v_sql||' and to_date(xs_sex,''yyyy-MM-dd'')>=to_date(v_dateFrom,''yyyy-MM-dd'') ';
end if; if v_dateTo is not null then
v_sql :=v_sql||' and to_date(xs_sex,''yyyy-MM-dd'')<=to_date(v_dateTo,''yyyy-MM-dd'') ';
end if;
v_sql:='select * from (select row_.*, rownum rownum_ from ('||v_sql;
v_sql:=v_sql || ')row_ where rownum<=' || xs_end || ' ) where rownum_>=' || xs_begin;
open my_cursor for v_sql;
end;
Ibatis调用存储过程实现增删改以及分页查询的更多相关文章
- OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)
公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...
- SpringMVC4+MyBatis3+SQLServer 2014 整合(包括增删改查分页)
前言 说起整合自然离开ssm,我本身并不太喜欢ORM,尤其是MyBatis,把SQL语句写在xml里,尤其是大SQL,可读性不高,出错也不容易排查. 开发环境 idea2016.SpringMVC4. ...
- node-express项目的搭建并通过mongoose操作MongoDB实现增删改查分页排序(四)
最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. Mongoose是在node.js ...
- IBatis.Net使用总结(四)-- IBatis 调用存储过程
IBatis 调用存储过程 http://www.cnblogs.com/jeffwongishandsome/archive/2010/01/10/1543219.html http://www.c ...
- Java和Ibatis调用存储过程并取得返回值详解
Java和Ibatis调用存储过程并取得返回值详解 2011-07-19 17:33 jiandanfeng2 CSDN博客 字号:T | T 本文主要介绍了Java和Ibatis调用存储过程的方法, ...
- jQuery调用WebService实现增删改查的实现
第一篇博客,发下我自己写的jQuery调用WebService实现增删改查的实现. 1 <!DOCTYPE html> 2 3 <html xmlns="http://ww ...
- C#利用WinForm调用WebServices实现增删改查
实习导师要求做一个项目,用Winform调用WebServices实现增删改查的功能.写下这篇博客,当做是这个项目的总结.如果您有什么建议,可以给我留言.欢迎指正. 1.首先,我接到这个项目的时候,根 ...
- oracle-扫盲贴:存储过程实现增删改查
原文引入:http://blog.csdn.net/yangzhawen/article/details/8617179 oracle-扫盲贴:存储过程实现增删改查 分类: oracle2013-02 ...
- ibatis调用存储过程(无返回参数)
ibatis调用存储过程例子: java: getSqlMapClientTemplate().insert(sql, paraMap) ibatis xml: <parameterMap id ...
随机推荐
- Android多线程断点续传下载
这个月接到一个项目.要写一个像360助手一样的对于软件管理的APP:当中.遇到了一个问题:多线程断点下载 这个 ,因为之前没有写过这方面的应用功能.所以.不免要自学了. 然后就在各个昂站上收索并整理了 ...
- Linux通过网卡驱动程序和版本号的信息
检查卡制造商和信号 查看基本信息:lspci 查看详情:lspci -vvv # 3小作文v 查看卡信息:lspci | grep Ethernet 查看网卡驱动 查看网卡驱动信息:lspci - ...
- 【转】利用Ajax.BeginForm提交文件
Ajax.BeginForm @using (Ajax.BeginForm("YourAction", "YourController", new AjaxOp ...
- 使用命令部署wsp包,并将其部署到不同的web应用程序
http://www.c-sharpcorner.com/uploadfile/anavijai/how-to-deploy-a-wsp-using-powershell-in-sharepoint- ...
- C#中静态方法的运用和字符串的常用方法(seventh day)
又来到了今天的总结时间,由于昨天在云和学院学的知识没有弄懂,今天老师又专门给我们非常详细地讲了一遍,在这里非常谢谢老师.O(∩_∩)O 话不多说,下面就开始为大家总结一下静态方法的运用和字符串的常用方 ...
- Java调用Oracle存储Package
Oracle的包Package中可以有很多存储,可通过该包的总调入口在java中直接调用. //java调用oracle的package代码 public boolean cal() throws j ...
- linux驱动调试--段错误之oops信息分析
linux驱动调试--段错误之oops信息分析 http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29401328&id= ...
- 【Linux命令】数据库mysql配置命令
# 检查MySQL服务器系统进程 ~ ps -aux|grep mysql mysql 1103 0.0 0.3 492648 51780 ? Ssl 14:04 0:21 /usr/sbin/mys ...
- HTML5 画布参考
描述 HTML5 <canvas> 标签用于绘制图像(通过脚本,通常是 JavaScript). 不过,<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) - 您必 ...
- Web性能优化方案
第一章 打开网站慢现状分析 在公司访问部署在IDC机房的VIP网站时会感觉很慢.是什么原因造成的?为了缩短页面的响应时间,改进我们的用户体验,我们需要知道用户的时间花在等待什么东西上. 可以跟踪一下我 ...