Mybatis框架简介、搭建及核心元素揭秘

你们都知道当前比较流行的框架,如Spring、SpringMVC、Hibernate、Mybatis等框架,那今天我们来说讲当前比较流行的企业框架Mybatis。 首先先来介绍一下Mybatis这个框架:Mybatis是一个开源的数据持久化层框架,它内部封装了经过JDBC访问数据库的操做,支持普通的SQL查询,存储过程和高级映射,几乎消除了全部的JDBC代码和参数设置及结果集的检索。 接下来讲说Mybatis的优缺点: 优势:与JDBC相比,减小了50%以上的代码量,最简单的持久化框架,小巧简单易学,SQL代码从程序中完全分离,可重用。提供了XML标签,支持编写动态SQL,提供映射标签,支持对象与数据库的ORM字段映射。那么什么是ORM呢?java

ORM(Object RelationMapping)即对象关系映射,是一种数据持久化技术,它在对象模型和关系型数据库之间创建对应关系。 接下来讲说Mybatis的缺点: SQL语句编写量大,对于开发人员有必定的要求,数据库移植性差sql

Mybatis的环境搭建

首先咱们的去Mybatis的官方网站(http://mybatis.org)下载最新Release版本的Mybatis 压缩包解压后能够看到一下的目录结构数据库

  • lib
  • LICENSE
  • mybatis-3.2.2.jar
  • mybatis-3.2.2.pdf
  • NOTICE

在根目录下存放着mybatis-3.2.2.jar,为Mybatis的jar文件,Mybatis-3.2.2.pdf为Mybatis官方使用文档
lib目录下存放着编译依赖包,接下来来介绍一下Mybatis编译的依赖包编程

  • asm-3.3.1.jar:操做Java字节码的类库
  • cglib-2.2.2.jar:用来动态集成Java类或实现接口
  • commons-logging-1.1.1.jar:用于通用日志处理
  • javassist-3.17.1-GA。jar:分析、编辑和建立java字节码的类库、
  • log4j-1.2.17.jar:日志系统
  • slf4j-api-1.7.5.jar:日志系统的封装,对外提供统一的API接口
  • slf4j-log4j12-1.7.5.jar:slf4j对log4j的相应驱动,完成slf4j绑定log4j

其次是mybatis-3-mybatis-3.2.2.zip(Mybatis源码包):里面是Mybatis的全部源代码
目录结构就讲到这,至于具体建立Mybatis项目在这我就很少说了api

接下来再介绍一下Mybatis的核心配置文件configuration.xml
Mybatis核心配置文件主要用于配置数据库链接和Mybatis运行时所须要的各类特性,包含了设置和影响Mybatis行为的属性
接下来讲说配置文件中的基本要素mybatis

<?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>
    	<!-- 引入database.properties -->
    	<properties resource="database.properties"/>
    	<!-- 配置mybatis的log实现LOG4J -->
    	<settings>
    		<setting name="logImpl" value="LOG4J"/>
    	</settings>
    	<!-- 配置mybatis多套运行环境 -->
    	<environments default="development">
    		<environment id="development">
    			<!-- 配置事务管理,采用JDBC的事务管理 -->
    			<transactionManager type="JDBC"></transactionManager>
    			<!-- POOLED:mybatis自带的数据源,JNDI:基于Tomcat的数据源 -->
    			<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>
    	<!-- 将mapper文件加入到配置文件中 -->
    	<mappers>
    		<mapper resource="POJO/UserMapper.xml"/>
    	</mappers>
    </configuration>

mybatis-config.xml文件的几个经常使用元素的做用以下:app

  1. configuration:配置文件的根元素节点
  2. properties:经过resource属性从外部指定properties属性文件(database.properties),该属性文件描述数据库链接的相关配置(数据库驱动、链接数据库的url、数据库用户名、数据库密码),位置也是在/resource目录下。
  3. settings:设置Mybatis运行中的一些行为,好比此处设置Mybatis的log日志实现为LOG4J,即便用log4j实现日志功能。
  4. environments:配置Mybatis的多套运行环境,将SQL映射到多个不一样的数据库上,该元素节点下能够配置多个environment子元素节点,可是必须指定其中一个默认运行环境(经过default指定)。
  5. environment:配置Mybatis的一套运行环境,需指定ID、事务管理器、数据源配置等相关信息。
  6. mappers:做用是告诉Mybatis去哪里找到SQL映射文件(该文件内容是开发者定义的映射SQL语句),整个项目能够有1个或者多个SQL映射文件
  7. mapper:mappers的子元素节点,具体指定SQL映射文件的路径,其中resource属性的值表述了SQL映射文件的路径(类资源路径)

在这里我稍微提一下注意事项:mybatis-config.xml文件的元素节点是有必定的顺序,节点位置若不按照顺序排位的话,那么XML文件会报错,至于元素的排列顺序是:
1.properties框架

2.settingside

3.typeAliases测试

4.typeHandlers

5.objectFactory

6.objectWrapperFactory

7.plugins

8.environments?

9.databaseIdProvider

10.mappers

经常使用元素

经常使用元素的顺序大体就是这样的,你们能够参考一下

有了Mybatis的核心配置文件后,接下来就要准备持久化类和SQL映射文件
那么什么是持久化类呢?持久化类是指其实例状态须要被Mybatis持久化到数据库中的类,在应用的设计中,持久化类一般对应业务中的业务实体,Mybatis通常采用POJO编程模型来实现持久化类,与POJO类配合完成持久化工做是Mybatis最多见的工做模式
既然都讲到这了,我就再讲讲什么是POJO吧!
POJO(Plain Ordinary Java Object):从字面上来讲就是普通的Java对象,POJO类能够简单地理解为符合JavaBean规范的实体类,它不须要继承和实现任何特殊的Java基类或者接口,JavaBean对象的状态保存咋属性中,访问属性必须经过对应的getter和setter方法

POJO实体类

接下里我用实例来向你们演示一下

public class User {
    private Integer id; //id 
    private String userCode; //用户编码
    private String userName; //用户名称
    private String userPassword; //用户密码
    private Integer gender;  //性别
    private Date birthday;  //出生日期
    private String phone;   //电话
    private String address; //地址
    private Integer userRole;    //用户角色
    private Integer createdBy;   //建立者
    private Date creationDate; //建立时间
    private Integer modifyBy;     //更新者
    private Date modifyDate;   //更新时间
    //省略getter,setter方法

SQL映射文件

接下来,继续进行SQL映射文件的建立,完成与POJO(实体类)的映射,该文件也是一个XML文件,命名为UserMapper.xml,示例以下

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="POJO.UserMapper">
    	<!-- 查询用户列表记录数 -->
    	<select id="count" resultType="int">
    		select count(1) as count from smbms_user
    	</select>
    </mapper>

上面的代码就是所定义的SQL语句,其中元素的含义是
1.mapper:映射文件的根元素节点,只有一个属性namespace

  • namespace:用于区分不一样的mapper,全局惟一

2.select:表示查询语句,是Mybatis最经常使用的元素之一,经常使用属性以下

  • id属性:该命名空间下惟一标识符
  • resultType属性:表示SQL语句返回值类型,此处经过SQL语句返回的是Int数据类型

测试类

SQl映射文件也弄好了,接下来就是建立测试类了,具体的实现步骤:
1.读取全局配置文件:mybatis-config.xml

String resource="mybatis-config.xml";
    //获取mybatis-config.xml文件的输入流
    InputStream is=Resource.getResourceAsStream(resource);

2.建立SQLSessionFactory对象,此对象能够完成对配置文件的读写

SQLSessionFactory factory=new SqlSessionFactoryBuilder().build(is);

3.建立SQLSession对象,此对象的做用是调用mapper文件进行数据操做,须要注意的是必须先将mapper文件引入到mybatis-config.xml中才能起效

int count=0;
    SqlSession sqlSession=null;
    sqlSession=factory.openSession();
    //Mybatis经过mapper文件的namespace和子元素的id来找到对应的SQL,从而执行查询操做
    count=sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
    logger.debug("UserMapperTest count------>"+count);

4.关闭SqlSession对象

sqlSession.close();

上面我们已经成功地将Mybatis搭建出来了,下面再来讲说Mybatis的核心要素

核心要素

首先介绍一下Mybatis的核心接口和类

  1. 每一个Mybatis的应用程序都以一个SQLSessionFactory对象的实例为核心
  2. 首先获取SqlSessionFactoryBuilder对象,能够根据XML配置文件或Configuration类的实例构建对象
  3. 而后获取SQLSessionFactory对象,该对象实例能够经过SqlSessionFactoryBuilder对象来得到
  4. 有了SQLSessionFactory对象以后,就能够进而获取SqlSession实例,SqlSession对象中彻底包含以数据库为背景的全部执行SQL操做方法,能够用该实例来直接执行已映射的SQL语句

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder负责构建SQLSessionFactory,而且提供了多个build()方法的重载,分别是

  • InputStream(字节流)
  • Reader(字符流)
  • Configuration(类)

SqlSessionFactoryBuilder的生命周期和做用域

SqlSessionFactoryBuilder的最大特色就是:用过即丢。一旦建立了SQLSessionFactory对象以后,这个类就再也不须要存在了,所以SqlSessionFactoryBuilder的最佳范围就是存在于方法体内,也就是局部变量而已。

SqlSessionFactory

SqlSessionFactory简单的理解就是建立SqlSession实例的工厂。全部的Mybatis应用都是以SQLSessionFactory实例为中心,SQLSessionFactory的实例能够经过SqlSessionFactoryBuilder对象来获取

SqlSessionFactory的生命周期和做用域

SqlSessionFactory对象一旦建立,就会在整个应用程序中始终存在。没有理由去销毁或再建立它,而且在应用程序运行中也不建议屡次建立SQLSessionFactory,怎么说呢,你能够吧SqlSessionFactoryBuilder当作建立工厂的工人,而SQLSessionFactory就是建立好的工厂,通常来讲工厂建立好了以后,工人就不须要了,而工厂会被保留下来,这就是它们的生命周期吧!

以上就是本文所介绍Mybatis的内容了,大体的核心都介绍完了,接下来你能够本身去消化一下,加油!

相关文章
相关标签/搜索