testInsert时提示utils类初始化失败
来源:5-1 MyBatis数据插入操作
移动电猿
2020-09-17 12:34:17
如题,现象见截图
//测试类代码
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类
应该是同学的某个xml文件写的有错误了,建议同学可以先把各个xml排查一下,尤其是之前启动没有问题,最近添加后,出现问题的xml。
如果没有找到问题,请同学把xml文件都贴一下,老师帮你一起找一下。
如果我的回答解决了你的问题,请采纳,祝学习愉快。
相似问题