存储过程的使用总结

来源:互联网 发布:约束最优化问题求解 编辑:程序博客网 时间:2024/05/20 21:19

一、存储过程的使用:

1. 给参数赋值就可以了,一定要注意 #后的属性和赋值的属性保持

 <insert id="insert" statementType="CALLABLE" parameterType="com.chinanetcenter.service.itop.mybatis.entry.Employee" >
       <![CDATA[
           {call idc_oemp.prws_employee_add(
              #{code,mode=IN,jdbcType=VARCHAR},          
              #{name,mode=IN,jdbcType=VARCHAR},
              #{sex,mode=IN,jdbcType=VARCHAR},
              #{status,mode=IN,jdbcType=VARCHAR},
              #{post,mode=IN,jdbcType=VARCHAR},
              #{birthdate,mode=IN,jdbcType=TIMESTAMP},
              #{idcardno,mode=IN,jdbcType=VARCHAR},
              #{path,mode=IN,jdbcType=VARCHAR},
              #{phone,mode=IN,jdbcType=VARCHAR},
              #{qq,mode=IN,jdbcType=VARCHAR},
              #{wechataccount,mode=IN,jdbcType=VARCHAR},
              #{email,mode=IN,jdbcType=VARCHAR},
              #{departmentid,mode=IN,jdbcType=INTEGER},
              #{virtualteamid,mode=IN,jdbcType=VARCHAR},
              #{createtime,mode=IN,jdbcType=TIMESTAMP},
              #{loginname,mode=IN,jdbcType=VARCHAR},
              #{password,mode=IN,jdbcType=VARCHAR},
            
              #{returnCode,mode=OUT,jdbcType=INTEGER},
              #{returnMsg,mode=OUT,jdbcType=VARCHAR}
           )}    
       ]]>
    </insert>

     2.实体类的属性一定要跟存储过程输出的字段一样,用于接收处理结果。

     3.  这个类的属性可以映射到另外一个表的字段。这个过程不需要我处理。

    4.  输入参数的时候一定要考虑为空的情况。

二、 存储过程的传参方式有两种:Map和实体类。

1.  Map:参数比较少,且参数不属于类的属性;

public PageInfo<Employee> selectByTeamIDDepartId(int teamid_departid, int flag,  int pageNum, int                  pageSize){
Map param = new HashMap();
param.put("teamid_departid", teamid_departid);
param.put("flag", flag);
param.put("pageNum", pageNum);
param.put("pageSize", pageSize);
List<Employee> list = employeeMapper.selectByTeamIDDepartId(param);
。。。
return page;
}

2.  实体类:参数比较多,且参数属于类的属性。

      public void updateById(Employee record, int id){
record.setId(id);
employeeMapper.updateByPrimaryKey(record);
}

三、  操作数据库的时候报错:

自己先把参数输入测试一下是否是存储过程的问题,特别注意空字符串' '改成null,特别注意每个字段的输入类型。

    CALL idc_oemp.prws_employee_add('20161207143588','son','male', 'internship', '运维', '2016-11-20', '454480003388', 'F:\\test\\tt', '13821322488', '1503780117', 'lews1102', '4284425@qq.com', 12, ' ', '2016-12-05 11:38:19',  'gpssd888', 'wangsu@123', @returnCode, @returnMsg); 

要求输入:  varchar(1000)   没数据时 为 null,不能为' ' 。报一些奇怪的错,可能是参数的问题。



0 0