第一步:创建sqlSessionFactoryBuilder对象

// 创建sqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

第二步:获取sqlSessionFactory对象,通过调用sqlSessionFactoryBuilder对象的build方法去指定对应的mybatis核心配置文件,以及规定环境。

注意这里的核心配置文件的获取方式有两种

第一种:使用系统类加载器进行获取resources中的配置文件

InputStream resourceAsStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream, "mybatis");

简化后:

sqlSessionFactoryBuilder.build(ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml"))

第二种:使用mybatis框架提供的Resources工具类,直接定位到resources下配置文件

SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));

第三步:获取sqlSession对象

通过sqlSessionFactory的openSession()方法打开会话去创建一个sqlSession对象

SqlSession sqlSession = sqlSessionFactory.openSession();

注意:这里的openSession()方法的参数有一个Boolean值,其值默认是不去启用JDBC事务管理器的,也就是默认值为false,如果我们去手动将该值改为true就会导致项目没有管理。所以不要去动它。

第四步:执行sql语句

通过sqlSessionFactory的openSession()方法打开会话去创建一个sqlSession对象

int count = sqlSession.update("updateUser", user);

通过执行对应的sql语句方法,对数据库进行操作,其中的每个方法都有两个参数sqlSession.update(String s,Object o)

这里的String s ,代表了该需要执行的sql语句在xml映射文件中的id再加上用以区分的nameSpace的id

所以格式:namespaceId.SqlId

这里的Object o,代表了需要传入的实际参数,去代替前面用#{}占位符所占位的变量。

这里的count,就是CRUD后的返回值。值得注意的是select查询语句(DQL)因为查询语句有查询一个和查询多个,返回的就是一个对象,需要对对象进行解析。

select查询一个的时候:

Object o = sqlSesson.select(String s,Object o)

select查询多个的时候:

List<User> list = sqlSession.selectList("selectUser");

直接返回一个List/Map集合,然后对集合遍历就行

第五步:关闭通道

因为在我们调用openSession()方法的时候,打开了一个Session会话,在执行玩sql语句的时候理应应该释放内存。使用需要进行关闭操作。

sqlSession.close();

第六步:手动提交事务

这一步非常重要,因为在我们openSession的时候,并没有给定boolean值,为了去防止JDBC的自动提交机制,所以在这一步中,我们需要将内存中已经操作完成的sql语句与实际数据库进行同步。

sqlSession.commit();

创建工具类SqlSessionUtil

通过对sqlSession创建的封装,达到简化代码,以后在创建对象时只需要new SqlSessionUtil即可,删去了重复的冗长的代码片段,提高了代码的复用性

package com.hbsfdxwlxy.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;

/**
 * @author BelieveSun
 * @version 1.0
 * @since 1.0
 *
 * SqlSession工具类
 */
public class SqlSessionUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        // 创建对象
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"),"mybatis");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    private SqlSessionUtil(){}

    // 获取SqlSession对象
    public static SqlSession openSession(){
        return sqlSessionFactory.openSession();
    }
}

忽有故人心上过,回首山河已是秋