Springmvc + Mybatis报错解决

问题一:Failed properties: Property 'systemPropertiesModeName' threw exception;

错误原因:

 <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:*.properties</value>
            </list>
        </property>
    </bean>

<!-- 读取配置文件 -->
    <context:property-placeholder location="classpath:db.properties" />
Springmvc + Mybatis两种方式最好不要同时配置,特别是不能再spring-mvc配置文件中使用了前者,又在mybatis配置文件中使用后者

问题二:Caused by: java.lang.NoClassDefFoundError: org/aspectj/lang/annotation/Aspect

解决:缺少aspectjweaver-XXX.jar包,导入即可

或者pom.xml文件中添加依赖:

<dependency>
            <groupId> org.aspectj</groupId >
            <artifactId> aspectjweaver</artifactId >
            <version> 1.8.9</version 
</dependency>

问题三:Cannot find class [com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean] for bean with name 'sqlSessionFactory' defined in class path resource [spring-mybatis.xml];

解决:mybatis-plus的sqlSessionFactory整合有问题,换成普通的mybatis即可(mybatis-plus整合???)

<!-- 3.配置mybatis框架核心对象SqlSessionFactory -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 注入数据库连接池 -->
		<property name="dataSource" ref="dataSource"/>

		<!-- 配置MyBaties全局配置文件:mybatis-configure.xml -->
		<property name="configLocation" value="classpath:mybatis-config.xml"/>
	</bean>

	<!-- MyBatis 动态实现 -->
	<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 对Dao 接口动态实现,需要知道接口在哪 -->
		<property name="basePackage" value="com.jishou.mapper" />
	</bean>

 

问题四:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.jishou.mapper.StudentMapper.selectAllStu

解决:即在mybatis中dao接口与mapper配置文件在做映射绑定的时候出现问题,简单说,就是接口与xml要么是找不到,要么是找到了却匹配不到。

Mapper接口开发需要遵循以下规范:

  1. Mapper.xml文件中的namespace与mapper接口的类路径相同。

  2. Mapper接口方法名和Mapper.xml中定义的每个statement的id相同

  3. Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同

  4. Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

原因:Mapper.xml和Mapper.java放在同一个包下即可

 

问题五:mapper.xml似乎写得都正确,但是语句中一直存在空格或换行问题

如果将sql语句复制到sql工具中,去除空格和换行后执行又正确。

DELETE FROM Student WHERE ID in (4107)

11:53:08.395 [http-nio-8080-exec-122] ERROR druid.sql.Statement - {conn-10005, pstmt-20001} execute error. DELETE FROM Student WHERE ID in 
         (  
           ?
         )
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' DELETE FROM Student WHERE ID in 
         (  
           4107
         )' at line 1

原因:mapper.xml文件有问题。标签前后中不小心手动加了空格,但是肉眼看不出来

错误:以下语句看似正确,实际上DELETE,foreach标签,#{id}前都是通过空格缩进,所以mybatis生成的语句就会有多余的空格和空行,导致无法执行

	<delete id="delBatchStudent" parameterType="java.util.ArrayList">
	  DELETE FROM Student WHERE ID in 
		<foreach collection="list" separator="," open="(" close=")" item="id">
		   #{id}
		</foreach>
	</delete>

正确:使用Tab键进行缩进,或者所有标签语句写到一行里

<delete id="delBatchStudent" parameterType="java.util.ArrayList">
		DELETE FROM Student WHERE ID in 
		<foreach collection="list" separator="," open="(" close=")" item="id">
			#{id}
		</foreach>
	</delete>

 


版权声明:本文为qq_34569497原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。