1、  简介

MyBatis本是apache的一个开源项目iBatis的升级版,2013年11月迁移到Github,是三层架构中持久层框架。

目前提供了Java、.NET、以及Ruby三种语言实现的版本。

2、  提供一种“半自动化”的ORM实现。这种半自动化是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行;而MyBaits的着力点,则在于POJO与SQL之间的映射关系。

3、  JavaBean  EJB  POJO  Entity的区别

JavaBean:遵守JavaBean规范规范编写的java类,由该类实例化的对象成为JavaBean对象。编写JavaBean的目的是为Web容器提供可重用组件,提高数据封装性和降低耦合性。

EJB:在企业级应用中,需要可伸缩的性能和事务、安全机制等,这样才能保证企业级应用的需求。EJB就是在JavaBean规范的基础上提出的更高协议要求。它比JavaBean更复杂,功能更强大,它是JavaEE的核心组件。

POJO(plain ordinary Java Object):简单的Java对象。在企业级应用中,发现使用EJB异常繁琐和复杂,完全没必要每次都用,于是提出了POJO的概念,目的是为了避免和EJB混淆所创建的简称。所谓POJO就是指普通的JavaBean,它是相对EJB而言,但它比JavaBean更加纯粹,只有属性和get/set方法,且只能装载数据,作为数据存储的载体,而不具有业务逻辑处理能力。

Entity:实体类主要是作为数据管理和业务逻辑处理层面上存在的类别,用于对必须存储的信息和相关行为建模的类,一般与数据库表相对应。需要注意的是实体类涉及三层架构各层,一般将其归类到业务逻辑层。

4、  ORM(Object/Relation Mapping 对象/关系数据库映射):它是一种规范,描述了对象与关系数据库之间的映射基本特征。

ORM框架:它通过实现ORM规范,完成面向对象的编程语言到关系数据库的映射。它可以把关系型数据库封装成对象,解决面向对象编程语言与底层关系数据库不协调的问题。它是面向对象编程语言与关系数据库之间的桥梁。

ORM映射基本规则:

  • 类与表相对应,正常情况下,一个类对应一张表;
  • 类的属性(成员变量)与表每一列的字段相对应;
  • 类的实例与表中具体的一行记录相对应;
  • 数据库的表可以没有主键,但是类的实例中必须设置主键字段;
  • 一张表可以对应多个实体类,一个实体类也可以对应多张表;
  • 数据库中表与表的关系映射为对象之间的关系;
  • 对象中属性的个数和名称可以和表中的字段个数和名称不一样;

5、  环境配置

  • 导入MyBaits框架的jar包;
  • 工程的src根目录下创建基本配置文件SqlMapConfig.xml;
  • 编写SqlMapConfig.xml文件配置MyBaits框架环境;
  • 创建数据库表;
  • 编写数据库实体类;
  • 编写SQL映射器接口类;
  • 编写SQL映射文件(映射文件与映射器接口文件同一目录);
  • 编写测试类调用映射器接口方法;

6、  常见配置文件元素:

settings:用于设置MyBatis运行时方式,比如是否启用延迟加载等;

typeAliases:为Java类型指定别名,可以在XML文件中用别名取代Java类的全限定名;

environments:用于配置数据源信息,包括连接池、事务属性等;

mappers:程序中所有用到的SQL映射文件都在这里列出,这些映射SQL都被MyBatis管理;

7、数据源

数据源是一种提高数据库连接性能的常规手段,数据源会负责维持一个数据连接池,当程序创建数据源实例时,系统会一次性的创建多个数据库连接,并把这些数据库连接保存在连接池中。典型的空间换时间来提高性能。

8、  SQL映射文件

MyBaits使用JDBC的sql语句保存到SQL映射的XML文件中,来完成POJO与SQL之间的映射关系。

SQL映射文件中由很少的几个顶级元素:

select:映射查询语句;

insert:映射插入语句;

update:映射更新语句;

delete:映射删除语句;

sql:可以重用的SQL块,也可以被其它语句引用;

resultMap:用来描述如何从数据库结果集中来加载对象(最复杂);

cache:配置给定命名空间的缓存;

cache-ref:从其它命名空间引用缓存配置。

resultMap元素是MyBaits中最重要也是最强大的元素。它的设计就是简单的语句不需要明确的结果映射,而很多复杂语句确实需要描述他们的关系。

它有很多子元素:

  • id:用于标记主键;
  • result:注入到字段或POJO属性的普通结果;
  • association:用于复杂的类型的关联关系;
  • collection:用于集合类型的关联关系;
  • discriminator:使用结果值来决定使用哪个结果映射,用于继承关系。

9、  SQL映射器接口

用于调用SQL映射文件中的SQL语句,只有接口,没有实现类。

ThreadLocal

早在JDK1.2版本中就提供了ThreadLocal,为解决多线程程序并发问题提供了一种新的思路。使用ThreadLocal可以很简洁的编写出优雅的多线程程序。

ThreadLocal它不是一个线程,而是线程的一个本地化对象。当工作于线程中的对象使用ThreadLocal保存变量时,ThreadLocal为每一个使用该变量的线程分配一个独立的变量副本。所以每一个线程都可以独立的改变自己的副本,而不会影响其它线程所对应的副本。从线程的角度看,这个变量就像线程的本地变量,这也是类名中local所要表达的意思。

线程局部变量并不是java的新发明,很多语言在语法层面就提供线程局部变量。在Java中没有提供语言级支持,而是以一种变通的方法,通过ThreadLocal类提供支持。

Thread和线程同步机制都是为了解决多线程中相同变量的访问冲突问题,那么ThreadLocal与线程同步机制相比有如下特点:

  • 在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量,这时该变量是多个线程共享的,使用同步机制要求程序清楚什么时候对变量进行读写,什么时候需要锁定某个对象等复杂的问题,程序设计和编写难度相对较大。
  • ThreadLocal则从另一个角度来解决多线程的并发访问。ThreadLocal为每个线程提供了一个独立的变量副本,从而就没有必要对变量进行同步了。ThreadLocal提供了线程安全的对象封装,在编写多线程代码时,可以把不安全的变量封装到ThreadLocal中。
  • 对于多线程资源共享的问题,线程同步机制采用了“以时间换空间”的方式:即访问串行化、对象共享化;而ThreadLocal采用了“以空间换时间”的方式:即访问并行化、对象独享化。前者仅提供一份变量,而不同的线程排队访问;后者为每一个线程提供了一份变量,因此可以同时访问而互不影响。
 

MyBatis关联关系

一对一,<association property=””  column=””  javaType=””  parameterType=””  select=”” />

一对多,<collection property=””  column=”” javaType=””  parameterType=””  select=”” / >

继承关联:

(鉴别器)

<discriminator javaType=”” column=””>

<case value=”” resultType=””>

<result property=”” column=””/>

</case>

</discriminator>

MyBatis动态Sql

MyBatis的一个强大特性之一通常是它的动态sql能力。其用于实现sql的元素主要有:if,choose,trim,foreach。

<if test=””></if>

<choose>

<when test=””></when>

<otherwise></otherwise>

</choose>

<set>

<if test=””></if>

<set>

JavaEE MyBatis的更多相关文章

  1. JAVAEE——Mybatis第一天:入门、jdbc存在的问题、架构介绍、入门程序、Dao的开发方法、接口的动态代理方式、SqlMapConfig.xml文件说明

    1. 学习计划 第一天: 1.Mybatis的介绍 2.Mybatis的入门 a) 使用jdbc操作数据库存在的问题 b) Mybatis的架构 c) Mybatis的入门程序 3.Dao的开发方法 ...

  2. JAVAEE——Mybatis第二天:输入和输出映射、动态sql、关联查询、Mybatis整合spring、Mybatis逆向工程

    1. 学习计划 1.输入映射和输出映射 a) 输入参数映射 b) 返回值映射 2.动态sql a) If标签 b) Where标签 c) Sql片段 d) Foreach标签 3.关联查询 a) 一对 ...

  3. [JavaEE] Mybatis与Ibatis比较

    随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis 虽然从正式版发布至今也有近一年时间,官方也非常友好的提供了中文版的使用手册,不过相信很多人还在项目中使用ibat ...

  4. 33、mybatis(二)

    第十六章回顾SQL99中的连接查询 1)内连接 2)外连接 3)自连接 第十七章回顾hibernate多表开发 1)一对一 2)一对多 3)多对多 第十八章 mybatis一对一映射[学生与身份证] ...

  5. 32、mybatis

    第一章回顾jdbc开发 1)优点:简单易学,上手快,非常灵活构建SQL,效率高 2)缺点:代码繁琐,难以写出高质量的代码(例如:资源的释放,SQL注入安全性等) 开发者既要写业务逻辑,又要写对象的创建 ...

  6. mybatis入门,基本案例和xml讲解

    mybatis入门 先举一个入门案例 1)创建一个mybatis-day01这么一个javaweb工程或java工程 2)导入mybatis和mysql/oracle的jar包到/WEB-INF/li ...

  7. Mybatis(一)

     jdbc开发 1)优点:简单易学,上手快,非常灵活构建SQL,效率高 2)缺点:代码繁琐,难以写出高质量的代码(例如:资源的释放,SQL注入安全性等) 开发者既要写业务逻辑,又要写对象的创建和销毁, ...

  8. Mybatis第四篇【多表连接】

    Mybatis多表连接 我们在学习Hibernate的时候,如果表涉及到两张的话,那么我们是在映射文件中使用<set>..<many-to-one>等标签将其的映射属性关联起来 ...

  9. Mybatis第一篇【介绍、快速入门、工作流程】

    什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

随机推荐

  1. Android study --- 广播

    广播接收者 在Android系统运行时会产生很多事件,事件产生时,回想系统发送广播,只要向系统发送广播,系统就知道发生了相应的事件,从而执行相对应的代码.在系统中只要使用广播接受者,就可以接收广播 创 ...

  2. android 命名 数组 所有国家 String[] COUNTRIES

    static final String[] COUNTRIES = new String[] { "Afghanistan", "Albania", " ...

  3. Navigator

      Navigator   这是一个简单的例子,用Navigator来跳转页面,页面之间传递参数 (代码是ES6语法写的): import React from 'react'; import { V ...

  4. d3.js读书笔记-1

    d3.js入门 d3入门 D3是一个强大的数据可视化工具,它是基于Javascript库的,用于创建数据可视化图形.在生成可视化图形的过程中,需要以下几步: 把数据加载到浏览器的内存空间: 把数据绑定 ...

  5. C#获得类的方法和方法参数

    Type t = typeof(CommonController); StringBuilder str = new StringBuilder(); MethodInfo[] methors = t ...

  6. PHP 编译安装

    1, 获取源码wget -O php.tar.gz http://am1.php.net/get/php-5.6.27.tar.gz/from/this/mirrortar zxvf php.tar. ...

  7. kegg-kass注释--转载

    在注释KEGG的时候,一直用到kaas,具体kaas是个什么东东,简单的总结一下吧.     KEGG是由日本人搞的一个代谢图,收录基因和基因组的数据库,数据库可以分为 3大部分,基因数据库, 化学分 ...

  8. linux运行级别

    也许大家偶然会发现/sbin里有个init命令.你知道它是如何使用的吗? 如果你不喜欢使用图形登录方式,如何能够让用户在控制台下运行startx命令呢? 有时你要维护服务器,暂时不希望别的用户登录系统 ...

  9. Java抛出OutOfMemoryError:Java heap space堆内存溢出错误的分析方案

    抛出堆内存溢出的错误一定要记得保留现场环境(导出堆内存信息到文件),否则如果无法进行分析,并从根本上解决问题,下次很有可能还会出现. 第一步:导出堆转储文件 我们可以使用Jdk自带的jmap工具.使用 ...

  10. Predicate接口和Consumer接口

    Predicate和Consumer接口是集合操作中常用到的俩个接口: 1.Predicate public interface Predicate<T>{ boolean test(T ...