前身背景:

前身是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. CentOS7 firewall与iptables防火墙的使用与开放端口

    如何关闭firewall并开启iptables防火墙 如何使用firewall防火墙 如何关闭firewall并开启iptables防火墙 1.停止firewall systemctl stop fi ...

  2. 写一个可拖动的 TShape(简单有效:依靠VCL体系,TShape自己就能被探测到被点击了,然后只要改变Left坐标就行了)

    问题来源: http://www.cnblogs.com/del/archive/2009/03/09/1234066.html#1471535 本例效果图: 自定义类(TMyShape)单元 : u ...

  3. APP导航设计九法

    近期在设计APP原型,用EXCEL,用Axure.但无论工具如何,产品本身的界面布局和交互设计确实逃不掉的!网络中有关于APP导航设计的总结: 第一种:app标签导航  易用性:★★★★★   趣味性 ...

  4. Spark之SparkSql

    -- Spark SQL 以编程方式指定模式 val sqlContext = new org.apache.spark.sql.SQLContext(sc) val employee = sc.te ...

  5. C#中await/async闲说

    自从C#5.0增加异步编程之后,异步编程越来越简单,async和await用的地方越来越多,越来越好用,只要用异步的地方都是一连串的异步,如果想要异步编程的时候,需要从底层开始编写,这样后边使用的时候 ...

  6. 我与微软的不解之缘 - 我的Insider Dev Tour 2019讲师之旅

    标题:我与微软的不解之缘 - 我的Insider Dev Tour 2019讲师之旅 作者:Lamond Lu 大家好,我是陆楠,来自北京盛安德青岛分公司,今年非常有幸作为讲师参加了微软Insider ...

  7. 深入V8引擎-AST(2)

    先声明一下,这种长系列的大块头博客只能保证尽可能的深入到每一行源码,有些代码我不乐意深究就写个注释说明一下作用.另外,由于本地整理的比较好,博客就随心写了. 整个Compile过程目前只看到asmjs ...

  8. 你的http需要“爱情”

    目的是为了更白话的认识http,面对业内人,还有一些吃瓜的... 故事背景描述: 男猪脚在情人节这天给他女票发送了一条信息,"I love U",女主角收到后很开心,也回复了一条信 ...

  9. spring boot + druid + mybatis + atomikos 多数据源配置 并支持分布式事务

    文章目录 一.综述 1.1 项目说明 1.2 项目结构 二.配置多数据源并支持分布式事务 2.1 导入基本依赖 2.2 在yml中配置多数据源信息 2.3 进行多数据源的配置 三.整合结果测试 3.1 ...

  10. 初步接触 Java Net 网络编程

    本文目的是大概了解 Java 网络编程体系,需要一点点 Java IO 基础,推荐教程 系统学习 Java IO.主要参考 JavaDoc 和 Jakob Jenkov 的英文教程<Java N ...