本篇博客的主要内容是:

(1)MyBatisUtils工具类:初始化SqlSessionFactory这个对象;获得SqlSession对象的方法;关闭SqlSession对象的方法;

(2)以查询为例,演示mybatis的一个工作流程;

目录

一:MyBatisUtils工具类(提供SqlSessionFactory和SqlSession的工具方法)

二:MyBatis数据查询(以数据查询为例,演示Mybatis的一个工作流程)

1.创建实体类(Entity)

2.创建Mapper XML & 3.编写select的标签

5.新增:为了让mybatis认识这个goods.xml,需要在mybatis-config.xml中对其进行声明

6.SqlSession执行select语句

4.开启驼峰命名


一:MyBatisUtils工具类(提供SqlSessionFactory和SqlSession的工具方法)

初始化工具类MyBatisUtils:

(1)MyBatisUtils主要职责是:● 帮助我们初始化SqlSessionFactory这个对象;同时让SqlSessionFactory全局唯一;● 获得SqlSession对象的方法;● 关闭SqlSession对象的方法;

(2)在实际开发中,会经常使用MyBatisUtils工具类;

MyBatisUtils内容:

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 sun.misc.ExtensionInstallationException;

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

/**
 * MyBatis工具类
 * (1)创建全局唯一的SqlSessionFactory对象;(2)获取SqlSession的方法;(3)关闭SqlSession的方法;
 */
public class MyBatisUtils {
    //sqlSessionFactory对象设置成静态的,这个对象属于类的;
    private static SqlSessionFactory sqlSessionFactory = null;
    static{
        try {
            Reader reader = Resources.getResourceAsReader("mybatis-config1.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
            // 如果出现了异常,除了上面打印异常,还需要将这个异常向上抛,让使用这个类的程序也知道这儿报错了;
            // 这儿主动抛了ExceptionInInitializerError,即在类的初始化过程中产生了错误;即调用者捕获了这个异常,就能够明白,
            // mybatis在初始化的时候产生了错误,
            throw new ExceptionInInitializerError(e);
        }
    }

    /**
     * 获得SqlSession对象的方法;;;;
     * 在其他地方调用这个方法获得SqlSession对象后,后续就可以利用SqlSession完成数据表的增删改查了;
     * 说明:工具类中的方法,一般使用static进行描述,这样以后通过类名就能直接调用了;
     * @return
     */
    public static SqlSession openSession(){
        return sqlSessionFactory.openSession();
    }

    /**
     * 关闭SqlSession的方法;
     * @param sqlSession
     */
    public static void closeSession(SqlSession sqlSession){
        if (sqlSession != null){
            sqlSession.close();
        }
    }
}

说明:

(1) SqlSessionFactory对象设置成了static;然后,SqlSessionFactory的实例化代码也放在了静态代码快中;这保证SqlSessionFactory全局唯一;

(2)初始化出问题后,主动【 throw new ExceptionInInitializerError(e);

(3)为了测试 MyBatisUtils:在MybatisTestor类中编写测试方法:

(4) 测试成功的运行结果

(5) 当初始代码出问题时候,看下 throw new ExceptionInInitializerError(e); 】效果

说明:当在静态初始化块中出现了异常的时候,JVM会抛出 java.lang.ExceptionInInitializerError异常。。具体关于ExceptionInInitializerError的详细内容,后续了解……


二:MyBatis数据查询(以数据查询为例,演示Mybatis的一个工作流程)

(1) 实体类和数据表对应;

(2) 创建Mapper XML 来说明当前SQL语句是什么;

(3) 在Mapper XML中,增加标签的id=“selectAll”,但其实id=“selectAll”查询所有可能是每个数据表都会存在的id,即可能有多个标签了,,,但是如果附带上namespace=“goods”前缀,mybatis就会知道,我们要执行的是goods命名空间下的id=“selectAll”的