2021-01-14

                  Spring   SSM 整合Jquery 问题汇总

一 、 IDEA提示找不到Mapper接口:Could not autowire.No beans of ‘xxxMapper’ type found
(虽然编译报错,但并不会影响运行)
在这里插入图片描述

为啥呢?
因为 @Mapper 这个注解是 Mybatis 提供的,而 @Autowried 注解是 Spring 提供的,IDEA能理解 Spring 的上下文,但是却和 Mybatis 关联不上。而且我们可以根据 @Autowried 源码看到,默认情况下,@Autowried 要求依赖对象必须存在,那么此时 IDEA 只能给个红色警告了。

怎么解决?
虽然 IDEA 给了个红色警告,但是程序本身是没问题的,可以正常运行。可是代码里头有红色警告是相当的显眼的,不晓得情况的人还以为你的代码有问题呢?

下面我将会列出实践过的解决方案。
1、简单粗暴
直接关掉IDEA的警告提示,是不是很简单?是不是很粗暴?
2、麻烦粗暴,给@Autowried注解设置required=false
@Autowired(required = false)
private CarUserMapper carUserMapper;
这样就不会警告了。因为此时 @Autowried 不会再去校验 Mapper 接口是否为空。 缺点:每引入一个Mapper接口都需要设置上required=false,相当的麻烦,而且容易给别人造成误解:这个Mapper接口真的不需一定存在。
3、@Autowried替换为@Resource
@Resourceprivate CarUserMapper carUserMapper;
此时也不会给红色警告了。@Resource 注解是 J2EE 提供的,而 @Autowried 注解是 Spring 提供的,他们如果感兴趣可以去看一下他们的区别。
4、在Mapper接口上加@Component
@Mapper@Componentpublic inteface CarUserMapper{}
加这个注解呢,主要是为了让欺骗IEDA,让它以为CarUserMapper也是一个Spring管理的Bean,这样子使用@Autowired注解注入也不会报错了。
5、使用构造函数注入(Spring4.x推荐)
相信大家都有使用Lombok这个神器了,我们可以利用他的注解@RequiredArgsConstructor来直接构建构造函数即可,不过我尝试过单单使用@AllArgsConstructor也是没问题的。 当然了,大家如果注入的依赖比较少或者闲得蛋疼,还是可以自己来写构造函数的。
@Service@RequiredArgsConstructor(onConstructor = @__(@Autowired))
//@AllArgsConstructorpublic class ChargeServiceImpl implements ChargeService {

private final RedisTemplate<String, Object> redisTemplate;
private final CarUserMapper carUserMapper;
private final ChargingMapper chargingMapper;
}

二 、 org.apache.ibatis.binding.BindingException
背景:Spring整合Mybatis
报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
解释:就是说,你的Mapper接口,被Spring注入后,却无法正常的使用mapper.xml的sql;
这里的Spring注入后的意思是,你的接口已经成功的被扫描到,但是当Spring尝试注入一个代理(MyBatista实现)的实现类后,却无法正常使用。这里的可能发生的情况有如下几种;
接口已经被扫描到,但是代理对象没有找到,即使尝试注入,也是注入一个错误的对象(可能就是null)
接口已经被扫描到,代理对象找到了,也注入到接口上了,但是调用某个具体方法时,却无法使用(可能别的方法是正常的)
当然,我们不好说是那种情况,毕竟报错的结果是一样的,这里就提供几种排查方法:
mapper接口和mapper.xml是否在同一个包(package)下?名字是否一样(仅后缀不同)?
比如,接口名是NameMapper.java;对应的xml就应该是NameMapper.xml
mapper.xml的命名空间(namespace)是否跟mapper接口的包名一致?
比如,你接口的包名是com.abc.dao,接口名是NameMapper.java,那么你的mapper.xml的namespace应该是com.abc.dao.NameMapper
接口的方法名,与xml中的一条sql标签的id一致
比如,接口的方法List findAll();那么,对应的xml里面一定有一条是***
如果接口中的返回值List集合(不知道其他集合也是),那么xml里面的配置,尽量用resultMap(保证resultMap配置正确),不要用resultType
最后,如果你的项目是maven项目,请你在编译后,到接口所在目录看一看,很有可能是没有生产对应的xml文件,因为maven默认是不编译的,因此,你需要在你的pom.xml的里面,加这么一段:


src/main/java

**/.xml

true

三 、 IDEA提示找不到文件,可以尝试以下方法,引入Jquery需要将文件夹设置为资源文件,(其他文件也如此)
操作如下:
在这里插入图片描述
四、 IDEA提示找不到事务配置文件(spring-transation.xml)
解决方法:在@ImportResource注解中加入 “classpath:”,
如果还是没有解决,使用 “classpath*:”
在这里插入图片描述
在这里插入图片描述

注意:这里我用的是使用类代替配置文件

使用web.xml可以像下面这样写:

contextConfigLocation
classpath:/spring-transation.xml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值