问题描述
为完成学校课程一个javaweb的demo,想着对数据库的访问能够更加简洁,所以用了Mybatis。因为之前有过Springboot整合Mybatis经验,所以本以为事情会简单。在Junit的测试类中是能够正常对数据库进行CRUD。在Javaweb的Servlet类中调用数据访问的 接口编译没错。但实际对servlet发起请求时报错。-->运行时报错。
创建一个数据的访问DAO做为单例类。 通过类静态方法返回该单例对象。userMapper单一数据访问的实例。
public class OnlyStatement {
private OnlyStatement(){
}
private static class RealMapper{
private static userMapper userMapper;
static {
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取SqlSession对象
SqlSession session = sqlSessionFactory.openSession(true);
//获取Mapper接口代理对象
userMapper = session.getMapper(userMapper.class);
}
}
public static userMapper MYgetInstance() {
return RealMapper.userMapper;
}
}
查看日志是在加载资源时 java.lang.NoClassDefFoundError
通过target(项目编译的生成结果)查看Mybatis和mysql的依赖jar是否已经添加到lib,这里就有个问题:
为什么maven的其他依赖的jar包(如Servlet ,JSTL)都能被添加到lib,而mysql和mybatis的jar包却无法添加?
产生该问题时的target生成目录下的lib目录: (缺失)
我们用Maven来管理web项目的目的是为了添加Jar包可以直接以添加依赖的方式进行,而不需要手动去相应的网站下载,同时能够自动导入到当前项目。
解决方法
第一种方法:手动添加jar包
此时重新部署
查看日志无报错,demo正常运行。
第二种方法:
自己捣鼓配置成功的一个方法:
然后重新编译部署,最终也使得web项目成功运行。