XML 文件的statement到底是个啥?

本文介绍了使用Statement、Prepared及Callable对象执行SQL语句的方法,包括简单查询、预编译SQL及调用存储过程等内容。重点讲解了如何利用Callable对象调用数据库存储过程及其应用场景。

statement 概述

<!--添加部门-->
<select id="addDep" statementType="">

</select>

作用: Statement 对象用于将 SQL 语句发送到数据库中。

三个对象:

Statement:Statement 对象用于执行不带参数的简单 SQL 语句。接口提供了执行语句和获取结果的基本方法。

典型应用:

建立了到特定数据库的连接之后,就可用该连接发送 SQL 语句。Statement 对象用 Connection 的方法createStatement 创建,如下列代码段中所示:

Connection con = DriverManager.getConnection(url, "sunny","");
Statement stmt = con.createStatement();

Prepared: Prepared对象用于执行带或不带输入参数的预编译 SQL 语句。接口添加了处理 IN 参数的方法。(默认状态

Callable:   Callable对象用于执行对数据库已存储过程的调用。添加了处理 输出参数的方法。

典型作用:调用数据库写好的存储过程

<select id="addDep" statementType="CALLABLE">
        call addDep(#{depName, mode=IN,jdbcType=VARCHAR},#{parentId, mode=IN, jdbcType=INTEGER},
         #{enabled, mode=IN, jdbcType=BOOLEAN}, #{result1, mode=OUT, jdbcType=INTEGER},
          #{result2, mode=OUT, jdbcType=INTEGER})
    </select>

数据库函数:

CREATE DEFINER=`root`@`localhost` PROCEDURE `addDep`(in depName varchar(32),in parentId int,in enabled boolean,out result int,out result2 int)
begin
  declare did int;
  declare pDepPath varchar(64);
  insert into t_department set name=depName,parentId=parentId,enabled=enabled;
  select row_count() into result;
  select last_insert_id() into did;
  set result2=did;
  select depPath into pDepPath from t_department where id=parentId;   
  update t_department set depPath=concat(pDepPath,'.',did) where id=did;
  update t_department set isParent=true where id=parentId;
end

sql语句中 call + 函数名称 + (输入输出参数定义)  * 输出参数需要在实体类中定义*。

此种用法主要用于实现某个功能存在较多的数据库操作。

<think>好的,我现在需要回答用户关于MyBatis的XML文件顶部通常是什么的问题。用户可能刚开始学习MyBatis,或者在使用过程中忘记了XML文件的基本结构,需要快速回忆。 首先,我需要回想MyBatis的XML配置文件的基本结构。通常,这些XML文件是Mapper文件,用于定义SQL语句和映射规则。每个XML文件都有一个根元素,比如<mapper>,并且需要声明正确的XML命名空间,以确保MyBatis能够正确解析这些文件。 接下来,用户提到的“最上面”应该是指XML文件的头部声明部分。这包括XML的版本和编码声明,比如<?xml version="1.0" encoding="UTF-8"?>。这部分是任何XML文件的标准开头,用于指定XML的版本和使用的字符编码,确保解析器能够正确处理文件内容。 然后,是DOCTYPE声明,可能指向MyBatis的DTD(文档类型定义)或者XSD(XML Schema定义)。这有助于验证XML文件的结构是否符合MyBatis的规范。例如,<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">。不过,现在很多项目可能已经不再严格依赖DTD,或者使用其他方式验证,但了解这一点仍然是必要的。 接下来是<mapper>根元素,其namespace属性必须对应Java Mapper接口的全限定名。这是连接XML文件和Java接口的关键部分,确保MyBatis能将XML中的SQL语句与接口方法绑定。如果namespace不正确,可能会导致绑定失败,出现Invalid bound statement异常。 用户可能在使用过程中遇到了问题,比如XML文件没有被正确识别,或者SQL语句无法找到,这时候检查XML文件的头部是否正确就很重要。例如,如果缺少命名空间声明,或者版本编码不正确,都可能导致解析错误。 此外,还需要考虑用户可能的环境配置,比如是否在Spring Boot项目中正确配置了mybatis.mapper-locations,以确保XML文件被正确加载。如果XML文件位置不在配置的路径下,即使文件内容正确,也无法被MyBatis识别。 总结下来,回答需要包括XML头部声明、DOCTYPE(如果有的话)、mapper根元素及其namespace属性,并解释各部分的作用。同时,可以给出一个完整的示例,帮助用户直观理解结构,并提醒常见的配置错误,比如namespace不匹配或文件路径问题。 在回答时,要保持结构清晰,分点说明,使用代码块展示示例,并用注意或提示部分强调常见问题。这样用户能够逐步理解XML文件的结构,并在遇到问题时知道如何排查。</think>MyBatis 的 XML 映射文件(Mapper XML)的最顶部通常包含以下关键部分: --- ### **1. XML 声明头** 所有 XML 文件的通用开头,指定 XML 版本和字符编码: ```xml <?xml version="1.0" encoding="UTF-8"?> ``` - **作用**:定义 XML 版本和文件编码(必须为 `UTF-8` 避免乱码)。 --- ### **2. 文档类型定义(DOCTYPE)** 声明 MyBatis 的 DTD(文档类型定义),用于验证 XML 结构合法性: ```xml <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> ``` - **作用**:确保 XML 标签语法符合 MyBatis 规范(现代项目中可能省略,但建议保留)。 --- ### **3. `<mapper>` 根标签** 定义映射文件的根元素,并通过 `namespace` 属性绑定对应的 Java 接口: ```xml <mapper namespace="com.yw.user.mapper.UserMapper"> ``` - **核心属性**: - `namespace`:**必须**与对应的 Java Mapper 接口全限定名一致(如 `UserMapper.java` 对应 `namespace="com.yw.user.mapper.UserMapper"`)。 - **作用**:将 XML 中的 SQL 语句与 Java 接口方法动态绑定。 --- ### **完整示例** ```xml <?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.yw.user.mapper.UserMapper"> <!-- SQL 语句定义 --> <select id="selectUserById" resultType="User"> SELECT * FROM user WHERE id = #{id} </select> </mapper> ``` --- ### **常见错误排查** 1. **`namespace` 不匹配** - 报错:`Invalid bound statement (not found)` - 解决:检查 `namespace` 是否与 Mapper 接口的全限定名完全一致。 2. **XML 文件路径未配置** - 报错:XML 文件未被加载 - 解决:确保 `mybatis.mapper-locations` 配置包含 XML 文件路径(如 `classpath*:mapper/**/*.xml`)。 --- 通过以上结构,MyBatis 能正确解析 XML 文件中的 SQL 并与 Java 接口关联。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值