第一步:创建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();
}
}