m0_62301052 2022-05-22 15:10 采纳率: 0%
浏览 62
已结题

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
我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

4条回答 默认 最新

  • 吴法刚 2022-05-22 16:30
    关注

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

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月22日
  • 修改了问题 5月22日
  • 赞助了问题酬金5元 5月22日
  • 创建了问题 5月22日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!