Mybatis4个核心组件:
SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口)
SqlSessionFactory:用来生成SqlSession的工厂
SqlSession:是一个可以发送SQL去执行并返回结果也可以获取Mapper的接口
SQLMapper(映射器):它是MyBatis新设计的组件,由一个JAVA接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则,它负责发送SQL去执行并且返回结果
构建MyBatis核心组件:
一:构建SqlSessionFactory
每一个MyBatis的应用都是以SessionFactory的实例为中心的,SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。
但是SqlSessionFactory是一个工厂接口而不是实现类,他的任务是创建SqlSession,MyBatis提供了两种模式去创建SqlSessionFactory:一种是XML配置的方式:另外一种是代码的方式。
这里我们的Configuration的类权限定名为org.apache.ibatis.session.Configuration,它在MyBatis中将以一个Configuration类对象的形式存在,而这个对象将存在于整个MyBatis应
用的生命周期中,以便重复读取和运用,Configuration类对象保存着我们配置在Mybatis的信息。MyBatis提供了两个SqlSessionFactory的实现类,DefaultSqlSessioFactory和
SqlSessionMappery,不过SqlSessionMapper目前还没有使用,目前使用的是DefaultSqlSessionFactory。
使用XML的方式构建SQLSessionFactory:
(1)配置事任管理
(2)配置数据库连接信息
(3)定义映射器
String resource = "mybatis-config.xml":
InputStream inputStream = Resource.getResourceAsStream(resource);
SqlSessionFactory salSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
使用代码的方式构建SQLSessionFactory:
(1)构建数据库连接池
PooledDataSource DataSource = new PooledDataSource();
DataSource.setDriver();
.......
(2)构建数据库事务方式
TransactionFactory ...
(3)创建数据库运行环境
Environment ...
(3)构建Configuration对象
并把数据库运行环境注册给它
Configuration configuration = new Configuration(environment);
SqlSessionFactory salSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
二:创建SqlSession
SqlSession是一个接口类,接口的实现类有两个分别为DefaultSqlSession和SqlSessionManager,SqlSession接口类似于一个JDBC的Connection接口对象,我们得保证每次用完正常关闭它
让连接资源归还给数据库,如果我们不能及时关闭,数据库的连接资源将很快被耗尽;
SqlSessionFactory sqlSession = null;
try{
sqlSession = SqlSessionFactory.openSession();
//some code
sqlsession.commit();
}catch(Exception ex){
sqlsession.rollback();
}finally{
if(sqlsession!=null){
sqlsession.close();
}
}
SqlSession的用途主要有两种
(1)获取映射器,让映射器通过命名空间和方法名称找到对应的SQL,发送给数据库执行后返回结果。
(2)直接通过命名信息去执行SQL返回结果
三:映射器
映射器是由Java接口和XML文件共同组成的,它的作用如下。
定义参数类型。
描述缓存。
描述SQL语句。
定义查询的结果和POJO的映射关系。
一个映射器的实现方式有两种,一种是通过XML文件方式实现,另外一种就是通过代码方式实现;
不推荐使用代码的方式实现映射器。
XML文件配置方式实现Mapper:
(1)给出Java接口
public interface RoleMapper{
public Role getRole(Long id);
}
(2)给出XML映射文件
<mapper namespace="com.mapper.RoleMapper">
<select id="getRole" parameterType="long",resultType="role">
select id ,role_name,note from table where id=#{id}
</select>
</mapper>
(3)定义Role POJO
private Long id;
private String role_name;
private String note;
//get、set
在Mybatis中保留着ibatis的通过“命名空间+SQL ID”的方式发生SQL并且返回数据的形式,而不需要去获取映射器,以下的代码为例
Role role = sqlSession.sellectOne Role role = sqlSession.selectOne("com.mapper.RoleMapper",1L);//并不推荐这种方式
各个核心组件的生命周期:
(一)SqlSessionFactoryBuilder
SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个SessionFactory,它的作用就是一个构建器,一旦我们构建了
SqlSessionFactory,它的作用就结束了,失去了存在的意义,这时我们就应该毫不犹豫的废弃它,所以它的生命周期只存在于方法的局部。
(二)SqlSessionFactory
SqlSessionFactory的作用是创建SqlSession,而SqlSession就是一个回话,相当于JDBC中的Connection对象,每次应用程序需要访问数据库,我们就要通过SqlSessionFactory
创建SqlSession,所以SqlSessionFactory应该在MyBatis应用的整个生命周期中,并且需要采用单例模式利于统一管理,避免过多的Connection被消耗;
(三)SqlSession
SqlSession是一个会话,相当于JDBC的一个Connection对象,它的生命周期应该是在请求数据库处理事务的过程中。它线程不安全,在涉及多线程的时候需要特别担心。
(四)Mapper
Mapper是一个接口,而没有任何实现类,它的作用是发送SQL,然后返回我们需要的结果,或者执行SQL从而修改数据库的数据,因此它应该在一个SqlSession事务方法
之内,是一个方法级别的东西,当SqlSession销毁的时候,它也会销毁。
SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口)
SqlSessionFactory:用来生成SqlSession的工厂
SqlSession:是一个可以发送SQL去执行并返回结果也可以获取Mapper的接口
SQLMapper(映射器):它是MyBatis新设计的组件,由一个JAVA接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则,它负责发送SQL去执行并且返回结果
构建MyBatis核心组件:
一:构建SqlSessionFactory
每一个MyBatis的应用都是以SessionFactory的实例为中心的,SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。
但是SqlSessionFactory是一个工厂接口而不是实现类,他的任务是创建SqlSession,MyBatis提供了两种模式去创建SqlSessionFactory:一种是XML配置的方式:另外一种是代码的方式。
这里我们的Configuration的类权限定名为org.apache.ibatis.session.Configuration,它在MyBatis中将以一个Configuration类对象的形式存在,而这个对象将存在于整个MyBatis应
用的生命周期中,以便重复读取和运用,Configuration类对象保存着我们配置在Mybatis的信息。MyBatis提供了两个SqlSessionFactory的实现类,DefaultSqlSessioFactory和
SqlSessionMappery,不过SqlSessionMapper目前还没有使用,目前使用的是DefaultSqlSessionFactory。
使用XML的方式构建SQLSessionFactory:
(1)配置事任管理
(2)配置数据库连接信息
(3)定义映射器
String resource = "mybatis-config.xml":
InputStream inputStream = Resource.getResourceAsStream(resource);
SqlSessionFactory salSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
使用代码的方式构建SQLSessionFactory:
(1)构建数据库连接池
PooledDataSource DataSource = new PooledDataSource();
DataSource.setDriver();
.......
(2)构建数据库事务方式
TransactionFactory ...
(3)创建数据库运行环境
Environment ...
(3)构建Configuration对象
并把数据库运行环境注册给它
Configuration configuration = new Configuration(environment);
SqlSessionFactory salSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
二:创建SqlSession
SqlSession是一个接口类,接口的实现类有两个分别为DefaultSqlSession和SqlSessionManager,SqlSession接口类似于一个JDBC的Connection接口对象,我们得保证每次用完正常关闭它
让连接资源归还给数据库,如果我们不能及时关闭,数据库的连接资源将很快被耗尽;
SqlSessionFactory sqlSession = null;
try{
sqlSession = SqlSessionFactory.openSession();
//some code
sqlsession.commit();
}catch(Exception ex){
sqlsession.rollback();
}finally{
if(sqlsession!=null){
sqlsession.close();
}
}
SqlSession的用途主要有两种
(1)获取映射器,让映射器通过命名空间和方法名称找到对应的SQL,发送给数据库执行后返回结果。
(2)直接通过命名信息去执行SQL返回结果
三:映射器
映射器是由Java接口和XML文件共同组成的,它的作用如下。
定义参数类型。
描述缓存。
描述SQL语句。
定义查询的结果和POJO的映射关系。
一个映射器的实现方式有两种,一种是通过XML文件方式实现,另外一种就是通过代码方式实现;
不推荐使用代码的方式实现映射器。
XML文件配置方式实现Mapper:
(1)给出Java接口
public interface RoleMapper{
public Role getRole(Long id);
}
(2)给出XML映射文件
<mapper namespace="com.mapper.RoleMapper">
<select id="getRole" parameterType="long",resultType="role">
select id ,role_name,note from table where id=#{id}
</select>
</mapper>
(3)定义Role POJO
private Long id;
private String role_name;
private String note;
//get、set
在Mybatis中保留着ibatis的通过“命名空间+SQL ID”的方式发生SQL并且返回数据的形式,而不需要去获取映射器,以下的代码为例
Role role = sqlSession.sellectOne Role role = sqlSession.selectOne("com.mapper.RoleMapper",1L);//并不推荐这种方式
各个核心组件的生命周期:
(一)SqlSessionFactoryBuilder
SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个SessionFactory,它的作用就是一个构建器,一旦我们构建了
SqlSessionFactory,它的作用就结束了,失去了存在的意义,这时我们就应该毫不犹豫的废弃它,所以它的生命周期只存在于方法的局部。
(二)SqlSessionFactory
SqlSessionFactory的作用是创建SqlSession,而SqlSession就是一个回话,相当于JDBC中的Connection对象,每次应用程序需要访问数据库,我们就要通过SqlSessionFactory
创建SqlSession,所以SqlSessionFactory应该在MyBatis应用的整个生命周期中,并且需要采用单例模式利于统一管理,避免过多的Connection被消耗;
(三)SqlSession
SqlSession是一个会话,相当于JDBC的一个Connection对象,它的生命周期应该是在请求数据库处理事务的过程中。它线程不安全,在涉及多线程的时候需要特别担心。
(四)Mapper
Mapper是一个接口,而没有任何实现类,它的作用是发送SQL,然后返回我们需要的结果,或者执行SQL从而修改数据库的数据,因此它应该在一个SqlSession事务方法
之内,是一个方法级别的东西,当SqlSession销毁的时候,它也会销毁。