初识MyBatis

       前言

        MyBatis是一个优秀数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置。


一、MyBatis介绍及环境搭建

1) 数据持久化概念

        数据持久化:将内存中数据模型转换为存储模型,以及存储模型转换为内存中的数据模型的统称。

2) MyBatis框架及ORM

        MyBatis作为持久化层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中。

        ORM(Object/Relational Mapping)对象/关系映射,是一种数据持久化技术。他在对象模型和关系型数据之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。MyBatis是ORM解决方案基于ORM,MyBatis在对象模型和关系数据库的表之间建立一座桥梁,通过MyBatis建立SQL关系映射,便捷实现数据存储、查询、更改、删除等操作。

3) MyBatis环境搭建

  • 下载jar包
  • 部署jar包
  • 新建Source Folder类型的resources目录
  • 编写MyBatis核心配置文件mybatis-config.xml

mybaits-config.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>        配置文件的根元素节点
            <!--引用database.properties 文件 指定properties属性文件-->
            <properties resource="data.properties"/>
            <!--配置mybatis的log实现为LOG4J 设置实现日志log4j功能-->
            <settings>                                            
                <setting name="logImpl" value="LOG4J"/>
            </settings>
          <!--设置resultMap默认级别:autoMappingBehavior属性NONE:只映射xml配置文件的列和属性 PARTIAL:只要列名和属性名相同,不管是否配置,都自动映射 FULL:在PARTIAL的基础上,开启自动映射-->
                <settings>
                   <setting name="autoMappingBehavior" value="NONE"/>
                </settings>    

            <!--给定类型指定别名-->
            <typeAliases type="类型的路径" alias="别名"></typeAliases>            

            <!-- 配置mybatis多套运行环境 多套运行环境映射多个不同的数据库可以配置多个environment-->
            <environments default="development">    
            <!--配置MyBatis的一套运行环境,-->
                <environment id="development">
                    <!--配置事务 管理,JDBC事务管理-->
                    <transactionManager type="JDBC"></transactionManager>
                    <!--POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源-->
            <!--type="POOLED"-连接池方式 ="UNPOOLED"-非连接池方式 ="JNDI"-->
                    <dataSource type="POOLED">                    
                        <property name="driver" value="${driver}"/>
                        <property name="url" value="${url}"/>
                        <property name="username" value="${user}"/>
                        <property name="password" value="${password}"/>
                    </dataSource>
                </environment>
            </environments>
            <!--将mapper文件加入到配置文件中-->
            <mappers>
         <!--指定SQL映射文件-->
                <mapper resource=""/>                            
            </mappers>
        </configuration>
  • 创建实体类

  • 创建SQL映射文件 mapper.xml

  • 创建xml文件实现映射

    <?xml vesion="1.0" encoding="utf-8" ?>
            <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
          <mapper namespace="cn.smbms.dao.user.UserMapper">                                    映射文件的根元素节点,只有一个属性namespace
              <!--查看用户记录数-->
              <select id="count" resultType="int">                                            查询语句,id属性:该命名空间下唯一标识符,resultType:SQL语句返回值
                  select count(1) as count from smbms
              </select>
          </mapper>

    4) 1.4.MyBatis框架的优缺点

    优点:

    1.与JDBC相比,减少了50%以上代码量。
    2.MyBatis简单,小巧易学。
    3.MyBatis灵活,不会对应用程序或数据库强加影响。
    4.提供XML标签,支持编写动态SQL语句。
    5.提供映射标签,支持对象与数据库的ORM字段关系映射。

    缺点:

    1.SQL语句编写工作量大。
    2.SQL语句依赖于数据库,导致数据库移植行差。

MyBatis的基本要素——核心对象

1) 核心接口和类

SqlSessionFactoryBuilder - build() - SqlSessionFactory - openSession() - SqlSession

        每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心

        首先获取SqlSessionFactoryBuilder对象,可以根据XML配置文件或Configuration类的实例构建该对象。然后获取SqlSessionFactory对象的实例能通过SqlSessionFactionBuilder对象来获得。有了SqlSessionFactory对象后,可以获得SqlSession实例,SqlSession对象包含所有执行SQL操作的方法。

MyBatis核心配置文件(mybatis-config.xml)

SQL映射文件(mapper.xml)

2) SqlSessionFactoryBuilder

作用:读取XML文件方式
负责构建SqlSessionFactory,提供多个build()方法重载。
分别是InputStream、Reader、Configuration三种读取方式
生命周期和作用域
用过即丢。一旦创建SqlSessionFactory对象后,这个类就不再需要存在了。

3) SqlSessionFactory 单例工厂 - 最好只存在一个工厂

作用:创建SqlSession实例的工厂。
提供多个openSession()方法的重载,openSession()方法参数为boolean值时,true表示关闭事务控制,自动提交。false开启事务提交,若不传入参数默认为true。
SqlSessionFactory创建就会在整个应用运行过程中始终存在。

4) SqlSession - 线程级别 - 不能共享

作用:执行持久化操作的对象。类似JDBC中Connection。
提供执行SQL命令所需的所有方法。如select、update、delete、
SqlSession对应一次数据库会话。生命周期不是永久的。可以执行多次SQL语句。若关闭了SqlSession。需要重新创建。