import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * 封装了Mybatis工厂的加载过程
 * 功能 : 可以提供一个SqlSession 【数据库连接对象】
 */
public class DBUtil {
private static SqlSessionFactory factory;
	static {
		//1.创建一个工厂的建造者【使用了建造者设计模式】
		SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
		//2. 通过建造者来创建一个Mybatis的工厂【mybatis-config.xml 就是创建的图纸】
		try(InputStream ins = Resources.getResourceAsStream("mybatis-config.xml");) {
			factory = factoryBuilder.build(ins);
		} catch (Exception e) {
		}
	}
	/**
	 * 这种方式的SqlSession默认为手动提交【事务场景使用】
	 * @return
	 */
	public static SqlSession openSqlSession() {
		return openSqlSession(false); // 本质 : conn.setAutoCommit(false)
	}
	/**
	 * 这种方式的SqlSession可以设置为手动提交,还可以设置为自动提交
	 * @param flag  true【自动提交的】 false【手动提交】
	 * @return
	 */
	public static SqlSession openSqlSession(boolean flag) {
		return factory.openSession(flag);
	}
}
public class EmployeeTest {
	@Test
	public void testFindById() {
		SqlSession sqlSession = DBUtil.openSqlSession(true);
		EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
		Employee emp = mapper.findById(11);
		System.out.println(emp);
	}
}

