初识Mybatis(Mybatis入门,基础搭建环境)

Mybatis

本文学习思路:
在这里插入图片描述

一、Mybatis简介

什么是mybatis

mybatis百度百科
mybatis官方参考中文文档

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation
迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQLMaps和Data Access Objects(DAOs)


  • Mybatis前身是IBatis,本是Apache的一个开源的项目
  • 官方网站
    • http://mybatis.org
  • ORM框架
  • 实体类和SQL语句之间建立映射关系
  • 特点
    • 基于SQL语法,简单易学
    • 能了解底层封装过程
    • SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
    • 方便代码调试

mybatis能干什么

在这里插入图片描述


Mybatis的优缺点

  • 优点
    • 与JDBC相比,减少了50%以上的代码量
    • 最简单的持久化框架,小巧并简单易学
    • SQL代码从程序代码中彻底分离,可重用
    • 提供XML标签,支持编写动态SQL
    • 提供映射标签,支持对象与数据库的ORM字段映射
  • 缺点
    • SQL语句编写工作量大,对工作人员有一定的要求
    • 数据库移植性差

在这里插入图片描述


二、为什么需要框架技术

举个例子-写简历
在这里插入图片描述

框架技术

框架技术百度百科

  • 框架技术
    • 是一个应用程序的半成品
    • 提供可重用的公共结构
    • 按一定规则组织的一组部件
  • 分析优势
    • 不用再考虑公共问题
    • 专心在业务实现上
    • 结构统一,易于学习、维护
    • 新手也可以写出好程序

拥有框架技术,我们只有要“填写我们需要填写的部分”,就可以事半功倍!


主流框架的介绍

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


持久化和ORM

持久化是程序数据在瞬时状态和持久状态间转换的过程


namespace=cn.ebuy.dao.SystemUserMapper与接口进行匹配

如下图:
在这里插入图片描述


  • ORM(Object Relational Mapping)
    • 编写程序的时候,以面向对象的方式处理数据
    • 保存数据的时候,却以关系型数据库的方式存储
  • ORM在解决方案包含下面四个部分
    • 在持久化对象上执行基本的增、删、改、查操作
    • 在持久化对象提供一种查询语言或者API
    • 对象关系映射工具
    • 提供与事务对象交互,执行检查、延迟加载以及其他优化功能

三、搭建Mybatis开发环境

使用Mybatis的开发步骤

  • 1.下载mybatis的相关jar包并导入功能(pom文件导入即可)
  • 2.编写Mybatis核心配置文件(mybatis-config.xml文件)
  • 3.创建实体类-pojo
  • DAO层-SQL映射文件(mapper.xml)
  • 5.创建测试
    • 读取核心配置文件mybatis-config.xml文件
    • 创建SqlSessionFactory会话工厂对象,读取配置文件
    • 创建SqlSession会话对象
    • 调用mapper文件进行数据操作

四、Mybatis搭建中的核心接口和类结构

大致过程(调用方法实现如下):
在这里插入图片描述

SqlSessionFactoryBuilder

  • 用过即丢,其生命周期只存在方法体内(没有close方法)
  • 可重用其来创建多个SqlSessionFactory实例
  • 负责构建SqlSessionFactory,并提供多个build方法的重载
    在这里插入图片描述

SqlSessionFactory

  • SqlSessionFactory是每个Mybatis应用的核心
  • 作用:创建SqlSession实例
    在这里插入图片描述

  • 作用域:Application
  • 生命周期与应用的生命周期相同
  • 单例
    • 存在与整个应用运行时,并且同时只存在一个对象实例

SqlSession

  • 包含了执行SQL所需的所有方法
  • 对应一次数据库会话,会话结束必须关闭
  • 线程级别,不能共享
    在这里插入图片描述

在这里插入图片描述


  • SqlSession的获取方式
    在这里插入图片描述

  • SqlSession的两种使用方式
    • 通过SqlSession实例直接运行映射的SQL语句
    • 基于Mapper接口方式进行操作数据

方式一:
在这里插入图片描述


方式二:

在这里插入图片描述


核心配置文件详解

database.properties

示例:

driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl1
username=用户名
password=密码

mybatis-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>

    <!--加载数据库连接信息-->
    <properties resource="database.properties"><!--
    <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl1"/>
    <property name="username" value="c##ebuy"/>
    <property name="password" value="www123"/>-->

</properties>
    <!--配置日志输出为log4j-->
    <settings>
        <setting name="logImpl" value="log4j"/>
    </settings>
    <!--<typeAliases>
        <typeAlias type="cn.ebuy.pojo.SystemRole" alias="role"/>
    </typeAliases>-->



    <environments default="oracle">
        <environment id="oracle">
            <transactionManager type="JDBC"/>
            <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 resource="cn/ebuy/dao/SystemUserMapper.xml"/>
        <mapper resource="cn/ebuy/dao/SystemRoleMapper.xml"/>-->
        
        <package name="cn.ebuy.dao"/>
    </mappers>

</configuration>

在这里插入图片描述


配置properties文件的两种方式

  • 通过外部指定的方式(database.properties),实现动态配置
    配置properties的resource属性(推荐
    在这里插入图片描述

  • 直接配置为xml,实现动态配置
    在这里插入图片描述

两种方式的优先级

  • 若是两种方式同时都用了,那么那种方式优先呢?
    • 配置properties的resource指定
    • 配置properties的name和value

结论:
resource属性的优先级高于properties子节点配置的值

settings元素标签

settings标签中可以配置多个setting标签
在这里插入图片描述


typeAliases元素标签

  • 类型别名
  • 仅仅只关联XML配置,简写冗长的Java类名(但是我一般是写完整类名,方便ctrl进去实体类)
    在这里插入图片描述

environments元素标签

  • environments元素
    • 表示配置Mybatis的多套运行环境,将SQL映射到多个不同的数据库上
    • 子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)

注意:

在这里插入图片描述


大致图解如下:
在这里插入图片描述


  • 事务管理器
    在这里插入图片描述

  • dataSource

    • dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
    • 有三种内建的数据源类型
  • 语法
    在这里插入图片描述


  • 示例:
    在这里插入图片描述

POOLED 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
UNPOOLED 采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。
JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。
————————————————
版权声明:本文为CSDN博主「原野的稻草人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/QGhurt/article/details/106431398


mappers元素标签

  • 映射器,定义SQL映射语句
  • 必须在配置中引用mapper映射文件

  • 方式一:使用类资源路径获取资源(常用)
    在这里插入图片描述

也可以通过扫描包进行映射,避免了写多个xml文件繁琐!

如下:

<mappers>
        <package name="cn.ebuy.dao"/>
    </mappers>

  • 方式二:使用URL获取资源(没用过):

在这里插入图片描述

posted @ 2021-07-07 21:07  小吕不秃顶也能变强  阅读(22)  评论(0)    收藏  举报