你的位置:首页 > ASP.net教程

[ASP.net教程]MyIbatis:存储过程(增,删,改,查)


参考资料 
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 添加用户 

Java代码  收藏代码

  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  
  2.   begin  
  3.      insert into users (id,name,age,sex,address,password)VALUES(u_id,u_name,u_age,u_sex,u_address,u_pwd);  
  4.       message := '插入用户表成功';  
  5.      commit;      
  6.   EXCEPTION  
  7.   WHEN OTHERS THEN  
  8.   message :='插入用户表失败';  
  9. end addUser;  



2 修改用户 

Java代码  收藏代码

  1. 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  
  2.   begin  
  3.      update users u set name=u_name,age=u_age,sex=u_sex,address=u_address,password=u_pwd where id=u_id;  
  4.       message := '更新用户表成功';  
  5.      commit;  
  6.   EXCEPTION  
  7.   WHEN OTHERS THEN  
  8.   message :='更新用户表失败';  
  9. end updateUser;  


3 删除用户 

Java代码  收藏代码

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


4 查询用户 

Java代码  收藏代码

  1. create or replace package JUV is    
  2.   TYPE CUR_GETUSER IS REF CURSOR;     
  3. end JUV;  
  4.   
  5. create or replace procedure getAllUser(userList out JUV.CUR_GETUSER)  
  6. as  
  7. begin  
  8. open userList for select * from users;         
  9. end getAllUser;  



三 UserMapper.java 

Java代码  收藏代码

  1. public interface UserMapper{  
  2.       
  3.     public int checkUserExits(User user);         
  4.       
  5.     public void addUser(User user);       
  6.     //测试存储过程插入  
  7.     public void addUserProc(Map user);  
  8.     public List<User> getAllUser(Map map);      
  9.     public void selectByProc(Map<String,Integer> p);    
  10.     public void editUserProc(Map map);  
  11.     public void delUserProc(Map map);  
  12.     public void testCounts(Map map);  
  13. }  


四 映射文件 

Java代码  收藏代码

  1. <?"1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <mapper namespace="com.liuzd.ssm.mapper.UserMapper">  
  5.   
  6.     <resultMap type="com.liuzd.ssm.entity.User" id="userMap">  
  7.         <id property="id" column="id" />  
  8.         <result property="name" column="name" />  
  9.         <result property="age" column="age" />  
  10.         <result property="sex" column="sex" />  
  11.         <result property="address" column="address" />  
  12.         <result property="password" column="password" />  
  13.     </resultMap>  
  14.   
  15.     <select id="selectByProc" statementType="CALLABLE">  
  16.         {call pp(#{x},#{y},#{z,mode=OUT,jdbcType=INTEGER})}  
  17.     </select>  
  18.   
  19.     <!-- 调用存储过程 -->  
  20.     <select id="getAllUser" statementType="CALLABLE">  
  21.         {call getAllUser(#{userList,<!-- 参数 -->  
  22.         mode=OUT,<!-- 参数类型 -->  
  23.         javaType=java.sql.ResultSet,<!-- 参数java类型 -->  
  24.         jdbcType=CURSOR,<!-- 参数jdbc类型 -->  
  25.         resultMap=userMap<!-- ResultSet需要resultMap参数 -->  
  26.         })}  
  27.     </select>  
  28.     <!-- 也可用insert标签   
  29.         <select id="addUserProc" statementType="CALLABLE" >    
  30.         {call addUser(#{id},#{name},#{age},#{sex},#{address},#{password},#{message, mode=OUT,javaType=string,jdbcType=VARCHAR})}   
  31.         </select>  
  32.     -->  
  33.   
  34.     <insert id="addUserProc" statementType="CALLABLE">  
  35.         {call  
  36.         addUser(#{id},#{name},#{age},#{sex},#{address},#{password},#{message,  
  37.         mode=OUT,javaType=string,jdbcType=VARCHAR})}  
  38.     </insert>  
  39.     <update id="editUserProc" statementType="CALLABLE">  
  40.         {call  
  41.         updateUser(#{id},#{name},#{age},#{sex},#{address},#{password},#{message,  
  42.         mode=OUT,javaType=string,jdbcType=VARCHAR})}  
  43.     </update>  
  44.     <delete id="delUserProc" statementType="CALLABLE">  
  45.         {call delUser(#{id},#{message,  
  46.         mode=OUT,javaType=string,jdbcType=VARCHAR})}  
  47.     </delete>  
  48. <select id="checkUserExits"  
  49.         parameterType="com.liuzd.ssm.entity.User" resultType="int">  
  50.         select count(*) from users where name=#{name} and  
  51.         password=#{password}  
  52.     </select>  
  53.   
  54.     <select id="getCounts" resultType="long">  
  55.         select count(*) from users  
  56.     </select>  
  57.   
  58.     <select id="getUserList" resultType="java.util.List"  
  59.         resultMap="userMap">  
  60.         select * from users  
  61.     </select>  
  62.   
  63.     <select id="getUserListByQuery" parameterType="map"  
  64.         resultType="java.util.List" resultMap="userMap">  
  65.         select * from users  
  66.         <where>  
  67.             <if test="name != null and name != ''">  
  68.                 and name like CONCAT(CONCAT('%', #{name}),'%')  
  69.             </if>  
  70.         </where>  
  71.     </select>  
  72.   
  73.     <select id="getUserDynamicSql" parameterType="object[]"  
  74.         resultType="list">  
  75.         select * from users  
  76.         <where>  
  77.             <if test="array[0]">and name like #{array[0]}</if>  
  78.             <if test="array[1]">and sex = #{array[1]}</if>  
  79.         </where>  
  80.     </select>  
  81.   
  82.     <select id="pageList" parameterType="map" resultType="list"  
  83.         resultMap="userMap">  
  84.   
  85.         select ttt.* from(select tt.*,rownum rn from(select * from users  
  86.         <where>  
  87.             <if test="name != null and name != ''">  
  88.                 <!--   
  89.                     特别提醒一下, $只是字符串拼接, 所以要特别小心sql注入问题。  
  90.                     在开发时使用: $,方便调试sql,发布时使用: #  
  91.                     and name like #{name},  
  92.                 -->  
  93.                 and name like '%${name}%'  
  94.             </if>  
  95.             <if test="sex != null and sex != ''">and sex = #{sex}</if>  
  96.         </where>  
  97.         order by ${orderName} ${descAsc} )tt)ttt  
  98.         <where>  
  99.             <if test="startIndex != null and startIndex != ''">  
  100.                 rn > ${startIndex}  
  101.             </if>  
  102.             <if test="endIndex != null and endIndex != ''">  
  103.                 <![CDATA[ and rn <= ${endIndex}  ]]>  
  104.             </if>  
  105.         </where>  
  106.     </select>  
  107.   
  108.     <select id="pageCounts" parameterType="map" resultType="long">  
  109.         select count(*) from users  
  110.         <where>  
  111.             <if test="name != null and name != ''">  
  112.                 and name like #{name}  
  113.             </if>  
  114.             <if test="sex != null and sex != ''">and sex = #{sex}</if>  
  115.         </where>  
  116.     </select>  
  117.   
  118.     <select id="getUserListByQueryUser"  
  119.         parameterType="com.liuzd.ssm.entity.User" resultType="java.util.List"  
  120.         resultMap="userMap">  
  121.         select * from users where 1=1  
  122.         <if test="name != null and name != ''">  
  123.             and name like CONCAT(CONCAT('%', #{name}),'%')  
  124.         </if>  
  125.     </select>  
  126.   
  127.     <select id="getUserByUid" parameterType="string"  
  128.         resultType="com.liuzd.ssm.entity.User">  
  129.         select * from users where id=#{id}  
  130.     </select>  
  131.   
  132.     <select id="getUserByUids" parameterType="list"  
  133.         resultType="java.util.List" resultMap="userMap">  
  134.         select * from users where id in  
  135.         <foreach collection="list" item="classList" open="("  
  136.             separator="," close=")">  
  137.             #{classList}  
  138.         </foreach>  
  139.     </select>  
  140.   
  141.     <update id="editUser" parameterType="com.liuzd.ssm.entity.User">  
  142.         update users  
  143.         <set>  
  144.             <if test="name != null and name != ''">name = #{name},</if>  
  145.             <if test="age > 0">age = #{age},</if>  
  146.             <if test="sex != null and sex != ''">sex = #{sex},</if>  
  147.             <if test="address != null and address != ''">  
  148.                 address = #{address},  
  149.             </if>  
  150.             <if test="password != null and password != ''">  
  151.                 password = #{password}  
  152.             </if>  
  153.         </set>  
  154.         where id=#{id}  
  155.         <!-- update users set name=#{name},age=#{age},sex=#{sex},address=#{address},password=#{password} where id=#{id} -->  
  156.     </update>  
  157.     <insert id="addUser" parameterType="com.liuzd.ssm.entity.User">  
  158.         insert into users  
  159.         (id,name,age,sex,address,password)VALUES(#{id},#{name},#{age},#{sex},#{address},#{password})  
  160.     </insert>  
  161.     <delete id="delUser" parameterType="string">  
  162.         delete users where id=#{id}  
  163.     </delete>  
  164. </mapper>  


五 测试用例 

Java代码  收藏代码

    1. package com.liuzd.ssm.service;  
    2.   
    3. import java.util.HashMap;  
    4. import java.util.List;  
    5. import java.util.Map;  
    6.   
    7. import org.apache.commons.lang3.RandomStringUtils;  
    8. import org.junit.AfterClass;  
    9. import org.junit.BeforeClass;  
    10. import org.junit.Test;  
    11. import org.springframework.context.ApplicationContext;  
    12. import org.springframework.context.support.ClassPath
    13.   
    14. import com.liuzd.ssm.entity.User;  
    15.   
    16. public class UserServiceTestProc {  
    17.       
    18.     private static ApplicationContext ctx;  
    19.       
    20.     @BeforeClass  
    21.     public static void beforeClass() {  
    22.          ctx = new ClassPath"applicationContext.
    23.     }  
    24.       
    25.     @AfterClass  
    26.     public static void afterClass() {  
    27.         ctx = null;  
    28.     }     
    29.       
    30.     public UserService getUserService(){  
    31.         return (UserService)ctx.getBean("userService");  
    32.     }     
    33.       
    34.     @Test  
    35.     public void testAddUser(){        
    36.         Map user = new HashMap();  
    37.         user.put("age",23);  
    38.         user.put("id",RandomStringUtils.randomAlphanumeric(32));          
    39.         user.put("name","李风");  
    40.         user.put("address","南京市");  
    41.         user.put("password","123");  
    42.         user.put("sex","1");          
    43.         getUserService().addUser2(user);  
    44.         System.out.println(user.get("message"));  
    45.     }     
    46.       
    47.       
    48.   
    49.     @Test  
    50.     public void testUpdateUserProc(){         
    51.         Map user = new HashMap();  
    52.         user.put("id","7MhpyKczvyh5GaevvZdl49Box2nXvhHx");        
    53.         user.put("age",98);  
    54.         user.put("name","李风所");  
    55.         user.put("address","南京市");  
    56.         user.put("password","123");  
    57.         user.put("sex","1");          
    58.         getUserService().editUser2(user);  
    59.         System.out.println(user.get("message"));  
    60.     }  
    61.       
    62.     @Test  
    63.     public void testDelUser(){        
    64.         Map map = new HashMap();  
    65.         map.put("id", "rl8hxuCW21hsZnVPopKmu0VohRow7yCk");  
    66.         getUserService().delUser2(map);           
    67.         System.out.println(map.get("message"));  
    68.     }  
    69.       
    70.     @Test  
    71.     public void testGetUserListProc(){        
    72.         Map map = new HashMap();          
    73.         getUserService().getAllUser(map);  
    74.         List<User> list = (List<User>) map.get("userList");    
    75.         for (User user : list) {  
    76.             System.out.println(user.getAge() + "," + user.getName());  
    77.         }  
    78.         System.out.println("size :"  + list.size());  
    79.     }         
    80. }