testInsert时提示utils类初始化失败

来源:5-1 MyBatis数据插入操作

移动电猿

2020-09-17 12:34:17

如题,现象见截图

http://img.mukewang.com/climg/5f62e70a09ed22ac14001212.jpg//测试类代码

package com.imooc.mybatis;

import com.imooc.mybatis.dto.GoodsDTO;
import com.imooc.mybatis.entity.Goods;
import com.imooc.mybatis.utils.MyBatisUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


//Junit单元测试类
public class MyBatisTestor {
   @Test
   public void testSqlSessionFactory() throws IOException {
       // 利用Reader加载classpath下的mybatis-config.xml核心配置文件
       Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
       // 初始化SqlSessionFactory对象,同时解析核心配置文件
       SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
       System.out.println("SessionFactory加载成功");
       SqlSession sqlSession = null;
       // 创建SqlSession对象,它是JDBC的扩展类,用于与数据库交互
       try {
           sqlSession = sqlSessionFactory.openSession();
           Connection connection = sqlSession.getConnection();
           System.out.println(connection);
       }catch (Exception e){
           e.printStackTrace();
       }finally {
           if (sqlSession != null){
               sqlSession.close();
           }
       }
   }

   @Test
   public void testMyBatisUtils() throws Exception {
       SqlSession sqlSession = null;
       try {
           sqlSession = MyBatisUtils.openSession();
           Connection connection = sqlSession.getConnection();
           System.out.println(connection);
       }catch (Exception e){
           throw e;
       }finally {
           MyBatisUtils.closeSession(sqlSession);
       }

   }

   @Test
   public void testSelectAll() throws Exception {
       SqlSession session = null;
       try{
           session = MyBatisUtils.openSession();
           List<Goods> list = session.selectList("goods.selectAll");
           for (Goods g:list){
               System.out.println(g.getTitle());
           }
       }catch (Exception e){
           throw e;
       }finally {
           MyBatisUtils.closeSession(session);
       }
   }

   @Test
   public void testSelectById() throws Exception {
       SqlSession session = null;
       try{
           session = MyBatisUtils.openSession();
           Goods goods = session.selectOne("goods.selectById", 1602);
           System.out.println(goods.getTitle());
       }catch (Exception e){
           throw e;
       }finally {
           MyBatisUtils.closeSession(session);
       }
   }

   @Test
   public void testSelectByPriceRange() throws Exception {
       SqlSession session = null;
       try{
           session = MyBatisUtils.openSession();
           Map param = new HashMap();
           param.put("min",100);
           param.put("max",500);
           param.put("limit",10);
           List<Goods> list = session.selectList("goods.selectByPriceRange", param);
           for (Goods g:list){
               System.out.println(g.getTitle()+":"+g.getCurrentPrice());
           }
       }catch (Exception e){
           throw e;
       }finally {
           MyBatisUtils.closeSession(session);
       }
   }

   @Test
   public void testSelectGoodsMap() throws Exception {
       SqlSession session = null;
       try{
           session = MyBatisUtils.openSession();
           List<Map> list = session.selectList("goods.selectGoodsMap");
           for (Map map : list){
               System.out.println(map);
           }
       }catch (Exception e){
           throw e;
       }finally {
           MyBatisUtils.closeSession(session);
       }
   }

   @Test
   public void testSelectGoodsDTO() throws Exception {
       SqlSession session = null;
       try{
           session = MyBatisUtils.openSession();
           List<GoodsDTO> list = session.selectList("goods.selectGoodsDTO");
           for (GoodsDTO g : list){
               System.out.println(g.getGoods().getTitle());
           }
       }catch (Exception e){
           throw e;
       }finally {
           MyBatisUtils.closeSession(session);
       }
   }

   @Test
   public void testInsert() throws Exception {
       SqlSession session = null;
       try{
           session = MyBatisUtils.openSession();
           Goods goods = new Goods();
           goods.setTitle("测试商品");
           goods.setSubTitle("测试子标题");
           goods.setOriginalCost(200f);
           goods.setCurrentPrice(100f);
           goods.setDiscount(0.5f);
           goods.setIsFreeDelivery(1);
           goods.setCategoryId(43);
           // num表示本次成功插入的记录总数
           int num = session.insert("goods.insert", goods);
           // 提交事务数据
           session.commit();
           System.out.println(goods.getGoodsId());
       }catch (Exception e){
           if (session != null){
               session.rollback(); //如果出现异常则回滚数据
           }
           throw e;
       }finally {
           MyBatisUtils.closeSession(session);
       }
   }
}


// Utils类代码

package com.imooc.mybatis.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;

// 工具类,创建全局唯一的SqlSessionFactory对象
public class MyBatisUtils {
   // 利用static静态属于类不属于对象,且全局唯一
   private static SqlSessionFactory sqlSessionFactory = null;

   // 使用静态块在初始化时实例化sqlSessionFactory
   static {
       Reader reader = null;
       try {
           reader = Resources.getResourceAsReader("mybatis-config.xml");
           sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
       } catch (IOException e) {
           e.printStackTrace();
           // 初始化错误时,通过抛出异常通知调用者
           throw new ExceptionInInitializerError(e);
       }

   }

   // 创建新的sqlSession对象
   public static SqlSession openSession(){
       // SqlSession默认自动提交事务数据
       // 设置false关闭自动提交(commit),改为手动提交事务数据
       return sqlSessionFactory.openSession(false);
   }

   // 释放sqlSession对象
   public static void closeSession(SqlSession session){
       if (session != null){
           session.close();
       }
   }
}


写回答

1回答

好帮手慕小脸

2020-09-17

同学你好,根据报错信息,表示无法初始化加载这个MyBatisUtils类

http://img.mukewang.com/climg/5f630a8c09568f0709280087.jpg

应该是同学的某个xml文件写的有错误了,建议同学可以先把各个xml排查一下,尤其是之前启动没有问题,最近添加后,出现问题的xml。

如果没有找到问题,请同学把xml文件都贴一下,老师帮你一起找一下。

如果我的回答解决了你的问题,请采纳,祝学习愉快。


0

0 学习 · 8016 问题

查看课程