statementType:STATEMENT,PREPARED 或 CALLABLE 的一个. 这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement, 默认值: PREPARED.
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.fujitsu.tti.biz.f64.dao.itpdb.F64GoodsInfoSelectDao">
- <select id="goodsInfoSelect" parameterType="Integer" statementType="CALLABLE" resultType="com.fujitsu.tti.biz.f64.model.GoodsInfo">
- {call F64_GoodsInfo_Select(#{eigyousyoId, jdbcType = INTEGER, mode = IN})}
- </select>
- </mapper>
1.Statement,PreparedStatement 和 CallableStatement 都是接口(interface).
2.Statement 继承自 Wrapper,PreparedStatement 继承自 Statement,CallableStatement 继承自 PreparedStatement.
3. Statement 接口提供了执行语句和获取结果的基本方法;
PreparedStatement 接口添加了处理 IN 参数的方法;
CallableStatement 接口添加了处理 OUT 参数的方法.
4.
Statement:
普通的不带参的查询 SQL; 支持批量更新, 批量删除;
Statement 每次执行 sql 语句, 数据库都要执行 sql 语句的编译 ,
最好用于仅执行一次查询并返回结果的情形, 效率高于 PreparedStatement.
PreparedStatement:
可变参数的 SQL, 编译一次, 执行多次, 效率高;
安全性好, 有效防止 Sql 注入等问题;
支持批量更新, 批量删除;
PreparedStatement 是预编译的, 使用 PreparedStatement 有几个好处:
1. 在执行可变参数的一条 SQL 时, PreparedStatement 比 Statement 的效率高, 因为 DBMS 预编译一条 SQL 当然会比多次编译一条 SQL 的效率要高.
2. 安全性好, 有效防止 Sql 注入等问题.
3. 对于多次重复执行的语句, 使用 PreparedStament 效率会更高一点, 并且在这种情况下也比较适合使用 batch;
4. 代码的可读性和可维护性.
CallableStatement:
继承自 PreparedStatement, 支持带参数的 SQL 操作;
支持调用存储过程, 提供了对输出和输入 / 输出参数 (INOUT) 的支持;
mybatis--Mapper XML 文件(statementType)
来源: http://www.bubuko.com/infodetail-2728624.html