zoukankan      html  css  js  c++  java
  • mysql存储过程

    数据库的存储过程可以减少程序代码的重复性,使程序更加简洁易懂

    最近在学习mysql存储过程中遇到了一些有趣的问题:

    1、在写存储过程的时候,存储过程名后面一定要加上括号,就算没有参数也要加,不然就会报错

    2、在调用存储过程时,没有参数的存储过程可以加括号也可以不加括号

    3、由于mysql是不区分大小写的,这点跟SQL不一样。所以在给存储过程入参起名字的时候不要以列名的小写字母来取,不然就会出现原本是更改或操作一条记录的,结果则修改了整个表

    1 create procedure update_name(IN name varchar(20), IN id INT)
    2 begin
    3 update student
    4 set sname=name where ID=id;
    5 end

    这段代码本应该修改一条记录,结果会把整个表的记录都修改。由于不区分大小写,所以ID=id一直为真。

    4、在mybatis程序中调用存储过程的主要代码:

    无参的存储过程调用比较简单:

    1 <select id="selectAllStudent" statementType="CALLABLE">
    2   <![CDATA[  
    3     {call selectallstudent()}
    4    ]]> 
    5   </select>

    这里的id一定要与接口中一样。

    有参数的存储过程调用有两种方法:

    第一种:

    xml中:

    1 <select id="updateNameById" statementType="CALLABLE">
    2  <![CDATA[  
    3     {call update_name(#{id},#{name})}
    4    ]]> 
    5  </select>

    dao层接口中:

     1 void updateNameById(@Param("id")int id,@Param("name")String psid); 

    参数名必须对应,不要会出现绑定失败的错误。

    第二种:

    XML中:

     1 <parameterMap type="java.util.HashMap" id="update_name">
     2 <parameter property="id" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/> 
     3 <parameter property="name" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/> 
     4 </parameterMap>
     5 
     6   
     7 <select id="updateNameById" parameterMap="update_name"  statementType="CALLABLE">
     8 <![CDATA[  
     9     {call update_psid(?,?)}
    10    ]]> 
    11  </select>

    dao层接口中:

     1 void updateNameById(MAP<String,Object> map); 

    这里的parameterMap的参数名不能为空,不然会出错

    5、在调用返回结果集的存储过程时,应该有对应的ResultMap,该参数也不能为空,不然会出现莫名其妙的错误。服务器在启动时不会发现这个错误,但是在测试时会出现

    程序中的Mapper之间莫名其妙的不对应,照成原因 是Result Map 没有值 在出现错去的Mapper中。

     

  • 相关阅读:
    (22)进程和线程区别
    (21)回调函数
    (20)gevent协程
    (18)ProcessPoolExecutor进程池
    (19)ThreadPoolExecutor线程池
    (17)线程队列---queue LifoQueue PriorityQueue
    (16)线程---定时器Timer
    (15)线程---Condition条件
    (14)线程- Event事件和守护线程Daemon
    IDEA快速搭建WEB项目【记录篇】
  • 原文地址:https://www.cnblogs.com/John-Lyn/p/3835430.html
Copyright © 2011-2022 走看看