在发现错误的时候逐层分析

从controller层开始,主要是查看对service的调用有无问题

注释为@Resource或者@autowired一般都不会出现问题,注意service是否正确调用,有次就发现了直接调用了service实现类

	@Resource
    private ITbShjLayerService tbShjLayerService;

controller没有问题的话就检查service

主要检查注释是否正确添加

@Service
public class ServiceImpl extends ServiceImpl<TbShjLayerMapper, TbShjLayer> implements IService {

其次检查mapper

本次项目使用的是mybatis,如果需要使用@Select注释写sql的话,那么要检查是否添加了@Mapper注释。

@Mapper
public interface TbOpinionInfoMapper extends BaseMapper<TbShjOpinionInfo> {
    @Select("SELECT c.*, b.USERNAME FROM (SELECT * FROM XX a WHERE a.XX_id=#{XXId,javaType=string,jdbcType=VARCHAR}) c INNER JOIN tbl_user_info b ON c.ct_user_id=b.USERID ORDER BY c.ct_date")
    List<XXVO> queryXXInfoByStoreId(@Param("XXId") String XXId);
}    

最后检查Mapper实现类

首先检查命名空间,必须保证正确并且与其他的mapper不重复,可以使用ctrl点击查看

namespace="com.xx.mapper.xxMapper"

检查方法id不能重复,返回类型和参数类型要正确

<select id="queryxxByxxId" resultType="int" parameterType="string">

最后检查sql语句本身,建议复制到数据库中运行,看看有无问题。

如果没有问题,那么要考虑是不是语句中直接使用了<或者>等特殊符号,如果使用了则需要更替为Java中对应的转义符,如:&gt。或者使用<![CDATA[ ]]> 避免被编译。

本次出现问题便是因为直接使用了>进行比较,在数据库中没有问题,但是在Java却无法编译。

在发现错误的时候系统的错误信息并不能直接让我发现错误,便把可能引发错误的Mapper、Service、Controller暂时注释,并一层一层放出来查找问题,最后才找到了该错误

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐