JavaWeb以Maven整合Mybatis报错java.lang.NoClassDefFoundError(Web项目未能完全加载Maven下的依赖)

问题描述

        为完成学校课程一个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项目成功运行。

 

posted @   昊月光华  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示