<!-- 根据分类ID删除分类 --> <delete id="deleteOne" parameterType="int"> SET FOREIGN_KEY_CHECKS = 0 DELETE FROM category WHERE category_id = #{category_id} </delete>检查语法错误并修改
时间: 2024-02-04 12:01:51 浏览: 80
这段代码的 SQL 语句是正确的,只需要稍微修改一下 XML 的格式就可以了,如下所示:
```
<!-- 根据分类ID删除分类 -->
<delete id="deleteOne" parameterType="int">
SET FOREIGN_KEY_CHECKS = 0;
DELETE FROM category
WHERE category_id = #{category_id};
</delete>
```
修改的内容包括:
- 将 SQL 语句的两部分分开,方便阅读和调试;
- 在 SET 语句的末尾添加分号;
- 在 DELETE 语句的末尾添加分号。
此外,需要注意的是,SET FOREIGN_KEY_CHECKS = 0 的作用是关闭外键约束检查,这样可以在不删除关联表中的数据的情况下删除主表中的记录。但是,需要谨慎使用这个语句,因为关闭外键约束检查可能会导致数据不一致的问题。
相关问题
<?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="org.mybatis.example.BlogMapper"> <!--通过学生id查询学生信息--> <select id="selectStudentById" resultType="Student"> select * from s_student where id = #{id} </select> <!--通过班级id查询学生信息--> <select id="selectStudentByCId" resultType="Student"> select * from s_student where cid = #{cid} </select> <insert id="insertStudent" parameterType="Student" > insert into s_student(name,age,cid) values(#{name},#{age},#{cid}) </insert> <!--任务8:--> <!--通过班级名称查询学生信息【10分】--> <select id="selectStudentsByClassName" resultType="Student"> SELECT s.* FROM s_student s JOIN s_class c ON s.cid = c.id WHERE c.name = #{className} </select> <!--修改学生信息【10分】--> <update id="updateStudent" parameterType="Student"> UPDATE s_student SET name = #{name}, age = #{age} WHERE id = #{id} </update> <!--删除学生信息【10分】--> <delete id="deleteStudentById" parameterType="int"> DELETE FROM s_student WHERE id = #{id} </delete> </mapper>
这是一个 MyBatis 的 XML 映射文件,用于将 Java 对象与 SQL 语句进行映射。其中包含了一些 SQL 语句和对应的操作,如查询、插入、更新和删除。这个 XML 文件的 namespace 属性指定了映射文件对应的 Java 接口或类的包名和类名。每个 SQL 语句都有对应的 id 属性,用于在 Java 代码中调用这些 SQL 语句。resultType 属性指定了查询结果的返回类型,parameterType 属性指定了 SQL 语句的参数类型。具体来说,这个映射文件中包含了通过学生 id 和班级 id 查询学生信息、插入学生信息、通过班级名称查询学生信息、修改学生信息和删除学生信息等操作。
更改 <!-- 根据分类ID删除分类 --> <delete id="deleteOne" parameterType="int"> DELETE FROM product WHERE category_id = #{category.category_id} </delete>后报错org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'category' not found. Available parameters are [category_id, param1]] with root cause org.apache.ibatis
这个错误提示是因为在 `deleteOne` 的 `parameterType` 中指定的是 `int`,而在 SQL 语句中却使用了 `#{category.category_id}` 引用了一个名为 `category` 的对象,因此导致了参数不匹配的错误。
要解决这个问题,可以将 `deleteOne` 的 `parameterType` 修改为 `category`,并在 SQL 语句中使用 `#{category_id}` 引用 Category 对象中的 `category_id` 属性,例如:
```xml
<delete id="deleteOne" parameterType="category">
DELETE FROM category WHERE category_id = #{category_id}
</delete>
```
这个例子中,我们将 `parameterType` 修改为 `category`,并修改了 SQL 语句中的引用方式,使用 `#{category_id}` 引用 Category 对象中的 `category_id` 属性。这样就可以避免参数不匹配的问题了。
阅读全文