MyBatis入门

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销毁的时候,它也会销毁。
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值