02相关讲解

2019-07-18  本文已影响0人  RobertLiu123

一、简介

MyBatis 本是[apache]的一个开源项目[iBatis], 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的[持久层]框架。

Mybatis是一个持久层框架。代替JDBC技术完成与数据库交互功能的框架,操作过程中,调用底层封装好的API,代码会被解析成JDBC源码进行功能实现。

二、优点

1、基于SQL语法的,简单易学。

2、jdbc将sql语句写在java语句中,属于硬编码,而框架把SQL语句被封装在配置文件中,方便程序的维护,降低程序的耦合度。

3、程序调试方便。
4、jdbc需要将查询结果映射到实体类中,而框架可以省去这一步骤,查询即得到映射好的对象。

三、mybatis工作原理和流程

image

四、关于Mybatis的API

1、SqlSession
SqlSession 中封装了对数据库的操作,如:查询、插入、更新、删除等。
2、SqlSessionFactoryBuilder
SqlSessionFactoryBuilder 用于创建 SqlSessionFacoty,SqlSessionFacoty 一旦创建完成就不需要SqlSessionFactoryBuilder 了,因为 SqlSession 是通过 SqlSessionFactory 生产,所以可以将SqlSessionFactoryBuilder 当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。
3、SqlSessionFactory
SqlSessionFactory 是一个接口,接口中定义了 openSession 的不同重载方法,SqlSessionFactory 的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理 SqlSessionFactory。

public class SqlSessionFactoryUtil {
    //首先创建静态成员变量sqlSessionFactory,静态变量被所有的对象所共享。
    public static SqlSessionFactory sqlSessionFactory = null;
    public static SqlSessionFactory getSqlSessionFactory() {
        //如果sqlSessionFactory没有被创建就读取全局配置文件,假如已经被创建过了,就使用已经存在的sqlsessionfactory。
        //这样就有了单例模式的效果
        if(sqlSessionFactory==null){
            String resource = "SqlMapConfig.xml";
            try {
                Reader reader = Resources.getResourceAsReader(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return sqlSessionFactory;
    }
}

五、类别名

1、以上提到,在xml文件中配置SQL语句时,需要使用全限定名,因此非常不便,需要配置类别名,使用typeAliases元素

<configuration>
    <typeAliases>
        <!-- typeAlias元素
        type,全限定名
        alias,类别名
         -->
        <typeAlias alias="User" type="com.neusoft.bean.User"/>
    </typeAliases>
    <environments default="oracle">

此时查询就可以使用User代替com.bean.User,注意,该元素必须在environments元素以前写,因为xml文件对元素顺序有要求
2、内置别名
java中的类型可以直接使用,无需配置别名,如int,long,String,List,Map

六、核心配置文件

1、defualt属性
现在,让我们来说一说environments元素的default属性,这是一个必须有的属性,由于系统可能配置多个数据源,因此需要指定一个默认数据源,default的值与environment的id相对应,那就走该id所在的数据源

<environments default="oracle">
        <environment id="oracle">
        </environment>
         <environment id="oracle1">
        </environment>
    </environments>

还有一种情况,若我default的值指定了某一个数据源,是不是就连不了别的数据源?答案是否定的,SqlSessionFactoryBuilder有一个重载的方法能够指定连接其他数据源,如下代码所示

<environments default="oracle">
        <environment id="oracle">

        </environment>
        <environment id="oracle1">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="kkk"/>
            </dataSource>
        </environment>
    </environments>
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader,"oracle1");

由于我在oracle1中密码错误,因此登录失败
2、事务管理器transactionManager
type属性,指定事务管理方式,可选值有
jdbc:利用传统jdbc方式进行事务处理,需要手动提交、回滚
MANAGED:让容器进行事务处理,此处容器指Spring容器,若配成此选项,意味着Mybatis不进行事务管理,交给Spring

3、dataSource元素
type属性,指定配置数据源连接的方式,可选择的值如下
POOLED,使用数据库连接池,使用能够存放多个已经生成好的数据库连接的区域,好处在于想拿连接时只需要open一下就可以拿到连接,不涉及对连接的管理
UNPOOLED,不使用数据库连接池,即使用原始连接方式,需要对连接管理
JNDI,使用第三方数据库连接池,POOLED表示使用Mybatis自己的连接池,如果想使用第三方,就选这一项,常见提供数据库连接池的第三方有tomcat自带的连接池,Spring容器
4、mappers
将应用中所有SQL映射文件配置到核心配置文件中,目的是加载核心配置文件时能够加载SQL映射文件,xml文件与以往java文件不同,java文件编译成字节码后,其他方法就可以调用其中的方法,想用xml文件必须加载
5、其他元素
如settings,可以用来优化配置,最多可以连几个连接,或同时最多可以执行几个SQL语句,几乎不常用,而且真正开发时也不需要你去做

上一篇下一篇

猜你喜欢

热点阅读