`

MyIbatis:存储过程(增,删,改,查)

    博客分类:
  • J2EE
阅读更多
参考资料
1 ibatis3.0存储过存的一些细节
http://blog.csdn.net/axman/archive/2010/03/05/5349349.aspx
2 ibatis3.X如何调用Oracle存储过程定义的in数组
http://topic.csdn.net/u/20110125/20/ade11108-761e-4b2d-96c4-fae83907ea9f.html
3 ibatis3调用存储过程
http://www.iteye.com/topic/531456
4 ibatis2.0与ibatis3.0 调用存储过程(SQL)
http://blog.sina.com.cn/s/blog_62e744e60100olfr.html

对于MyIbatis调用存储过程的一个特点是:使用Map传递参数
此示例是在前二个MyIbatis示例基础之上得来的


一 环境:XP3+Oracle10g+MyEclipse6+(Tomcat)+JDK1.5

二 Oracle存储过程

1 添加用户
create or replace procedure addUser(u_id in varchar2,u_name in varchar2,u_age in integer,u_sex in varchar2,u_address in varchar2,u_pwd in varchar2,message out varchar2) is
  begin
     insert into users (id,name,age,sex,address,password)VALUES(u_id,u_name,u_age,u_sex,u_address,u_pwd);
      message := '插入用户表成功';
     commit;    
  EXCEPTION
  WHEN OTHERS THEN
  message :='插入用户表失败';
end addUser;


2 修改用户
create or replace procedure updateUser(u_id in varchar2,u_name in varchar2,u_age in integer,u_sex in varchar2,u_address in varchar2,u_pwd in varchar2,message out varchar2) is
  begin
     update users u set name=u_name,age=u_age,sex=u_sex,address=u_address,password=u_pwd where id=u_id;
      message := '更新用户表成功';
     commit;
  EXCEPTION
  WHEN OTHERS THEN
  message :='更新用户表失败';
end updateUser;

3 删除用户
create or replace procedure delUser(u_id in varchar2,message out varchar2) is
  begin
     delete users  where id=u_id;
      message := '删除用户表成功';
     commit;
  EXCEPTION
  WHEN OTHERS THEN
  message :='删除用户表失败';
end delUser;

4 查询用户
create or replace package JUV is  
  TYPE CUR_GETUSER IS REF CURSOR;   
end JUV;

create or replace procedure getAllUser(userList out JUV.CUR_GETUSER)
as
begin
open userList for select * from users;       
end getAllUser;


三 UserMapper.java
public interface UserMapper{
	
	public int checkUserExits(User user);		
	
	public void addUser(User user);		
	//测试存储过程插入
	public void addUserProc(Map user);
	public List<User> getAllUser(Map map);	
	public void selectByProc(Map<String,Integer> p);	
	public void editUserProc(Map map);
	public void delUserProc(Map map);
	public void testCounts(Map map);
}

四 映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liuzd.ssm.mapper.UserMapper">

	<resultMap type="com.liuzd.ssm.entity.User" id="userMap">
		<id property="id" column="id" />
		<result property="name" column="name" />
		<result property="age" column="age" />
		<result property="sex" column="sex" />
		<result property="address" column="address" />
		<result property="password" column="password" />
	</resultMap>

	<select id="selectByProc" statementType="CALLABLE">
		{call pp(#{x},#{y},#{z,mode=OUT,jdbcType=INTEGER})}
	</select>

	<!-- 调用存储过程 -->
	<select id="getAllUser" statementType="CALLABLE">
		{call getAllUser(#{userList,<!-- 参数 -->
		mode=OUT,<!-- 参数类型 -->
		javaType=java.sql.ResultSet,<!-- 参数java类型 -->
		jdbcType=CURSOR,<!-- 参数jdbc类型 -->
		resultMap=userMap<!-- ResultSet需要resultMap参数 -->
		})}
	</select>
	<!-- 也可用insert标签 
		<select id="addUserProc" statementType="CALLABLE" >  
		{call addUser(#{id},#{name},#{age},#{sex},#{address},#{password},#{message, mode=OUT,javaType=string,jdbcType=VARCHAR})} 
		</select>
	-->

	<insert id="addUserProc" statementType="CALLABLE">
		{call
		addUser(#{id},#{name},#{age},#{sex},#{address},#{password},#{message,
		mode=OUT,javaType=string,jdbcType=VARCHAR})}
	</insert>
	<update id="editUserProc" statementType="CALLABLE">
		{call
		updateUser(#{id},#{name},#{age},#{sex},#{address},#{password},#{message,
		mode=OUT,javaType=string,jdbcType=VARCHAR})}
	</update>
	<delete id="delUserProc" statementType="CALLABLE">
		{call delUser(#{id},#{message,
		mode=OUT,javaType=string,jdbcType=VARCHAR})}
	</delete>
<select id="checkUserExits"
		parameterType="com.liuzd.ssm.entity.User" resultType="int">
		select count(*) from users where name=#{name} and
		password=#{password}
	</select>

	<select id="getCounts" resultType="long">
		select count(*) from users
	</select>

	<select id="getUserList" resultType="java.util.List"
		resultMap="userMap">
		select * from users
	</select>

	<select id="getUserListByQuery" parameterType="map"
		resultType="java.util.List" resultMap="userMap">
		select * from users
		<where>
			<if test="name != null and name != ''">
				and name like CONCAT(CONCAT('%', #{name}),'%')
			</if>
		</where>
	</select>

	<select id="getUserDynamicSql" parameterType="object[]"
		resultType="list">
		select * from users
		<where>
			<if test="array[0]">and name like #{array[0]}</if>
			<if test="array[1]">and sex = #{array[1]}</if>
		</where>
	</select>

	<select id="pageList" parameterType="map" resultType="list"
		resultMap="userMap">

		select ttt.* from(select tt.*,rownum rn from(select * from users
		<where>
			<if test="name != null and name != ''">
				<!-- 
					特别提醒一下, $只是字符串拼接, 所以要特别小心sql注入问题。
					在开发时使用: $,方便调试sql,发布时使用: #
					and name like #{name},
				-->
				and name like '%${name}%'
			</if>
			<if test="sex != null and sex != ''">and sex = #{sex}</if>
		</where>
		order by ${orderName} ${descAsc} )tt)ttt
		<where>
			<if test="startIndex != null and startIndex != ''">
				rn > ${startIndex}
			</if>
			<if test="endIndex != null and endIndex != ''">
				<![CDATA[ and rn <= ${endIndex}  ]]>
			</if>
		</where>
	</select>

	<select id="pageCounts" parameterType="map" resultType="long">
		select count(*) from users
		<where>
			<if test="name != null and name != ''">
				and name like #{name}
			</if>
			<if test="sex != null and sex != ''">and sex = #{sex}</if>
		</where>
	</select>

	<select id="getUserListByQueryUser"
		parameterType="com.liuzd.ssm.entity.User" resultType="java.util.List"
		resultMap="userMap">
		select * from users where 1=1
		<if test="name != null and name != ''">
			and name like CONCAT(CONCAT('%', #{name}),'%')
		</if>
	</select>

	<select id="getUserByUid" parameterType="string"
		resultType="com.liuzd.ssm.entity.User">
		select * from users where id=#{id}
	</select>

	<select id="getUserByUids" parameterType="list"
		resultType="java.util.List" resultMap="userMap">
		select * from users where id in
		<foreach collection="list" item="classList" open="("
			separator="," close=")">
			#{classList}
		</foreach>
	</select>

	<update id="editUser" parameterType="com.liuzd.ssm.entity.User">
		update users
		<set>
			<if test="name != null and name != ''">name = #{name},</if>
			<if test="age > 0">age = #{age},</if>
			<if test="sex != null and sex != ''">sex = #{sex},</if>
			<if test="address != null and address != ''">
				address = #{address},
			</if>
			<if test="password != null and password != ''">
				password = #{password}
			</if>
		</set>
		where id=#{id}
		<!-- update users set name=#{name},age=#{age},sex=#{sex},address=#{address},password=#{password} where id=#{id} -->
	</update>
	<insert id="addUser" parameterType="com.liuzd.ssm.entity.User">
		insert into users
		(id,name,age,sex,address,password)VALUES(#{id},#{name},#{age},#{sex},#{address},#{password})
	</insert>
	<delete id="delUser" parameterType="string">
		delete users where id=#{id}
	</delete>
</mapper>

五 测试用例

package com.liuzd.ssm.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.RandomStringUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.liuzd.ssm.entity.User;

public class UserServiceTestProc {
	
	private static ApplicationContext ctx;
	
	@BeforeClass
	public static void beforeClass() {
		 ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
	}
	
	@AfterClass
	public static void afterClass() {
		ctx = null;
	}	
	
	public UserService getUserService(){
		return (UserService)ctx.getBean("userService");
	}	
	
	@Test
	public void testAddUser(){		
		Map user = new HashMap();
		user.put("age",23);
		user.put("id",RandomStringUtils.randomAlphanumeric(32));		
		user.put("name","李风");
		user.put("address","南京市");
		user.put("password","123");
		user.put("sex","1");		
		getUserService().addUser2(user);
		System.out.println(user.get("message"));
	}	
	
	

	@Test
	public void testUpdateUserProc(){		
		Map user = new HashMap();
		user.put("id","7MhpyKczvyh5GaevvZdl49Box2nXvhHx");		
		user.put("age",98);
		user.put("name","李风所");
		user.put("address","南京市");
		user.put("password","123");
		user.put("sex","1");		
		getUserService().editUser2(user);
		System.out.println(user.get("message"));
	}
	
	@Test
	public void testDelUser(){		
		Map map = new HashMap();
		map.put("id", "rl8hxuCW21hsZnVPopKmu0VohRow7yCk");
		getUserService().delUser2(map);			
		System.out.println(map.get("message"));
	}
	
	@Test
	public void testGetUserListProc(){		
		Map map = new HashMap(); 		
		getUserService().getAllUser(map);
		List<User> list = (List<User>) map.get("userList");  
		for (User user : list) {
			System.out.println(user.getAge() + "," + user.getName());
		}
		System.out.println("size :"  + list.size());
	}		
}
分享到:
评论
3 楼 liu_langtu 2014-09-24  
查询好像不行 返回值为空
2 楼 java苏打粉 2011-12-28  
1 楼 wenjinglian 2011-12-25  
写得不错

相关推荐

    myeclipse 实现框架 spring+springmvc+springsecurity+myibatis+mysql用户认证和人员增删改查

    myeclipse 利用框架 spring+springmvc+springsecurity+myibatis+mysql 实现用户认证和人员增删改查的demo 1.用户认证库与人员管理库是同一个库,我这里为了方便配置文件区别为datasource和securitydatasource 2.这...

    Myibatis+mysql(适用于新手入门)

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使你更好地将精力集中在你的业务逻辑上,而不是数据访问...

    springMVC+Myibatis框架整合实例

    整合SpringMVC和MyBatis的过程主要包括以下几个步骤: 1. 引入依赖:在项目中添加SpringMVC和MyBatis的依赖库,通常是在pom.xml文件中添加对应的Maven依赖。 2. 配置Spring:创建Spring的配置文件(如...

    myIbatis入门示例、myIbatis helloword示例、myIbatis第一个示例

    本教程将带你一步步走进MyBatis的世界,通过"myIbatis入门示例、myIbatis helloworld示例、myIbatis第一个示例",让你快速掌握MyBatis的核心概念和基本用法。 1. MyBatis简介 MyBatis由Mike Keith和Clinton Begin...

    MyIbatIS中文版电子书

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,解决了在Java中操作数据库时的繁琐性,提升了开发效率。 在本书中,你将学习到以下核心知识点: 1. **MyBatis概述**:了解MyBatis的基本...

    MyiBatis_用户手册

    MyiBatis_用户手册包含以下资源: 1.iBatis2.0 开发指南中文版 2.MyiBatis3 用户指南中文版 3.MyiBatis Spring 1.0.0-snapshot 参考文档 以上都是pdf格式文档

    myibatis+spring+springmvc框架整合

    "webbuilder"可能是本次整合示例项目的名称,这个项目可能包含了配置文件、源代码、测试用例等,帮助学习者快速理解和实践MyBatis+Spring+SpringMVC的整合过程。 总之,MyBatis、Spring和SpringMVC的整合为Java Web...

    myibatis实战教程

    3. 数据的增删改查(CRUD)操作,通过Mapper接口和XML映射文件实现。 4. 关联数据查询,利用MyBatis的嵌套结果映射和关联查询功能。 5. 与Spring框架的集成,包括Spring3,以实现更高效的服务管理和事务管理。 6. 与...

    MyIbatis3.0入门实例

    MyIbatis3.0入门+进阶实例,直接把资源工程导入到MyEclise里就可以运行,导入到Eclipse里也可以, 包含: ---ibatis_3_学习笔记.pdf ---ibatis3__发布_入门示例.pdf 可以带你熟练使用MyIbatis3.0,实例代码对MyIbatis3.0...

    SpringMVC3.0+MyIbatis3.0(分页示例

    在IT行业中,SpringMVC和MyBatis是两个非常重要的框架,它们被广泛应用于Java Web开发。本示例聚焦于如何在SpringMVC 3.0和MyBatis 3.0环境中实现分页功能,这在处理大量数据时尤其重要,能够提高用户体验并减轻...

    spring mvc3.2.3+ myibatis3.2.2

    spring mvc3.2.3+ myibatis3.2.2 分 dao service pojo mapper controllor等层,有敢于网上下载多不适用,故作一层次分明功能较全面(列表,登录验证,增加)的功能验证性web程序以为分享,因程序为功能验证性程序,...

    myibatis开发官方帮助文档

    1. **MyBatis简介**:MyBatis的起源、目标和核心特性,如简化SQL操作、支持存储过程和动态SQL等。 2. **安装与配置**:如何在项目中引入MyBatis,配置主配置文件(mybatis-config.xml),以及数据源和...

    SpringMvc3+MyIbatis3

    MyBatis是一个支持定制化SQL、存储过程以及高级映射的持久层框架,它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。本文将介绍SpringMvc和MyIbatis的配合使用,而关于SpringMvc的详细介绍可以参考作者之前...

    MyiBatis3源码+用户指南

    3. **SQL执行**:解析了如何通过SqlSession接口执行增删查改操作,以及Mapper接口和Mapper XML文件的绑定。 4. **缓存**:MyBatis提供了本地缓存和二级缓存机制,有助于提高数据访问性能。了解何时启用缓存,以及...

    Spring + SpringMVC + Myibatis + Druid 整合源码

    Spring + SpringMVC + Myibatis + Druid 整合源码,修改log4j.properties中log4j.appender.A1.File=YOUR-LOG-PATH,log4j.appender.FILE.File=YOUR-LOG-FILE

    Myibatis3.4.2 SpringMVC4.2.0-合并(SSM框架)源码

    MyBatis 是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...

    springMVC+myibatis的maven项目架构

    通过XML或注解配置,可以定义SQL查询、存储过程以及复杂的映射。MyBatis的动态SQL功能使得在编写SQL时无需关心参数类型和结果映射,大大简化了开发工作。 3. **Maven项目管理** Maven是Java项目的构建工具,它通过...

    myIbatis3jar与用户文档

    MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...

    myibatis3和springMVC整合

    MyBatis3与SpringMVC的整合是Java开发中常见的技术组合,主要用于构建高效、灵活的Web应用程序。这种整合能够充分利用...在实际开发过程中,还需要注意事务管理和日志记录等细节,以确保系统的稳定性和可追溯性。

    springmvc-myibatis-heibernate

    DispatcherServlet 负责接收请求并分发到相应的处理器,Controller 处理业务逻辑,Model 存储数据,View 负责展示结果,ViewModel 用于在Controller和View之间传递数据。 **MyBatis** MyBatis 是一个轻量级的持久层...

Global site tag (gtag.js) - Google Analytics