1、什么是 MyBatis

MyBatis 本是 apache 的一个开源项目 iBatis,后改名为 MyBatis,它 是一个优秀的持久层框架,对 jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis 通过 xml 或注解的方式将要执行的各种 statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过 Java 对象和 statement 中的 sql 进行映射生成最终执行的 sql 语句,最后由 Mybatis 框架执行 sql 并将结果映射成 Java 对象并返回。

2、MyBatis 架构详解

(1)MyBatis 配置文件:

SqlMapConfig.xml: 此文件作为 MyBatis 的全局配置文件,配置了 MyBatis 的运行环境等信息。

mapper.xml: 即 sql 映射文件,文件中配置了操作数据库的 sql 语句。此文件需要在 SqlMapConfig.xml 中加载。

(2)通过 MyBatis 环境等配置信息构造 SqlSessionFactory, 即会话工厂。

(3)由会话工厂创建 sqlSession ,即会话,操作数据库需要通过 sqlSession 进行。

(4)MyBatis 底层自定义了 Executor 执行器接口操作数据库,Executor 接口有两个实现,一个是基本执行器、一个是缓存执行器。

(5)Mapped Statement 是 MyBatis 一个底层封装对象,它包装了 MyBatis 配置信息及 sql 映射信息等。mapper.xml 文件中一个 sql 对应一个 Mapped Statement 对象,sql 的 id 即是 Mapped statement 的 id。

(6)Mapped Statement 对 sql 执行输入参数进行定义,包括 HashMap、基本类型、pojo,Executor 通过Mapped Statement 在执行 sql 前将输入的 Java 对象映射至 sql 中,输入参数映射就是 jdbc 编程中对preparedStatement 设置参数。

(7)Mapped Statement 对 sql 执行输出结果进行定义,包括 HashMap、基本类型、pojo,Executor通过Mapped Statement 在执行 sql 后将输出结果映射至 Java 对象中,输出结果映射过程相当于 jdbc 编程中对结果的解析处理过程。

3、传统的 JDBC 编程问题总结

(1)JDBC 编程步骤

1)加载数据库驱动

2)创建并获取数据库链接

3)创建 jdbcstatement 对象

4)设置 sql 语句

5)设置 sql 语句中的参数(使用preparedStatement)

6)通过 statement 执行 sql 并获取结果

7)对 sql 执行结果进行解析处理

8)释放资源(resultSet、preparedstatement、connection)

(2)JDBC 程序实例

public class Test { public static void main(String[] args) {Connection connection = null;PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {// 加载数据库驱动Class.forName("com.mysql.jdbc.Driver");// 通过驱动管理类获取数据库链接connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");// 定义sql语句 ?表示占位符String sql = "select * from user where username = ?";// 获取预处理statementpreparedStatement = connection.prepareStatement(sql);// 设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值preparedStatement.setString(1, "王五");// 向数据库发出sql执行查询,查询出结果集resultSet = preparedStatement.executeQuery();// 遍历查询结果集while (resultSet.next()) {System.out.println(resultSet.getString("id") + "  " + resultSet.getString("username"));}} catch (Exception e) {e.printStackTrace();} finally {// 释放资源if (resultSet != null) {try {resultSet.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (preparedStatement != null) {try {preparedStatement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (connection != null) {try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}
复制代码

(3)传统 JDBC 程序问题总结

1)数据库连接创建、释放频繁造成系统资源浪费,从而影响系统性能。如果使用数据库连接池可解决此问题。

2)sql 语句在代码中硬编码,造成代码不易维护,实际应用中 sql 变化的可能较大,sql 变动需要改变 Java 代码。

3)使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。

4) 对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便。

4、MyBatis 入门实例:鉴于导入 jar 包开发程序相对麻烦,因此接下来的框架和项目程序均使用 Maven 工具来进行项目管理,所以入门程序会在下一个 Maven 系列文章更新完后再重新讲解。

扫码关注微信公众号,了解更多

MyBatis 框架系列之基础初识相关推荐

  1. SpringMVC+Mybatis框架集成开发基础——项目开发流程——01

    项目开发一般流程: 1.描述项目的主要功能及各个模块的功能 2.系统采用的技术方案 3.创建E-R模型图(实体关系模型图,数据库)​​​​​​ 4.搭建数据库环境.创建数据库表及表间约束 5.搭建项目 ...

  2. 深度学习开源框架系列:基础算法之傅立叶变换:1:概要介绍

    傅立叶变换时数字信号处理的重要方法之一,是法国数学家傅立叶在1807年在法国科学学会上发表的一篇文章中所提出的,在文章中使用了正弦函数描述温度分布,而且提出了一个著名的论断:任何连续性的周期信号都可以 ...

  3. SpringBoot2.0 基础案例(10):整合Mybatis框架,集成分页助手插件

    一.Mybatis框架 1.mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获 ...

  4. 【SSM框架系列】Mybatis映射配置文件与核心配置文件深入

    传统开发方式Dao层实现 编写UserDao接口 public interface UserDao {List<User> findAll() throws IOException;} 编 ...

  5. 【SSM框架系列】Mybatis基本介绍

    原始jdbc操作 //1. 导入驱动jar包//2.注册驱动Class.forName("com.mysql.jdbc.Driver");//3.获取数据库连接对象Connecti ...

  6. MyBatis 框架基础

    ©CopyRight 思思不羡仙 Date: 2021-07-26 1. 映射配置文件 1.1 概述 1.2 配置详解 此处以插入操作为例: 编写 Mapper 映射文件,values 部分使用 #{ ...

  7. MyBatis框架学习 DAY_02:使用XML配置文件/多参数问题 / FOREACH /IF / #{}和${} / 创建SSM框架流程

    XML文件配置SQL 1. 使用XML文件配置SQL语句 2. 关于多参数的问题 2. 练习 3. 动态SQL -- foreach 4. 动态SQL -- if 5. 关于#{}和${}格式的占位符 ...

  8. MySQL数据库事务、mybatis框架、spring框架、springmvc框架、永和大王门店管理系统(框架第二部分)

    第十二章 MySQL数据库事务 一. 事务及四大特性 1.什么是事务 数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行 ...

  9. 干货必看|Spring Boot整合MyBatis框架详解

    在开发中,我们通常会对数据库的数据进行操作,Sprirng Boot对关系型数据库和非关系型数据库的访问操作都提供了非常好的整合支持.所以今天壹哥就给大家讲解一下,如何在SpringBoot环境中整合 ...

最新文章

  1. C/C++数组初始化的一些误区
  2. 创建、编辑、删除目录
  3. python数据包分析_packet_analysis: 数据包分析工具
  4. java生产问题快速定位_生产环境如何快速跟踪、分析、定位问题-Java
  5. Core java class in Spring
  6. 前端学习(2307):react之props和state
  7. cloudera manager的7180 web界面访问不了的解决办法(图文详解)
  8. Q-learning家族【强化学习】
  9. Linux 命令(83)—— groups 命令
  10. Git基础之(十五)——分支管理——分支管理策略
  11. [导入]一个都不能少:全面认识IE插件
  12. 计算机操作系统|汤小丹|第四版|习题答案(七)
  13. 【华为】职级、薪酬、绩效全认知
  14. 工厂设备状态监控可视化解决方案
  15. Ue4导入视频黑屏原因
  16. animate cc mysql,Vue 动画渲染
  17. 【Lua】【协同程序】【coroutine】知识点详解
  18. gif表情制作软件怎么制作gif动图
  19. [BJOI2019] 排兵布阵(分组背包)
  20. 2015阿里移动推荐算法大赛总结

热门文章

  1. Android基础——框架模式MVC在安卓中的实践
  2. 网站服务器高主频还是多核心,CPU核心多好还是主频高好?核心多和主频高区别介绍...
  3. 跳一跳python源码下载_Python玩跳一跳【简】
  4. Hbuilder Android证书申请
  5. springboot 利用configureMessageConverters add FastJsonHttpMessageConverter 实现返回JSON值 null to ...
  6. POJ 3436 ACM Computer Factory
  7. shell 基本使用
  8. 几种Linux段错误调试方法
  9. 给gridview动态生成radiobutton添加OnCheckedChanged监听函数
  10. declare handler 声明异常处理的语法