MyBatis框架结构与配置文件

一、框架与基本原理

 String resource = "mybatis-config.xml";  
//MyBatis的Resource类
Reader reader = Resources.getResourceAsReader(resource); 
//每个数据库对应一个 SqlSessionFactory 实例 
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 
SqlSession session = sqlSessionFactory.openSession();
try {
  // do work
/*
             * 接下来在这里做很多事情,到目前为止,目的已经达到得到了SqlSession对象.通过调用SqlSession里面的方法,
             * 可以测试MyBatis和Dao层接口方法之间的正确性,当然也可以做别的很多事情,在这里就不列举了
             */
            //插入数据
            User user = new User();
            user.setUserId("123");
            user.setUserName("123");
            user.setPhone("123");
            //第一个参数为方法的完全限定名:位置信息+映射文件当中的id
            session.insert("com.xnn.model.UserInfo.insert", user);
            //提交事务
            session.commit();
            //关闭session
            session.close();

} finally {
  session.close();
}

以下转自:MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用

mybatis框架主要是围绕着SqlSessionFactory进行的,创建过程大概如下:

(1)、定义一个Configuration对象,其中包含数据源、事务、mapper文件资源以及影响数据库行为属性设置settings

(2)、通过配置对象,则可以创建一个SqlSessionFactoryBuilder对象

(3)、通过 SqlSessionFactoryBuilder 获得SqlSessionFactory 的实例。

(4)、SqlSessionFactory 的实例可以获得操作数据的SqlSession实例,通过这个实例对数据库进行操作

如果想按照上述方式得到SqlSessionFactory,最好使用mybatis-config.xml类似的配置。在这里mybatis-config.xml配置文件是没有和Spring配置文件整合过得,如果项目中mybaits的配置文件和Spring配置文件整合过了,mybatis的配置文件基本没有存在的必要了,之前在mybatis中配置的数据源和事务这两个方面,一般的做法都会spring的配置文件。

以下转自:MyBatis框架及原理分析

MyBatis的主要成员

  • Configuration        MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
  • SqlSession            作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能
  • Executor               MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
  • StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等
  • ParameterHandler  负责对用户传递的参数转换成JDBC Statement 所对应的数据类型
  • ResultSetHandler   负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
  • TypeHandler          负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
  • MappedStatement  MappedStatement维护一条<select|update|delete|insert>节点的封装
  • SqlSource              负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
  • BoundSql              表示动态生成的SQL语句以及相应的参数信息

以上主要成员在一次数据库操作中基本都会涉及,在SQL操作中重点需要关注的是SQL参数什么时候被设置和结果集怎么转换为JavaBean对象的,这两个过程正好对应StatementHandler和ResultSetHandler类中的处理逻辑。

下图来自MyBatis 工作流程及插件开发

二、MyBatis配置文件

XML 映射配置文件

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<!-- 属性properties  
3种配置方式:1.property 子元素 2.properties 配置文件,引入外部properties配置文件的内容 3.程序的参数传递。-->
<properties resource="org/mybatis/example/jdbc.properties">
  <property name="username" value="dev_user"/>
  <property name="password" value="F2Fa3!33TYyg"/>
</properties>
<!--设置-->
    <settings>
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="false"/>
        <!--<setting name="logImpl" value="STDOUT_LOGGING"/> &lt;!&ndash; 打印日志信息 &ndash;&gt;-->
    </settings>
<!--类型别名-->
    <typeAliases>
        <typeAlias type="com.xnn.model.UserInfo" alias="User"/>
        <!-- 或者指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean
             <package name="com.xnn.model"/>
         -->
    </typeAliases>

    <environments default="development">
        <environment id="development">
             <transactionManager type="JDBC">
                  <property name="..." value="..."/>
            </transactionManager>
        <dataSource type="POOLED">
             <property name="driver" value="${driver}"/>
             <property name="url" value="${url}"/>
             <property name="username" value="${username}"/>
             <property name="password" value="${password}"/>
       </dataSource>
        </environment>
    </environments>

<!--映射器-->
    <mappers>
<!--*Mapper.xml文件定义SQL 映射语句-->
<!-- 使用相对于类路径的资源引用 -->
        <mapper resource="UserInfoMapper.xml"/>
<!-- 使用完全限定资源定位符(URL) -->
 <mapper url="file:///var/mappers/AuthorMapper.xml"/>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mapper class="org.mybatis.builder.AuthorMapper"/>

<!-- 将包内的映射器接口实现全部注册为映射器 -->
 <package name="com.xnn.dao"/>
    </mappers>

</configuration>

类型别名(typeAliases):

类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。

配置环境(environments):

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。不过要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。每个数据库对应一个 SqlSessionFactory 实例。

所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:

事务管理器(transactionManager):

在 MyBatis 中有两种类型的事务管理器(也就是 type=”[JDBC|MANAGED]”):

  • JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。

dataSource(数据源):

有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”)。

mappers(映射器):

这些配置会告诉了 MyBatis 去哪里找映射文件,进而找到SQL映射语句

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值