JavaJava后端java专题

【MyBatis】初体验

2019-02-01  本文已影响5人  大数据阶梯之路

Spring框架的学习告一段落,重点学习了IoC和AOP的概念以及应用,接下来本篇进入Mybatis的学习。

一、MyBatis简介

MyBatis前身是iBatis,是Apache的一个开源项目,2010年这项目转到Goodle并更名为MyBatis,2013年迁至github,是一款开源的数据持久层框架,内部封装了JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索,其主要思想是将程序中大量的SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。在我的另外一篇文章中有关于各个框架的介绍以及mybatis和hibernate这两款数据持久层框架的区别介绍。

二、基本概念

Q:什么是ORM?
A:即对象/关系映射,是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并提供了一种机制,通过JavaBean对象去操作数据库表中的数据。mybatis框架就是一种半自动化的ORM实现,通过简单的XML或者注解进行配置和原始映射,在实体类和SQL语句之间建立映射关系。

ORM图.png Q:什么是数据持久化?
A:数据持久化是将内存中的数据类型转化为存储模型以及将存储模型转化为内存中的数据类型的统称。比如,文件的存储,数据的读取,对数据表的增删改查。
Q:什么是DTD文件?
A:mybatis的DTD文件功能是自动联想节点元素。

三、mybatis环境搭建步骤:

  1. 下载jar包并部署jar包 mybatis-3.2.2.jar与mysql-connector-java-5.1.0-bin.jar(连接mysql)和log4j-1.2.17.jar(打印日志)
  2. 编写mybatis核心配置文件 mybatis-cfg.xml
  3. 创建实体类 pojo
  4. 创建dao接口 dao
  5. 创建SQL映射文件 mapper
    SQL映射文件一般对应相应的POJO类,命名规则为:POJO名称 +Mapper。一般情况下,保证POJO对象的属性与数据库表的字段名一致即可。

注意:mybatis-cfg.xml文件的元素节点是有一定顺序的,如果节点元素位置不按顺序则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 /> <!-- 用来引入外部配置属性文件或者直接配置属性 -->
    <settings /> <!-- 设置mybatis在运行时的行为方式 -->
    <typeAliases /> <!-- 为Java类型命名一个别名 -->
    <typeHandlers /> <!-- 类型处理器 -->
    <objectFactory /> <!-- 对象工厂 -->
    <plugins /> <!-- 插件 -->
    <environments> <!-- 配置环境 -->
        <environment> <!-- 环境变量 -->
            <transactionManager /> <!-- 事务管理器 -->
            <dataSource /> <!-- 数据源 -->
        </environment>
    </environments>
    <databaseIdProvider /> <!-- 数据库厂商标识 -->
    <mappers /> <!-- 映射器 -->
</configuration>

四、应用

每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。
步骤:先获取SqlSessionFactoryBuilder对象,调用build()方法创建SqlSessionFactory对象,之后再通过SqlSessionFactory对象的openSession()方法获取SqlSession实例,而SqlSession对象中就完全包含了以数据库为背景的所有执行SQL操作的方法。
1、SqlSessionFactoryBuilder生命周期和作用域?
其最大的特点就是用过即丢,一旦创建了SqlSessionFactory对象,这个类就不需要存在了,因此SqlSessionFactoryBuild的最佳使用是作为局部变量。
2、SqlSessionFactory的生命周期和作用域?
其特点与SqlSessionFactoryBuild的特点恰恰相反,它是一旦创建,就会在整个应用运行过程中始终存在。SqlSessionFactory的最佳作用域是Application,即随着应用程序的生命周期一同存在。“存在于整个应用运行期间,并且仅有一个对象实例”,这种模式就是单例模式。实现方式可放在静态代码块中,保证SqlSessionFactory对象只被创建一次。
3、SqlSession的生命周期和作用域?
SqlSession对应一次数据库会话,由于数据库会话不会是永久的,所以自然的,其生命周期也不会永久。SqlSession实例不能被共享,不是线程安全,因此最佳作用域是request作用域或者方法体作用域,还有注意SqlSession实例使用完要关闭掉。

上一篇 下一篇

猜你喜欢

热点阅读