前身背景:

前身是iBatis,为Apache的一个开源项目。2010年迁移到了Google Code,改名为MyBatis.2013年迁移到Github。

MyBatis框架以及ORM

MyBatis是一个开源的数据持久层框架,内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射。作为持久层框架,主要思想是将程序中的大量的SQL语句分离出来,配置在相应的配置文件中,这样可以在不修改代码的情况下,直接在配置文件中的修改SQL。

ORM(Object/Relational Mapping)对象关系映射。是一种数据持久化的技术。在对象模型和关系型数据库之间建立关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。MyBatis通过简单的XML或者注解进行配置和原始映射,将实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。

MyBatis环境搭建:

1.下载jar包,

官方网站:http://mybatis.org.(目前官网在国内受限制,若可以访问到,所有下载链接全部引导至github上-----推荐下载mybatis-3.2.2.zip和mybatis-3-mybatis-3.2.2.zip)

github网址:https://github.com/mybatis/mybatis-3/releases.

2.部署jar包,

将下载的jar包以及需要的jar包(如:数据库驱动jar文件或log4j负责日志数据jar文件)部署至项目的lib目录下。

3.创建mybatis核心配置文件-configuration.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="mybatis.properties" />
<typeAliases>
<package name="cn.bdqn.pojo" />
</typeAliases>
<!-- 配置数据源,事务 -->
<environments default="deploy">
<environment id="deploy">
<!-- 事务管理器:JDBC/MANAGED -->
<transactionManager type="JDBC" />
<!-- 数据源:POOLED/UNPOOLED/JNDI -->
<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>
</configuration>

  configuration:配置文件的根节点。

  Properties:从外部引入指定的properties属性文件,一般为数据库连接的配置信息。

  Settings:设置MyBatis运行中的一些行为,如果,此次设置MyBatis的log日志文件实现为LOG4J,既使用log4j实现日志功能。

  Environments表示配置多套运行环境,映射到不同的数据库,该元素下可以配置多个environment子元素节点,但是必须通过default指定一个默认的运行环境。

    <mappers>
<mapper resource="cn/bdqn/dao/IUserMapper.xml" />
</mappers>

  Mappers:作用是告诉MyBatis去哪里找SQL映射文件。

  Mapper:具体指定SQL映射文件的路径,resource属性的值表示映射文件的路径。

------注意:MyBatis中核心配置文件的元素节点是有一定顺序的,若不按顺序排位,那么XML文件会报错。

4.创建持久化类(POJO)和SQL映射文件。

因为MyBatis是pojo(实体类)与是SQL语句之间的映射机制,一般情况下,保证pojo类的属性和表中的字段名一致。

SQL映射文件元素节点

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

Namespace:用于区分不同的mapper.全局唯一。(一般为接口的完全限定名)

Select:查询语句,常用属性如下(特别属性后面介绍---)

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

resultType:表示SQL语句的返回值类型。

5.编写测试类

(1)读取全局配置文件(xxx.xml”)

    Reader reader = Resources.getResourceAsReader(“xxx.xml”);

(2)创建sqlsessionfactory,完成配置文件的读取。

    SqlSessionFactory    sessionFactory = new SqlSessionFactoryBuilder().build(reader);

(3)创建sqlSession对象,通过sqlSession调用相应的方法进行操作。

    sessionFactory.openSession();//打开sqlSession对象

    Sqlsession.getMapper(接口名.class).执行的方法(参数);

(4)关闭sqlSession对象。

    sessionFactory.close();//关闭sqlSession对象

MyBatis优缺点以及其适用场合

优点:

    1.与JDBC相比,代码量减少了50%以上。

    2.最简单的持久层框架,小巧简单易学

    3.SQL语句写在XML文件,从程序代码中彻底分离,便于统一管理和优化,并可重用。

    4.提供XML标签,支持编写动态SQL语句。

    5.提供映射文件,支持对象与数据库的ORM字段关系映射。

缺点:

    1.SQL编写工作量较大,对开发人员编写SQL语句的功底有一定的要求。

    2.SQL依赖于数据库,数据库的移植性差,不能随意更换数据库。

适应场合:

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

MyBatis的基本要素-----核心对象。

一、核心接口和类。

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

  (2)首先获取SqlSessionFactoryBuilder对象,根据xml文件或Configuration类的实例构建该对象。

  (3)获取SqlSessionFactory对象,通过SqlSessionFactoryBuilder对象获取。

  (4)通过SqlSessionFactory获取SqlSession实例,此实例完全包含以数据库为背景的所有执行SQL操作方法。

    直接执行已经映射的SQL语句。

  1.SqlSessionFactoryBuilder对象

作用:负责构建SqlSessionFactory,并且提供了多个build()方法的重载

    (1).build(Reader reader,String environment,Properties properties)//字节流

    (1).build(InputStream inputStream,String environment,Properties properties)//字符流

    (1).build(Configuration config)//类

生命周期和作用域:最大的特点为用过即丢,一旦创建了SqlSessionFactory对象之后,这个类就不再需要了。

最佳范围存在于方法体内,也就是个局部变量而已。

·  2.SqlSessionFactory对象

作用:可以通过此对象的OpenSession()方法获得SqlSession()实例。

生命周期和作用域:对象一旦创建,在整个应用运行过程中始终存在。最佳的作用域范围是Application,随着应用的生命周期一同存在。

--------------------------------------------------------------------------------------------------------------------------

1.创建工具类util,在静态块中创建SqlSessionFactory对象。

    

2.创建SqlSession对象和关闭SqlSession

   

--------------------------------------------------------------------------------------------------------------------------

·  3.SqlSession对象

作用:用于持久化操作的对象,类似于JDBC中的connection,提供了面向数据库执行SQL命令所需的所有方法,

生命周期和作用域:对应着一次数据库会话,若关闭的SqlSession会话,就需要重新创建它。

注意:每个线程都有自己的SqlSession实例,所以不能被共享,是线程非安全的,最佳作用域范围是request作用域或者方法体作用域。

使用方式:1.直接执行已映射的Sql语句,例如:直接调用selectList方法执行查询。

     2.基于mapper接口方式操作数据。例子:Sqlsession.getMapper(接口名.class).执行的方法(参数);

二、核心配置文件

核心配置文件的一些基本的元素,需注意,元素节点有相应的先后顺序。如下图:

    

----configuration元素为整个xml配置文件的根节点,相当于总管。

1.properties元素:外部化、可替代的属性。

  (1)通过外部指定的方式:<properties resource="database.properties">引入database.properties文件。

  (2)直接配置xml文件。

    <properties>

      <property name = "xx" value = "xx">......

    </properties>

补充:如果以上的两种方式同时使用的话,外部引入优先级高于property子节点配置的值。

2.settings元素:设置重要的选项,用于设置和改变MyBatis运行中的行为。

设置项 描述 允许值 默认值
cacheEnabled 对在此配置文件下的所有cache进行全局性开/关设置 true | false true
lazyLoadingEnabled 全局设置懒加载,设置为false,则所有相关联的都会被初始化加载 true | false true
autoMappingBehavior MyBatis对于resultMap自动映射的自动匹配级别 NONE | PARTIAL | FULL PARTAL

  autoMappingBehavior的三个允许值:

  NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。

3.typeAliases元素:配置类型别名,减少输入多余的完整类名,以简化操作。

  更简化的写法:通过package的name属性直接指定包名,MyBatis会自动扫描指定包下的JavaBean,并默认设置别名(javabean的非限定类名)

4.environments元素:配置多套运行环境,可讲SQL映射应用到不同数据库环境上.

  (1)默认的运行ID:通过default属性来指定当前的运行环境ID。对于环境ID的命名要确保唯一。

  (2)transactionManager事务管理器:类型分为JDBC和MANAGED,直接使用JDBC的提交和回滚功能。

    一、使用JDBC的事务管理机制:即利用java.sql.Connection对象完成对事务的提交(commit())、回滚(rollback())、关闭(close())等

    二、使用MANAGED的事务管理机制:这种机制MyBatis自身不会去实现事务管理,而是让程序的容器如(JBOSS,Weblogic)来实现对事务的管理

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

    1.UNPOOLED:为每一个数据库操作创建一个新的连接,并关闭它,该方式只适用于只有小规模数量并发用户的简单应用程序上。

    2.POOLED:创建一个数据库连接池,池中的一个连接将会被用作数据库操作,一旦完成,会将此连接返回给连接池,经常使用此种方式。

    3.JNDI:从在应用服务器配置好的JNDI数据源datasource获取数据库连接,在生产环境中,优先考虑此方式。

5.mapper元素:映射器,用来定义SQL的映射语句,只需告诉MyBatis去哪里找这个SQL语句,

  (1)使用类资源路径获取资源。

    <mappers>

      <mapper resource="cn/smbms/dao/user/UserMapper.xml" />

    </mappers>

  (2)使用URL获取资源。

    <mappers>

      <mapper url="file:///E:/sqlmappers/UserMapper.xml" />

    </mappers>

---------------------------------------------------------------------------------------------------------------------------

MyBatis框架之基本知识介绍的更多相关文章

  1. spring、spring mvc、mybatis框架整合基本知识

    学习了一个多月的框架知识了,这两天很想将它整合一下.网上看了很多整合案例,基本都是基于Eclipse的,但现在外面公司基本都在用Intellij IDEA了,所以结合所学知识,自己做了个总结,有不足之 ...

  2. 【入门篇】前端框架Vue.js知识介绍

    一.Vue.js介绍 1.什么是MVVM? MVVM(Model-View-ViewModel)是一种软件架构设计模式,它源于MVC(Model-View-Controller)模式,它是一种思想,一 ...

  3. [推荐]dubbo分布式服务框架知识介绍

    [推荐]dubbo分布式服务框架知识介绍 CentOS+Jdk+Jboss+dubbo+zookeeper集群配置教程    http://wenku.baidu.com/view/20e8f36bf ...

  4. MyBatis框架知识整理

    MyBatis框架 一.介绍: MyBatis实际上是Ibatis3.0版本以后的持久化层框架[也就是和数据库打交道的框架]! 和数据库打交道的技术有: 原生的JDBC技术---> Spring ...

  5. 3.3.1 MyBatis框架介绍

    MyBatis框架介绍 1. 什么是框架 (1) 框架是偷懒的程序员将代码进行封装, 之后进行重复使用的过程. (2) 框架其实是一个半成品, 以连接数据库为例, 连接数据库使用的驱动, url, 用 ...

  6. struts2 + spring + mybatis 框架整合详细介绍

    struts2 + spring + mybatis  框架整合详细介绍 参考地址: https://blog.csdn.net/qq_22028771/article/details/5149898 ...

  7. MyBatis框架介绍及其实操

    一.基本概念和介绍 数据持久化的概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.例如,文件的存储.数据的读取等都是数据持久化操作.数据模型可以是任何数据 ...

  8. (转)MyBatis框架的学习(一)——MyBatis介绍

    http://blog.csdn.net/yerenyuan_pku/article/details/71699343 MyBatis介绍 MyBatis本是apache的一个开源项目iBatis,2 ...

  9. JavaWeb_(Mybatis框架)主配置文件介绍_四

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

随机推荐

  1. 在mac上尝试docker-swarm

    声明:本博客欢迎转发,但请保留原作者信息!新浪微博:@Lingxian_kong;博客地址:孔令贤的博客;内容系本人学习.研究和总结,如有雷同,实属荣幸! 安装docker-machine 我的安装环 ...

  2. Google Protocol Buffer 的使用和原理(无论对存储还是数据交换,都是个挺有用的东西,有9张图做说明,十分清楚)

    感觉Google Protocol Buffer无论对存储还是数据交换,都是个挺有用的东西,这里记录下,以后应该用得着.下文转自: http://www.ibm.com/developerworks/ ...

  3. SpringBoot实现文件上传

    前言参考:快速开发第一个SpringBoot应用 这篇文章会讲解如何使用SpringBoot完成一个文件上传的过程,并且附带一些SpringBoot开发中需要注意的地方 首先我们写一个文件上传的htm ...

  4. 「玩转树莓派」树莓派 3B+ 配置无线WiFi

    前言 网线不方便还花钱,有自带的无线 WiFi 模块为啥不用. 网络模式 这里我们先介绍两种网络模式,WPA-Personal 与 WPA-Enterprise. WPA-Personal 大多数家庭 ...

  5. LR编写Socket脚本方法1(XML/16进制报文data.ws格式)

    本文主要讲述了Socket协议脚本的基础知识和编写方法,让大家能够在短时间内快速掌握简单的Socket协议脚本的编写方法.1.socket协议介绍Socket协议有万能协议之称,很多系统底层都是用的s ...

  6. 浅入深出Vue:事件处理

    上一篇的最后留下了一个 v-on的思考,也就是本章的主题:事件处理 为什么需要事件处理 在前端开发中,经常要面对各种表单.按钮.而这里面就住着一个事件:点击 (click). 前端童鞋们肯定不陌生它, ...

  7. Matplotlib快速入门

    Matplotlib 可能还有小伙伴不知道Matplotlib是什么,下面是维基百科的介绍. Matplotlib 是Python编程语言的一个绘图库及其数值数学扩展 NumPy.它为利用通用的图形用 ...

  8. python模块之:paramiko

    1. 介绍: paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来实现.安装: ...

  9. Python批量自动裁剪图片

    """用Pythonp批量裁剪图片""" from PIL import Image import matplotlib.pyplot as ...

  10. code forces 1176 D. Recover it!

    原题链接:https://codeforces.com/contest/1176/problem/D 题目大意是 两个个数列 a , b 相同 ,如果 ai 是素数,那么b数列里添加上第ai个素数(2 ...