本篇博客的主要内容是:
(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”的