Y2-SSM01-初始MyBatis

前言:

Mybatis 框架是非常流行的一个持久层框架。

使用此框架可以很方便的完成持久化的操作,比如增删改查。

本章学习的是 Mybatis 环境的搭建,Mybatis系统的全局配置文件,Mybatis的Sql映射文件以及 Mybatis 核心类的作用域和生命周期。

 

本章单词

Mybatis        

SQLSessionFactory             会化工厂

SqlSessionFactoryBilder      会化工厂建造者

SqlSession                          会话

Configuration                     文件配置

Mapper                              映射

Environment                       环境

扫描二维码关注公众号,回复: 3158737 查看本文章

Property                             性能

DataSource                        数据来源

TypeAliases                        类型别名

 

  框架的概念

框架 framework 是一个提供了可重用的公共结构的半成品。

它为我们构建新的应用程序提供了极大的便利。

提供了了可以拿来用就用的工具,更重要的是,提供了可重用的设计。

 

 数据持久化概念

数据持久化是将内存中数据模型转换为存储模型的统称。

例如,文件的存储和数据的读取都是数据持久化操作。

数据模型可以是任何数据结构或对象模型

存储模型可以是关系模型、XML、二进制流等。

 

Mybatis和ORM

Mybatis 是一个开源的数据持久层框架。

它内部封装了通过 JDBC 访问数据库的操作,支持普通的 SQL查询,存储过程和高级映射。

其主要的思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。

 

ORM  object Relational Mapping , 即对象/关系映射,是一种数据持久化技术。

它在对象模型和关系型数据库之间建立起对应关系

并且提供一种机制,通过JavaBean对象去操作数据库表中的数据。

有了ORM ,可以直接使用 API直接操作 JavaBean对象就可以实现数据库的各种操作。

Mybatis通过简单的XML或者注解进行配置和映射,将实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。

 

创建Mybatis 核心配置文件 configuration.xml

此配置文件主要用于配置数据库连接和Mybatis运行时所需的各种特性,和影响Mybatis行为的属性。

<configuration> <!--配置文件的根元素节点-->

    <!--
数据库的连接配置-->

   
<properties resource="database.properties"/>   <!--1.引用外部配置文件-->

   
<properties><!--2.直接写在属性里 -->
       
<property name="driver" value="com.mysql.jdbc.Driver"/>
        <property
name="url" value="jdbc:mysql://localhost:3306/smbms"/>
        <property
name="username" value="root"/>
        <property
name="password" value="root"/>
    </properties>

   
<!--设置 MyBatis 运行中的一些行为-->
   
<settings>
        <setting
name="logImpl" value="LOG4J"></setting>
    </settings>

   
<!--给实体类集体取别名-->
   
<typeAliases>
        <package
name="cn.smbms.pojo"/>
    </typeAliases>

   
<!--配置  MyBatis 多套运行环境,必须指定一个默认的 运行环境-->
   
<environments default="development">
        
<!--配置  MyBatis 一套运行环境-->
       
<environment id="development">
           
<!--采用 JDBC 的事务管理-->
           
<transactionManager type="JDBC"></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>

   
<!--指定 SQL 映射文件的路径-->
   
<mappers>
        <mapper
resource="cn/smbms/dao/user/UserMapper.xml"/>
    </mappers>

 

此配置文件的元素节点是有一定顺序的,若是不按顺序排列则会报错。

 

持久化类(POJO)和SQL映射文件

持久化类是指其实例状态需要被MyBatis持久化到数据库中的类。

在应用的设计中,持久化类通常对应需求中的业务实体。

MyBatis 一般采用POJO编程模型来实现持久化类,与POJO类配合完成持久化工作是MyBatis最常见的工作模式。

 

POJO(Plain Ordinary Java Object),可以简单理解为符号JavaBean规范的实体类。

它不需要继承和实现任何的接口和类。

JavaBean对象的状态保存在属性中,访问属性必须通过对应的getter 和 setter 方法。

 

一般情况下,不需要POJO类名和数据库的表名相同,只要POJO对象的属性和数据库表的字段名一致即可。

 

SQL映射文件一般对应相应的POJO,所有一般都是采用 POJO的名称加Mapper的规则老命名的。

Mapper:映射文件的根节点元素,只有一个属性 namespace。

       Namespace:用来区别不同的Mapper,全局唯一性。

Select:表示查询语句,是最常见的元素之一。

       Id:该命名空间下的唯一标识符。

       ResultType:表示了Sql语句返回值类型。

 

MyBatis 框架的优点:

与传统的JDBC相比,减少了 大量的代码,

MyBatis 框架是最简单的持久化框架,简单易学。

MyBatis 框架相当灵活,不会对应用程序或者数据库的现有设计造成影响

SQL写在了XML里,从程序代码中彻底分离,降低了耦合度,便于统一管理和优化。

提供了XML标签,支持编写动态SQL语句

提供了映射标签,支持对象与数据库的ORM字段关系映射。

 

MyBatis 框架的缺点

SQL语句的编写工作量较大,对于编程人员有一定的要求。

SQL语句比较依赖数据库,造成数据库的移植性很差,不能随意的更换数据库。

 

MyBatis 框架适用的场合

MyBatis 专注于SQL本身,是一个足够灵活的Dao层解决方案,对性能的要求很高,或者需要变化较多项目。

 

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

核心接口和类

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

首先获取 SqlSessionFactroyBuilder对象,可以根据XML配置文件或Configurtion类的实例构建该对象。

然后获取SqlSessionFactory对象,该对象实例可以通过SqlSessionFactroyBuilder对象来获得。

有了SqlSessionFactory对象之后,就可以进而获取SqlSession实例

SqlSession对象中完全包含以数据库为背景的所有执行SQL操作的方法

可以用该实例来直接执行已映射的SQL语句。

 

SqlSessionFactroyBuilder

SqlSessionFactroyBuilder 负责构建 SqlSessionFactroy 并且提供了多个 build方法的重载。

配置信息可以以三种形式提供给SqlSessionFactroyBuilder的build()方法,

分别是 inputSteam 字节流、reader 字符流、Configuration 类。

 

SqlSessionFactroyBuilder 的最大特点就是用过即丢,一旦创建了SqlSessionFactroy之后。这个类也就没有存在的需要了,因此SqlSessionFactroyBuilder的最佳作用范围是存在与方法体内,也就是局部变量。

SqlSessionFactroy      

SqlSessionFactroy 简单的理解就是创建 SqlSession实例的工厂。

所有的MyBatis应用都是以 SqlSessionFactroy 实例为核心

SqlSessionFactroy 实例可以通过 SqlSessionFactroyBuilder 对象来获得。

有了 SqlSessionFactroy 之后就可以通过 它提供的 openSession()方法来获取 SqlSession实例

openSession()方法的参数为true是表示关闭 事务控制,自动提交。

若为 false 表示开启事务控制,需要手动提交

若不写值,默认为 true.。

 

SqlSessionFactroy 对象一旦创建,就会在整个应用运行过程中始终存在。

没有理由去销毁和去重建它,并且应用运行中也不建议多次创建 SqlSessionFactroy。

SqlSessionFactroy的最佳作用域是 application,即随着应用的生命周期一同存在,指在运行期间有且只有一个实例。

 

SqlSession

是用于执行持久化操作的对象,类似于JDBC的 connection.。

它提供了面向数据库执行SQL命令所需的所有的方法。

可以通过SqlSession 实例直接运行已映射的 SQL语句。

 

SqlSession对应着一次数据库会话

数据库会话不是永久的,所有的SqlSession的生命周期也不应该是永久的。

每次访问数据库时都需要创建它,

一个SqlSession是可以执行多次SQL语句的,但是如果关闭了它就需要重新创建了。

 

每个线程都有自己的SqlSession实例,SqlSession实例是不能共享的,也不是线程安全的。

所有它的最佳作用域是 request 或 方法体内。

 

关闭SqlSession是很重要的,必须要确保 SqlSession 在 finally 块中被关闭。

 

SqlSession 使用的两种方式

1.通过使用SqlSession 实例来直接执行已经映射的 SQ语句。

 

2.基于 mapper接口方式操作数据。

 

第二种方式是 MyBatis官方推使用的,其表达方式也更加直白,代码更加清晰,类型安全

也不用担心易错的字符串和强制类型转换。

 

 

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

该文件配置了 MyBatis的一些全局信息,包含数据库连接信息和 MyBatis运行时所需的各种特性,以及设置和影响 MyBatis 行为的一些属性。

 

该配置文件需要配置一些基本元素,需要注意,该配置文件的元素节点是有先后顺序的。

Properties元素

Properties元素描述的都是外部化,可替代的属性。

有两种方式进行配置:

(1)可以通过外部指定的方式,即配置在典型的Java的属性配置文件中,然后在引入

此配置文件

 

       (2)直接配置在xml中,并使用这些属性对配置项实习动态配置。

 

如果两种方式同时使用,那么 resource属性值的优先级高于 property 子节点配置的值。

 

settings 元素

       Settings元素的作用是设置一些非常重要的设置和选项,用于设置和改变MyBatis运行 中的行为。

设置项

描述

允许值

默认值

CacheEnabled

对在此配置文件下的所有cache进行全局开关设置

True    false

True

lazyLoadingEnabled

全局性设置懒加载。如果设置为flase,则所有相关联的都会被初始化加载

True    false

True

AtuoMappingBehavior

MyBatis对于resultMap自动映射的匹配级别

None   partial

FULL

PARTIAL

 

typeAliases 元素

typeAliases 的作用是配置类型别名,通过与 MyBatis 的映射文件相关联

减少输入多余的完整类名,以简化操作。

 

environments 元素

Mybatis 可以配置多套的运行环境。

如开发环境、测试环境、生产环境等,我们可以灵活的选择不同的配置,

从而将SQL映射应用到不同的数据库环境上。

不管有几套运行环境,都必须明确选择出当前的唯一一个运行环境。

这是因为每个数据库都是对应一个 SqlSessionFactroy实例的,需要指明那个运行环境将被创建,并把运行环境中设置的参数传递给SqlSessionFactroyBuilder.

 

默认的运行 id:通过 default指定当前的运行环境,对于环境id要保证唯一性。

transationManager 事务管理器,设置其为 JDBC

MyBatis有两种事务管理类型,即 JDBC 和 managed

直接使用 JDBC 的提交和回滚功能,依赖于从数据源获得连接来管理事务的生命周期。

dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。

MyBatis 提供了三种数据源类型:

Unpooled 、  pooled 、 JNDI

            

Mappers 元素

映射器,用来定义 SQL 的映射语句

我们只需要告诉 MyBatis 去哪里找到这些 SQL 语句。

也就是去哪里找相应的 SQL 映射文件。

可以使用类资源路径 和 URL 等。

  1. 使用类资源路径:

(2) 使用 URL 获取资源:

本章总结:

1. 框架是一个提供了可重用的公共结构的半成品。它为构建新的应用提供了极大的便利。

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

3. ORM  即对象关系映射,可以理解成为一种数据持久化技术

4. MyBatis的基本要素包括 核心对象和类,核心配置文件,SQL映射文件。

 

 

猜你喜欢

转载自blog.csdn.net/weixin_42413153/article/details/82463196