mybatis在web项目中运行异常

问题遇到的现象和发生背景

用mybatis完成数据库读写
在java工程可以运行,web工程报错

问题相关代码,请勿粘贴截图
public class TestMain {
    public static void main(String[] args) {
        StudentService service = MySpring.getBean("service.StudentService");
        service.regist(new Student(3,"aaa","123456"));
    }
}

  public class StudentService {
    private final StudentDao dao = MySpring.getBean("dao.StudentDao");
    public void regist(Student student){
        dao.insert(student);
    }
}

public class StudentDao {
    private final SqlSession sqlSession = MySqlSessionFactory.getSqlSession(true);
    public void insert(Student student){
        sqlSession.insert("insert",student);
    }
}
public class MySpring {
    private static final HashMap<String,Object> beanMap = new HashMap();
    public static <T>T getBean(String className){
        T obj = (T)beanMap.get(className);
        if (obj==null){
            try {
                obj = (T)Class.forName(className).newInstance();
                beanMap.put(className,obj);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return obj;
    }
}


public class MySqlSessionFactory {
    private static final SqlSessionFactory factory;
    static {
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        factory = builder.build(Thread.currentThread().getContextClassLoader().getResourceAsStream("/configuration.xml"));
    }
    public static SqlSession getSqlSession(){
        return getSqlSession(false);
    }
    public static SqlSession getSqlSession(boolean flag){

        return factory.openSession(flag);
    }
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.StudentDao">
    <insert id="insert">
        insert into student values (#{aid},#{account},#{password})
    </insert>
</mapper>


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="E">
        <environment id="E">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/new_schema?serverTimezone=UTC"/>
                <property name="password" value="root"/>
                <property name="username" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/StudentMapper.xml"></mapper>
    </mappers>
</configuration>

运行结果及报错内容
Exception in thread "main" java.lang.ExceptionInInitializerError
    at dao.StudentDao.<init>(StudentDao.java:8)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at util.MySpring.getBean(MySpring.java:11)
    at service.StudentService.<init>(StudentService.java:8)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.lang.Class.newInstance(Class.java:442)
    at util.MySpring.getBean(MySpring.java:11)
    at test.TestMain.main(TestMain.java:9)
Caused by: java.lang.NullPointerException
    at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:84)
    at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
    at util.MySqlSessionFactory.<clinit>(MySqlSessionFactory.java:12)
    ... 15 more
我的解答思路和尝试过的方法
我想要达到的结果

1.web 项目是依靠的spring注入,根据提示是你的配置文件有问题,或者是扫描路径没写对,总之一句话,没有注入到spring容器中
2.你所谓的java工程你是依靠的自己写的Class.forName, java工程也可以依靠spring 运行, 你会遇到同样的问题,
所以问题不是在于java工程还是web工程,而已你的配置文件有问题

把这个地方换一下试一试

img


换成

img


img

img

web运行下,要先确保MySqlSessionFactory这个已经成功初始化了,
否则MySpring.getBean获取dao的时候会报错

感谢各位,找到错误原因了,需要把xml文件放到resources文件夹内,并且配置pom.xml