MyBatis-01-mybatis配置文件和简单使用

MyBatis-01-mybatis配置文件和简单使用回顾任务目标一、MyBatis简介1.简介2. 背景介绍3.框架特点4. 总体流程5. 功能架构6. 体系结构7. MyBatis和数据交互的方式7.1 使用传统的MyBatis API7.2 使用Mapper接口8.MyBatis配置文件8.1. 核心配置文件8.2 映射文件二、MyBatis基本应用1、搭建MyBatis技术环境1.1、环境准备1.2、下载MyBatis1.3、数据库准备1.4、数据准备2、获取SqlSession对象3、利用SqlSession实现CRUD操作3.1、新增操作3.2、删除操作3.3、修改操作3.4、查询操作4、利用MyBatis实现分页查询4.1、使用map4.2、使用注解4.3、使用序号5、返回Map类型查询结果5.1、xml文件配置5.2、sql的编写5.3、实现org.apache.ibatis.session 中ResultHandler接口6、使用Mapper映射器6.1、开发规范6.2、编程步骤6.3、程序编写7、ResultMap映射定义7.1、使用方法7.2、需求7.3、Mapper映射文件7.4、Mapper接口定义7.5、测试代码课前默写作业面试题

回顾

1. Controller中向页面传值的几种方式
2. Controller中使用Servlet API
3. RESTful风格编码
4. SpringMVC中处理静态资源
5. SpringMVC中的核心组件
6. SpringMVC中处理JSON
7. SpringMVC中异常处理
8. SpringMVC中拦截器
9. SpringMVC中的文件上传下载

任务

1. MyBatis框架介绍
2. MyBatis的基本数据交互方式
3. MyBatis基础配置
4. MyBatis环境搭建
5. MyBatis的基础CRUD操作

目标

1. 掌握MyBatis框架原理
2. 掌握MyBatis的基本数据交互方式
3. 掌握MyBatis基础配置
4. 掌握MyBatis环境搭建
5. 掌握MyBatis的基础CRUD操作

一、MyBatis简介

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(sDAO)

下载地址: MyBatis下载地址

使用版本:3.4.5

1.简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录

2. 背景介绍

MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手共设置以及结果集的检索,MyBatis使用简单的XML或者注解用于配置和原始映射,将接口和Java的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。

每个MyBatis应用程序主要利用SqlSessionFactory实例操作数据库,而SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类实例获得。

用xml文件构建SqlSessionFactory实例是非常简单的事情,推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或者f://开头的url创建实例。MyBatis有一个实用类(Resources),它有很多方法,可以方便地从类路径以及其他位置加载资源。

3.框架特点
4. 总体流程
  1. 加载配置并初始化

​ 触发条件:加载配置文件

​ 处理过程:将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

  1. 接收调用请求

​ 触发条件:调用Mybatis提供的API

​ 传入参数:为SQL的ID和传入参数对象

​ 处理过程:将请求传递给下层的请求处理层进行处理。

  1. 处理操作请求

​ 触发条件:API接口层传递请求过来

​ 传入参数:为SQL的ID和传入参数对象

​ 处理过程:

​ (A)根据SQL的ID查找对应的MappedStatement对象。

​ (B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。

​ (C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。

​ (D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。

​ (E)释放连接资源。

  1. 返回处理结果将最终的处理结果返回
5. 功能架构

Mybatis的功能架构分为三层:

6. 体系结构

MyBatis体系结构

mybatis配置文件,包括Mybatis全局配置文件和Mybatis映射文件,其中全局配置文件配置了数据源、事务等信息;映射文件配置了SQL执行相关的 信息。

7. MyBatis和数据交互的方式

​ MyBatis和数据库交互方式主要分两种:

7.1 使用传统的MyBatis API

​ 通过调用MyBatis中SqlSession对象的方法从而达到与数据库交互的方式,有一些类似DBUtils的操作!

MyBatis传统

上述使用MyBatis的方法,是创建一个和数据库打交道的SqlSession对象,然后根据Statement Id 和参数来操作数据库,这种方式固然很简单和实用,但是它不符合面向对象语言的概念和面向接口编程的编程习惯。由于面向接口的编程是面向对象的大趋势,MyBatis为了适应这一趋势,增加了第二种使用MyBatis 支持接口(Interface)调用方式。

7.2 使用Mapper接口

MyBatis将核心配置文件中的每一个节点抽象为一个 Mapper 接口,而这个接口中声明的方法和跟节点中的节点项对应,即 节点的id值为Mapper接口中的方法名称,parameterType值表示Mapper对应方法的入参类型,而resultMap 值则对应了Mapper接口表示的返回值类型或者返回结果集的元素类型。

wapper方式

根据MyBatis的配置规范配置好后,通过SqlSession.getMapper(XXXMapper.class) 方法,MyBatis会根据相应的接口声明的方法信息,通过动态代理机制生成一个Mapper实例,我们使用Mapper接口的某一个方法时,MyBatis会根据这个方法的方法名和参数类型,确定Statement Id,底层还是通过SqlSession.select("statementId",parameterObject);或者SqlSession.update("statementId",parameterObject);等等来实现对数据库的操作,

MyBatis引用Mapper接口这种调用方式,纯粹是为了满足面向接口编程的需要。(其实还有一个原因是在于,面向接口的编程,使得用户在接口上可以使用注解来配置SQL语句,这样就可以脱离XML配置文件,实现“0配置”)

8.MyBatis配置文件
8.1. 核心配置文件

​ 在classpath下,创建SqlMapConfig.xml文件,该文件为核心配置文件,可以配置当前环境信息,加载映射文件,加载properties文件,配置全局参数,定义别名等。

 
8.2 映射文件

​ 在指定的目录下创建映射文件,配置要执行的statement,即增删改查等语句。

 

二、MyBatis基本应用

1、搭建MyBatis技术环境
1.1、环境准备
1.2、下载MyBatis

mybaits的代码由github.com管理,下载地址:https://github.com/mybatis/mybatis-3/releases

Mybatis-3.4.5.jar:mybatis的核心包

Mybatis-3.4.5.pdf:mybatis的使用指南

1.3、数据库准备
 
1.4、数据准备
 

2、获取SqlSession对象

MyBatis框架中涉及到的几个API

 

3、利用SqlSession实现CRUD操作
3.1、新增操作

​ 在映射文件配置标签,用于执行插入操作。

​ 在插入操作完成之前或之后,可以配置标签获得生成的主键的值,获得插入之前还是之后的值,可以通过配置order属性来指定。

​ LAST_INSERT_ID:该函数是mysql的函数,获取自增主键的ID,它必须配合insert语句一起使用

 

​ 测试代码如下,直接执行配置的statement,可以查看结果。

 

3.2、删除操作

​ 在映射文件文件中使用标签配置删除的statement。

 

​ 测试代码如下,直接执行配置的statement,可以查看结果。

 
3.3、修改操作

​ 在映射文件使用标签配置修改的statement。

 

​ 测试代码如下,直接执行配置的statement,可以查看结果。

 
3.4、查询操作

​ 在映射文件配置<select>标签执行查询操作。

​ 注意:

 

​ 测试代码如下,直接执行配置的statement,可以查看结果。

 

4、利用MyBatis实现分页查询
4.1、使用map

注意:map的key要和sql中的占位符保持名字一致

mapper:

 

接口:

 

测试:

 
4.2、使用注解

注意:mapper文件中的参数占位符的名字一定要和接口中参数的注解保持一致

mapper:

 

接口:

 

测试:

 

4.3、使用序号

注意:mapper文件中参数占位符的位置编号一定要和接口中参数的顺序保持一致

mapper:

 

接口:

 

测试:

 
5、返回Map类型查询结果

​ Mybatis中查询结果集为Map的功能,只需要重写ResultHandler接口,,然后用SqlSession 的select方法,将xml里面的映射文件的返回值配置成 HashMap 就可以了。具体过程如下

5.1、xml文件配置
 
5.2、sql的编写
 

这里面的property属性列的值,就是你后面实现的

ResultHandler 接口返回的map集的key和value,具体看代码

5.3、实现org.apache.ibatis.session 中ResultHandler接口
 

3、调用select方法:

 

此时map里面的key,和value就是我们数据库中表中的对应的两列了.

6、使用Mapper映射器

Mapper代理的开发方式,程序员只需要编写mapper接口(相当于dao接口)即可。Mybatis会自动的为mapper接口生成动态代理实现类。

不过要实现mapper代理的开发方式,需要遵循一些开发规范。

6.1、开发规范

通过规范式的开发mapper接口,可以解决原始dao开发当中存在的问题:

6.2、编程步骤
  1. 根据需求创建po类
  2. 编写全局配置文件
  3. 根据需求编写映射文件
  4. 加载映射文件
  5. 编写mapper接口
  6. 编写测试代码
6.3、程序编写

步骤中的1、2都在入门程序中进行了编写,此处不需要重新编写。

a编写mapper映射文件

重新定义mapper映射文件UserMapper.xml(内容同Users.xml,除了namespace的值),放到新创建的目录mapper下。

 

b加载mapper映射文件

 

c编写mapper接口

内容同UserDao接口一样:

 

d编写测试代码

 

7、ResultMap映射定义

resultMap可以进行高级结果映射。

7.1、使用方法

如果查询出来的列名和属性名不一致,通过定义一个resultMap将列名和pojo属性名之间作一个映射关系。

7.2、需求

把下面SQL的输出结果集进行映射

SELECT id id,username username,sex sex_ FROM USER WHERE id = 1

7.3、Mapper映射文件
 

7.4、Mapper接口定义
 

定义Statement使用resultMap映射结果集时,Mapper接口定义方法的返回值类型为mapper映射文件中resultMap的type类型。

7.5、测试代码
 

课前默写

1. SpringMVC中异常处理
2. SpringMVC中拦截器
3. SpringMVC中的文件上传下载  

作业

1. 使用Hibernate作业第四天数据库(myschool)
2. 使用单元测试的方式并使用MyBatis框架完成学生表单表的CRUD操作

面试题

1. 掌握MyBatis框架原理
2. 掌握MyBatis的基本数据交互方式
3. 掌握MyBatis基础配置
4. 掌握MyBatis环境搭建
5. 掌握MyBatis的基础CRUD操作