一、MyBatis使用过程
-
获取输入流对象,读取MyBatis配置文件,
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
-
mybatis-config.xml:核心配置文件
-
Resources:mybatis提供的加载资源的工具类
-
-
创建 SqlSessionFactoryBuilder 构建者对象
-
根据输入流对象,使用构建者创建 SqlSessionFactory 工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
- SqlSessionFactoryBuilder:获取 SqlSessionFactory 工厂对象的功能类,
通过加载mybatis的核心文件的输入流的形式构建一个SqlSessionFactory对象
- SqlSessionFactory:获取 SqlSession 构建者对象的工厂接口
-
使用工厂对象,创建 SqlSession 对象
SqlSession sqlSession = factory.openSession();
- SqlSession:构建者对象接口。用于执行 SQL、管理事务、接口代理
-
根据SqlSession 对象,传入 数据层的接口,得到一个实现类对象
UserDao mapper = sqlSession.getMapper(UserDao.class);
接口代理方式的四个必要条件:
- Mapper.xml文件中的namespace与mapper接口的全限定名相同
- Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
- Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
- Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
除了接口代理的方式,还可以直接使用sqlsession对象执行映射配置文件中的sql语句:
sqlSession.insert("UserDaoMapper.insert",new User(111,"zhang","666"));
UserDaoMapper为namespace
其实接口代理方式在底层也是通过代理模式调用SqlSession方法来执行sql语句的。
-
实现类对象可以直接执行数据层操作
List<Student> studentList = mapper.findAll();
-
SqlSession 对象可以操作事务
-
通过SqlSession对象提交、回滚事务
sqlSession.commit(); sqlSession.rollback();
-
-
关闭资源
其中1,2,3 可以再一个工厂类中使用静态代码块的方式实现,4,5 可以使用静态方法实现。