天天看点

Mybatis使用存储过程访问数据库

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

  • 使用简单的存储过程(MyBatis的sql语句是以xml格式写的):

     <select id="searchPidByP_id" parameterType="int"  resultMap="PidSegment2t_patient">

       SELECT tp_name,tp_number,tp_code,tp_doctor FROM t_patient

       WHERE tp_id=#{p_id}   

       LIMIT 1;        

     </select>

输入参数可以是基本类型(单个输入参数),可以是java容器,也可以是java对象,根据需要设置“parameterType”即可。结果集可以用resultType(一般是数据库字段名和java对象属性名一致)或resultMap(数据库字段名和java对象属性名不一致时进行映射)。spring架构中,xml文件相当于存储函数的实现,存储函数的声明在接口中,在service层,通过接口调用存储函数。注意:不管是resultMap 还是resultType,都是对一条记录的格式的规定,而不是针对整个结果集。比如resultMap是一个java对象,意思是对每条记录都映射成一个java对象,如果有多条记录,则接口的返回参数应是该对象的列表,如List<pojo>。

  • 调用存储过程

这里举一个比较全面的例子,即存储过程有多个输入参数,多个输出参数,还有结果集。有两种方式:

(1)

 <select id="searchHealthCheckByP_num"  resultMap="hc_bean2t_hc_table"  statementType="CALLABLE"

 parameterType="java.util.HashMap">

     { CALL p_thc_s(

      #{stage_id,mode=IN,jdbcType=INTEGER},

      #{p_id,mode=IN,jdbcType=INTEGER},       

        #{p_number_id,mode=OUT,jdbcType=INTEGER},

        #{p_number_name,mode=OUT,jdbcType=VARCHAR}

     )    

      }      

 </select>

访问时只需要把输入参数传入map中,输出参数不用管,当调用函数成功时,可用过该map访问返回的参数。而结果集则用函数的返回参数访问。

(2)

<parameterMap type="map" id="health_check_parm">    

   <parameter property="stage_id" jdbcType="INTEGER" mode="IN"/>    

   <parameter property="p_id" jdbcType="INTEGER" mode="IN"/>    

   <parameter property="p_number_id" jdbcType="INTEGER" mode="OUT"/>    

   <parameter property="p_number_name" jdbcType="VARCHAR" mode="OUT"/>    

 </parameterMap>    

<select id="searchHealthCheckByP_id"   resultMap="hc_bean2t_hc_table"  statementType="CALLABLE"

parameterMap="health_check_parm">  

      {CALL p_thc_s(?,?,?,?)

      }  

两种方式只是写起来不同,调用方法一样

上一篇: hql学习