【ERROR】 [main] - org.apache.ibatis.exceptions.PersistenceException:

本文记录了作者在进行第二个项目时遇到的一个SQL语法错误,错误出现在插入语句的values部分,使用了错误的括号。经过多次检查和网上搜索解决方案,作者发现应该使用#{ }

今天在做第二个项目的时候一直提示有错误,翻译后显示sql语法错误,但是一直不知道在哪,附错误截图

 再附上对应的sql语句部分

<mapper namespace="mapper.StudentMapper">
	<select id="getStudentAll" resultType="domain.Student">
		select * from student
	</select>
	<insert id="addStudent" parameterType="domain.Student">
		insert into
		student(sno,name,sex,age,dept_no)
		values(#(sno),#(name),#(sex),#(age),#(dept_no))
	</insert>
</mapper>

在网上查找了一下方法如下:

1、检查sql语句

2、检查是否占用系统关键字

3、检查注释是否为#XXX

检查了很多次均未发现错误,后来偶然看到values后面的括号应该是{}而不是(),修改后成功执行!

附代码

<mapper namespace="mapper.StudentMapper">
	<select id="getStudentAll" resultType="domain.Student">
		select * from student
	</select>
	<insert id="addStudent" parameterType="domain.Student">
		insert into
		student(sno,name,sex,age,dept_no)
		values(#{sno},#{name},#{sex},#{age},#{dept_no})
	</insert>
</mapper>

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in mapper/BookMapper.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mapper/BookMapper.xml'. Cause: org.apache.ibatis.builder.BuilderException: Mapper's namespace cannot be empty at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64) at Test.main(Test.java:18) Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mapper/BookMapper.xml'. Cause: org.apache.ibatis.builder.BuilderException: Mapper's namespace cannot be empty at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:122) at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:99) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:78) ... 2 more Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'mapper/BookMapper.xml'. Cause: org.apache.ibatis.builder.BuilderException: Mapper's namespace cannot be empty at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:123) at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:95) at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:377) at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:120) ... 4 more Caused by: org.apache.ibatis.builder.BuilderE
07-23
MyBatis 中,`namespace` 是 Mapper XML 文件中至关重要的属性,它用于绑定接口与 XML 文件之间的映射关系。如果 `BookMapper.xml` 中的 `namespace` 为空,会导致 MyBatis 在构建 `SqlSession` 时抛出异常,提示 "Mapper's namespace cannot be empty"。 ### 原因分析 `namespace` 属性为空通常出现在以下几种情况: 1. XML 文件中 `<mapper>` 标签未正确设置 `namespace` 属性。 2. XML 文件未与对应的 Mapper 接口进行绑定。 3. Mapper 接口的路径未正确注册到 MyBatis 的配置中。 ### 解决方案 #### 1. 确保 `BookMapper.xml` 中的 `namespace` 正确 在 `BookMapper.xml` 文件中,`<mapper>` 标签的 `namespace` 属性应指向对应的 Mapper 接口。例如,如果 `BookMapper` 接口的全限定名为 `com.example.mapper.BookMapper`,则 XML 文件应如下所示: ```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.example.mapper.BookMapper"> <!-- SQL 映射语句 --> </mapper> ``` #### 2. 确保 Mapper 接口与 XML 文件绑定 Mapper 接口应通过注解或 XML 文件进行绑定。如果使用 XML,则接口中无需添加 `@Mapper` 注解,但需确保 XML 文件的 `namespace` 与接口的全限定名一致。 ```java package com.example.mapper; public interface BookMapper { // 方法定义 } ``` #### 3. 注册 Mapper 接口或 XML 文件 在 MyBatis 的主配置文件(如 `mybatis-config.xml`)中,确保已注册对应的 Mapper 接口或 XML 文件路径。例如: ```xml <configuration> <mappers> <mapper class="com.example.mapper.BookMapper"/> <!-- 或者使用 XML 文件 --> <!-- <mapper resource="mappings/BookMapper.xml"/> --> </mappings> </configuration> ``` #### 4. 检查 XML 文件路径配置 如果使用外部属性文件(如 `mybatis-refresh.properties`)配置 Mapper 文件路径,确保 `mappingPath` 指向正确的资源目录[^3]。 ### 示例代码 以下是一个完整的 `BookMapper.xml` 示例: ```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.example.mapper.BookMapper"> <select id="selectBookById" resultType="com.example.model.Book"> SELECT * FROM book WHERE id = #{id} </select> </mapper> ``` 对应的 `BookMapper` 接口定义如下: ```java package com.example.mapper; import com.example.model.Book; public interface BookMapper { Book selectBookById(int id); } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值