问题遇到的现象和发生背景
用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