存储过程与高级查询专题测试
考察知识点
- 存储过程调用:
statementType="CALLABLE"的正确使用、JDBC 标准{CALL ...}语法、注解方式调用存储过程 - 输入输出参数:
mode=IN/OUT/INOUT参数模式的区别与使用场景、jdbcType在 OUT 参数中的必要性、参数回写机制 - 游标结果处理:REF_CURSOR 类型在不同数据库下的差异、游标参数的
mode=OUT配置、游标结果集与 resultMap 的配合使用 - 复杂查询封装:数据库视图的应用场景、
<sql>与<include>复用查询片段、嵌套<resultMap>处理一对多关系、延迟加载与 N+1 问题
💡 参考答案在文末
判断题
1
在 MyBatis 中,不同数据库的游标类型名称不同(如 Oracle 使用 CURSOR,PostgreSQL 使用 REF_CURSOR,MySQL 不直接支持游标输出参数),因此需要在 Mapper XML 中针对不同的数据库使用不同的 jdbcType 值,否则存储过程调用会失败。这种说法是否正确?
单选题
2
在 MyBatis 中调用 MySQL 存储过程 calc_bonus(IN emp_id INT, OUT bonus DECIMAL),以下哪种 Mapper XML 配置是错误的?
3
在 MyBatis 中调用存储过程时,mode=INOUT 参数与 mode=OUT 参数的核心区别是什么?
多选题
4
在 MyBatis 中调用存储过程时,关于异常处理和事务管理,以下哪些说法是正确的?
5
在 MyBatis 中调用带有输入输出参数的存储过程时,关于参数配置的以下说法哪些是正确的?
6
在 MyBatis 中处理存储过程返回的游标(REF_CURSOR)结果集时,以下哪些做法是正确的?
7
在 MyBatis 中封装复杂查询(如多表 JOIN、子查询、动态条件组合)时,以下哪些策略是推荐的?
填空题
8
在 MyBatis Mapper XML 中调用存储过程 sp_get_user_stats(IN user_id INT, OUT total_orders INT, OUT total_amount DECIMAL),补全以下配置中的空白部分:
XML
<select id="getUserStats" statementType="____________" parameterType="map">
{CALL sp_get_user_stats(
#{userId,mode=____________},
#{totalOrders,mode=____________,jdbcType=INTEGER},
#{totalAmount,mode=OUT,jdbcType=DECIMAL}
)}
</select>
9
在 MyBatis 中,以下查询返回用户及其订单信息(一对多关系),补全 resultMap 配置中的空白部分:
XML
<resultMap id="userOrderMap" type="User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<____________ property="orders" ofType="Order"
column="user_id"
select="____________"/>
</resultMap>
<select id="selectUsers" resultMap="____________">
SELECT u.id AS user_id, u.name AS user_name
FROM users u
</select>
<select id="selectOrdersByUserId" resultType="Order">
SELECT id, amount, create_time
FROM orders
WHERE user_id = #{userId}
</select>
参考答案
1.正确
2.C
3.A
4.A;C;D
5.A;C;D
6.A;B;D
7.A;B;C
8.CALLABLE;IN;OUT
9.collection;selectOrdersByUserId;userOrderMap
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码