1.MyBtis基本构造
(1)SqlSessionFactoryBuilder(构造器):根据配置信息或者代码生成SqlSessionFactory (工厂接口);
(2)SqlSessionFactory:依靠工厂生成SqlSession(会话);
(3)SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口;
(4)SQL Mapper:由一个Java接口和XML文件(或注解)构成的组件,需要给出对应的SQL和映射规则,负责去执行SQL,并返回结果。
2.原理
(1)Resources通过加载myBatis-config.xml获取输入流;
(2)SqlSessionFactoryBuilder从输入流读取配置信息,创建session工厂SqlSessionFactory;
(3)SqlSessionFactory创建SqlSession,open session;
(4) SqlSession操作映射器Mapper组件,由映射器去执行SQL,并返回结果;(SqlSession获取映射器,让映射器通过命名空间和方法名找到对应的SQL,发送给数据库,执行后并返回结果)
(5)SqlSession获取结果后,关闭session;
4.生命周期
(1)SqlSessionFactoryBuilder :利用xml或java代码获取资源构建sqlSessionFactory,一旦构建,其作用就完结了,失去存在意义,生命周期只存在于方法局部。
(2)SqlSessionFactory :创建sqlSession ,sqlSession就是一个会话,每次应用程序需要访问数据库,都需要通过SqlSessionFactory创建会话,所以其应该Mybaits整个生命周期。
SqlSessionFactory 的创建应该采用单例模式,因为创建多次同一个数据库的SqlSessionFactory,则每次都会打开一个数据库连接(Connection),连接资源会被占用,数据库资源会被占用。
(3)SqlSession :相当于JDBC连接对象,生命周期应该在请求数据库处理事务的过程中,应该及时关闭sqlsession,避免造成数据库连接池的资源浪费,影响系统性能。
(4)Mapper :一个接口,没有实现类,其作用就是发送SQL,返回结果,或者执行SQL修改数据库数据,是一个SQLsession事务内的存在,一个方法级别相当于JDBC中的一条SQL语句的执行,其生命周期的最大范围是和SqlSession相同的。
3.实例
(1)log4j.properties
主要负责打印MyBtais运行轨迹,便于调试代码。
(2)Chapter2Main.java
程序入口
(3)RoleMapper.java
映射器
(4)RoleMapper.xml
Mapper组件即映射器组件由RoleMapper.java和RoleMapper.xml构成,负责放松SQL,并返回结果:
RoleMapper.java是一个接口,定义了需要访问数据的方法,不需要具体的实现类;
RoleMapper.xml定义了具体的SQL,SQL语句的id对应RoleMapper.java接口的方法名,parameterType对应方法参数,resultType对应方法返回类型
(4)mybatis-config.xml
配置文件主要定义了:(1)POJO类的别名,便于MyBatis上下文引用;(2)JDBC的事务管理模式,数据库信息;(3)配置映射器