学习Mybatis的过程(一)

  • 什么是Mybatis
  • 原生jdbc开发的总结
  • Mybatis框架的流程图
  • Mybatis的学习思路

1.什么是Mybatis

Mybatis是一个持久层的框架,开源的的,是Apache下的一个顶级项目,现在这个项目托管到github里面了。点击传送门查看这个开源项目。

Mybatis让程序员把主要的精力放在sql上,自己编写sql,根据需要去灵活的编写。

官网的解释:

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

2.原生jdbc开发的总结

先看一段代码:

    Class Test{public static void main(String[] args) {//数据库连接Connection connection = null;//预编译的Statement,使用预编译的Statement提高数据库性能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", "mysql");//定义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();}}}}

单独使用jdbc开发存在的问题:主要是
数据库连接和硬编码的问题

1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响 数据库性能。
设想:使用数据库连接池管理数据库连接。

2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。

3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。

4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
设想:将查询的结果集,自动映射成java对象。

3.Mybatis框架的流程图

image

1.SqlMapConfig.xml

是mybatis的全局配置文件,名称不固定的。
配置数据源等,配置映射文件(配置sql语句)

2.SqlSessionFactory

会话工厂,根据配置文件来创建工厂,创建SqlSession

3.SqlSession

会话,只一个接口,面向用户(程序员),操作数据库

4.Excutor

执行器,是一个接口(基本执行器,缓存执行器),作用是SqlSession内部通过执行器操作数据库。

5.mapped statemnt

底层封装对象,作用对数据库存储封装,包括sql语句,输入参数,输出结果类型

6.输入参数类型

java简单类型,pojo自定义,hashmap

7.输出结果类型

java简单类型,pojo自定义,hashmap

4.Mybatis的学习重点

  • Mybatis开发Dao的两种方法

    原始的dao开发(程序需要编写dao接口和dao的实现类) (掌握)

    Mybatis的mapper接口(相当于dao接口)代理的开发(掌握)

  • Mybatis的SqlMapConfig.xml配置(全局的配置文件)

  • Mybatis的核心

    Mybatis的输入映射(掌握)

    Mybatis的输出映射(掌握)

  • Mybatis的动态sql(掌握)

  • 高级映射

  • 高级缓存

  • spring和mybatis整合

  • 逆向工程

Mybatis入门(一)相关推荐

  1. Mybatis入门之动态sql

    Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...

  2. MyBatis1:MyBatis入门

    MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...

  3. MyBatis(1):MyBatis入门

    MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence fra ...

  4. MyBatis-学习笔记02【02.Mybatis入门案例】

    Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...

  5. mybatis入门(七)之日志

    转载自    mybatis入门(七)之日志 Mybatis 的内置日志工厂提供日志功能,内置日志工厂将日志交给以下其中一种工具作代理: SLF4J Apache Commons Logging Lo ...

  6. mybatis入门(一)之基础安装

    转载自  mybatis入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可. 如果使用 Maven 来构建项目,则需将下面的 dep ...

  7. Mybatis入门程序增删改查操作

    学习目标 了解Mybatis的基本知识 熟悉Mybatis的工作原理 掌握Mybatis入门程序的编写 文章目录 1.初始Mybatis 2.Mybatis入门程序 3.Mybatis操作总结 1.初 ...

  8. Mybatis入门 使用注解

    使用XML方式地址为Mybatis入门 使用XML 1.目录结构 2.需要修改的地方 1.mybatis的配置文件 <?xml version="1.0" encoding= ...

  9. Mybatis入门 使用XML

    1.项目结构 2.详细代码 数据库: 1.创建实体类bean package com.itheima.domain;import java.io.Serializable; import java.u ...

  10. MyBatis入门(二)---一对一,一对多

    一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybati ...

最新文章

  1. python【数据结构与算法】A - How Many Tables
  2. 为什么黑客用python-为什么如此多的黑客都用python?
  3. Python+selenium 自动化-chrome驱动的下载安装
  4. oracle9i解密rewrap,ORACLE9I+DATAGUARD+RMAN
  5. VHDL程序基本构建
  6. mynt product model: D1000-IR-120标定相机和IMU外参之二
  7. c51单片机led奇数偶数亮_两STM32单片机串口通讯实验
  8. python a and b_python-尽管Numpy建议a.b,为什么a.dot(b)比a @ b更...
  9. 【PAT - 甲级1003】Emergency (25分)(Dijkstra,最短路条数,双权值最短路)
  10. 学习MySQL / MariaDB初学者 - 第1部分
  11. (转)使用异步Python 3.6和Redis编写快速应用程序
  12. 嵌入式开发笔记(二)嵌入式系统启动过程 (S5pv210)
  13. java case 语句_ECMAScript switch 语句
  14. 1.2 xss原理分析与剖析(3)
  15. StatX 获250万美元融资,随时随地通知公司业务变化
  16. 腾讯翻译君在线翻译怎么翻译整个文件_What?还能翻译年报?!
  17. 利用WPF做出的简单界面布局一
  18. Linux如何安装pcre
  19. 实验四 C程序的编译和调试(Linux基础教程 第2版)
  20. Word2vec使用手册

热门文章

  1. https://www.cnblogs.com/jingmoxukong/p/7755643.html
  2. c++ httpserver 服务器
  3. Confluence 6 CSS 指南:修改顶部背景
  4. 用msvdm.dll文件实现微软的虚拟桌面
  5. [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
  6. VS2010下测试程序性能瓶颈
  7. android 中 DOM解析xml
  8. 哪里是我们最好的避风港?
  9. JavaScript ES2021 新特性解析
  10. OSPF——路由聚合【(汇总)含配置命令】||地址汇总计算方法——详解