课程介绍
  • 第一天:mybatis的入门
    • mybatis的概述
    • mybatis的环境搭建
    • mybatis入门案例
    • 自定义mybatis框架(目的:了解mybatis的执行细节)
  • 第二天:mybatis基本使用
    • mybatis的单表crud操作
    • mybatis的参数和返回值设置
    • mybatis的dao编写
    • mybatis的配置细节
      • 几个标签的使用
  • 第三天:mybatis的深入和多表
    • mybatis的连接池
    • mybatis的事务控制及设计方法
    • mybatis的多表查询
      • 一对多(多对一)
      • 多对多
  • 第四天::mybatis的缓存和注解开发
    • mybatis中的加载时机(查询时机)
    • mybatis的一级缓存和二级缓存
    • mybatis的注解开发
      • 单表crud
      • 多表查询
一、介绍
1、什么是框架
  • 框架是软件开发中的一套解决方案,不同的框架可以解决不同的问题
  • 框架的好处:
    • 封装了许多细节,使开发者使用极简的方式实现功能,大大提高开发效率。
2、三层架构和ssm框架的对应关系
  • 表示层:用于展示数据
  • 业务层:处理业务需求
  • 持久层:用于和数据库交互
3、持久层技术解决方案
  • JDBC技术的三个对象
    • Connection
    • PrepareStatement
    • ResultSet
  • Spring的JdbcTemplate
    • Spring中对JDBC的简单封装
  • Apache的DBUtils:
    • 和Spring的JdbcTemplate类似,为对JDBC的简单封装
  • 上述都不是框架
    • JDBC是规范
    • Spring的JdbcTemplate和Apache的DBUtils只是工具类
JDBC操作数据库的问题分析
  • 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
  • Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java代码。
  • 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
  • 对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便
4、mybatis概述
  • mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
  • mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来
  • 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装
  • 总结:Java语言编写的持久层框架,封装了jdbc操作的细节,使开发者只需要关注sql语句本身,无需关注注册驱动、创建连接等繁杂过程;使用ORM实现了结果集封装
  • ORM:
    • Object Relational Mapping:对象关系映射
    • 即:
      • 将数据库表和实体类及实体类的属性对应起来
      • 可以通过操作实体类就实现操作数据库表
  • 今天学习(自定义部分):
    • 实体类属性和数据库表中字段保持一致
二、入门案例
1、mybatis的入门
  • mybatis的环境搭建
    • 创建maven工程并导入坐标
    • 创建实体类和dao接口
    • 创建mybatis的主配置文件SqlMapConfig.xml
    • 创建映射配置文件IUserDao.xml
  • 环境搭建的注意事项:
    1. 创建IUserDao.xml和IUserDao.java时,名称是为了和之前的知识保持一致。在mybatis中把持久层的操作接口名称和映射文件也叫作Mapper。所以IUserDao和IUserMapper相同
    2. 在idea中创建目录时,它和包的创建不同。
      1. 包在创建时:com.itcast.dao是三级结构
      2. 目录在创建时:com.itcast.dao是一级目录,需要一级一级地创建
    3. mybatis的映射配置文件必须和dao接口的包结构相同
    4. 映射配置文件的mapper标签中namespace属性的取值必须是dao接口的全限定类名
    5. 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
    6. 当遵守了后三点(c、d、e)之后,无需再写dao的实现类
  • mybatis的入门案例
    1. 读取配置文件
    2. 创建SqlSessionFactory工厂
    3. 使用工厂生产SqlSession对象
    4. 使用SqlSession创建Dao接口的代理对象
    5. 使用代理对象执行方法
    6. 释放资源
    • 注意事项:
      • 在需要在映射配置中告知mybatis要封装到哪个实体类中
      • 配置的方式:指定实体类的全限定类名
package com.itcast.test;
import com.itcast.dao.IUserDao;
import com.itcast.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* 入门案例
*/
public class MybatisTest {
/**
* 入门案例
* @param args
*/
public static void main(String[] args) throws IOException {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
}
}
  • mybatis基于注解的入门案例
    • 把IUserDao.cml移除,在dao接口的方法上使用@Select注解,并指定SQL语句
    • 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定被注解的dao全限定类名
  • 明确:在实际开发中,都是越简便越好,所以均采用不写dao实现类的方式;不管是使用xml还是注解配置。但mybatis支持使用dao实现类
2、入门案例中的设计模式分析
  • 读取配置文件:
    • 相对路径和绝对路径不可以
    • 方式
      • 类加载器
      • ServletContext的getContextPath()
  • mybatis的SqlSessionFactory工厂由别人创建,使用了构建者模式
    • 构建者模式:找工队SqlSessionFactoryBuilder盖工厂,只需要给包工队SqlSessionFactoryBuilder钱(in)
    • 隐藏对象创建细节,使用者直接调用方法即可拿到对象
  • 生产SqlSession使用了工厂模式(出厂时就写好了)
    • 对不同的实现类,new 1()实现,new 2()实现,需要更改源码,则需要重新编译部署启动服务器
    • 使用工厂生产session对象,降低了类之间的依赖关系(解耦)
  • 创建dao接口实现类,通过seesion的getMapper方法,使用了代理模式
    • 不修改源码的基础上对已有方法增强
三、自定义Mybatis的分析
1、执行查询所有分析
  • mybatis在使用代理dao方式实现增删改查时做的事情
    • 创建代理对象
    • 在代理对象中调用selectList方法
2、创建代理对象的分析
3、编码-根据测试类中缺少的创建接口和类
  • 能看到的类
    • class Resources
    • class SqlSessionFactoryBuilder
    • interface SqlSessionFactory
    • interface SqlSession
4、解析XML的工具类介绍
5、创建两个默认实现类并分析类之间的关系
6、实现基于XML的查询所有操作
7、实现基于注解配置的查询所有
  • 修改配置文件
  • 创建select注解
  • 取消注释

MyBatis01:框架概述、环境搭建及入门案例、自定义框架的更多相关文章

  1. 04 Mybatis 框架的环境搭建及入门案例

    1.搭建 Mybatis 开发环境 mybatis的环境搭建 第一步:创建maven工程并导入坐标 第二步:创建实体类和dao的接口 第三步:创建Mybatis的主配置文件 SqlMapConifg. ...

  2. (十八)整合Nacos组件,环境搭建和入门案例详解

    整合Nacos组件,环境搭建和入门案例详解 1.Nacos基础简介 1.1 关键特性 1.2 专业术语解释 1.3 Nacos生态圈 2.SpringBoot整合Nacos 2.1 新建配置 2.2 ...

  3. Mybatis学习笔记之一(环境搭建和入门案例介绍)

    一.Mybatis概述 1.1 Mybatis介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了go ...

  4. SpringBoot2 整合Nacos组件,环境搭建和入门案例详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.Nacos基础简介 1.概念简介 Nacos 是构建以"服务"为中心的现代应用架构,如微服务范式.云原生范式等服务基础 ...

  5. Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

    http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...

  6. Android菜鸟的成长笔记(1)——Android开发环境搭建从入门到精通

    原文:Android菜鸟的成长笔记(1)--Android开发环境搭建从入门到精通 今天在博客中看到好多Android的初学者对Android的开发环境的搭建不熟悉而导致不能进行学习,所以我决定自己写 ...

  7. Mybatis环境搭建中的案例分析 及 如果自己编写DAO接口的实现类

    Mybatis环境搭建中的案例分析public static void main (String[] args) throws Exception { //读配置文件 //第一个: 使用类加载器,只能 ...

  8. JavaMaven【一、概述&环境搭建】

    课程概述 JavaMaven[一.概述&环境搭建] JavaMaven[二.目录结构&HelloMaven] JavaMaven[三.常用指令] JavaMaven[四.坐标& ...

  9. 基于Qt Designer和PyQt5的桌面软件开发--环境搭建和入门例子

      本文介绍了如何使用技术栈PyCharm+Qt Designer+PyQt5来开发桌面软件,从环境搭建.例子演示到对容易混淆概念的解释.文中用到的全部软件+代码下载链接为:https://url39 ...

  10. mybatis入门案例自定义实现

    mybatis入门案例自定义实现 一.需要实现的类和接口 public static void main(String[] args) throws Exception{ //1.读取配置文件 Inp ...

随机推荐

  1. 使用读写分离模式扩展 Grafana Loki

    转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247500127&idx=1&sn=995987d558 ...

  2. 查询参数: Query Parameters

    官方文档地址: https://fastapi.tiangolo.com/zh/tutorial/query-params/ # -*- coding: UTF-8 -*- from fastapi ...

  3. Fluentd采集示例

    Fluentd通过读取配置文件来加载各插件,日志经由各插件的处理完成输入到输出的整个路由. 本文通过一个最简单的示例来说明配置文件的结构.td-agent.conf默认位于/etc/td-agent/ ...

  4. centos离线安装nvm

    PS:因为项目需,客户现场不能联网需要不同的node版本来切换,里面已经内置好了node 8.11.2和12.1.0 两个版本,使用nvm可以切换 链接:https://pan.baidu.com/s ...

  5. PAT (Basic Level) Practice 1024 科学计数法 分数 20

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...

  6. C#-3 深入理解类

    一 类的概述(类是逻辑相关的数据和函数的封装,通常代表真实世界中或概念上的事物) 类是一种能存储数据并执行代码的数据结构,包含数据成员和函数成员. 数据成员存储类或类的实例相关的数据: 函数成员执行代 ...

  7. 分布式存储系统之Ceph基础

    Ceph基础概述 Ceph是一个对象式存储系统,所谓对象式存储是指它把每一个待管理的数据流(比如一个文件)切分成一到多个固定大小的对象数据,并以其为原子单元完成数据的存取:对象数据的底层存储服务由多个 ...

  8. .NET周报【10月第1期 2022-10-11】

    本周精选 继C#实现await/async无栈协程几年后,davidwrighton实现了.NET绿色线程(有栈协程)的原型 https://github.com/dotnet/runtimelab/ ...

  9. 2022年最新最详细IDEA关联数据库方式、在IDEA中进行数据库的可视化操作(包含图解过程)

    文章目录 1.使用IDEA关联Mysql数据库的详细操作步骤 1.1 打开侧边栏的Database 2.2. 选择要连接的数据库(Mysql) 2.3 .输入要连接的数据库.用户名.密码 2.4 .点 ...

  10. 二进制安装Dokcer

    写在前边 考虑到很多生产环境是内网,不允许外网访问的.恰好我司正是这种场景,写一篇二进制方式安装Docker的教程,用来帮助实施同事解决容器部署的第一个难关. 本文将以二进制安装方式,在CentOS7 ...