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(?,?,?,?)
}
两种方式只是写起来不同,调用方法一样