课程介绍
  • 第一天: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. 第二章:视图层 - 6:QueryDict对象

    类的原型:class QueryDict[source] 在HttpRequest对象中,GET和POST属性都是一个django.http.QueryDict的实例.也就是说你可以按本文下面提供的方 ...

  2. Xorg+LXDE迁移到Xwayland(同时支持Waydroid和Wine)记录

    系统环境: Debian bullseye Display Manager:无 桌面环境:LXDE Xorg 为什么使用Xwayland Wayland+Xwayland可以很好的支持Wayland ...

  3. Linux+Wine运行QQTIM (2022年9月)

    测试的版本Tim3.4.0 QQ9.6.7 如果你的系统没有Wine先装Wine,Wine在各大发行版的源都能找到.记住32位和64位的Wine都要装 去https://tubentubentu.pa ...

  4. 带有pwn环境的Ubuntu22.04快速安装

    pwn环境ubuntu22.04快速安装(有克隆vmk) ubuntu更新到了22.04版本,经过本人测试后非常的好(ma)用(fan),该版本和mac很相像,而且用起来也比较丝滑,只不过配置上稍微有 ...

  5. Redis高可用之主从复制原理演进分析

    Redis高可用之主从复制原理演进分析 在很久之前写过一篇 Redis 主从复制原理的简略分析,基本是一个笔记类文章. 一.什么是主从复制 1.1 什么是主从复制 主从复制,从名字可以看出,至少需要 ...

  6. .NET Core C#系列之XiaoFeng.Threading.JobScheduler作业调度

    作业调度其实就是一个定时器,定时完成某件事, 比如:每分钟执行一次,每小时执行一次,每天执行一次,第二周几执行,每月几号几点执行,间隔多少个小时执行一次等. 作业类:XiaoFeng.Threadin ...

  7. 腾讯云短信SDK-精简版

    /** * 腾讯云短信SDK-精简版 * 本模块使用-向腾讯云短信服务器发送请求 * @return json 腾讯服务器返回值-json字符串 */ private function send_sm ...

  8. 同一台电脑安装两个不同版本的mysql。简单暴力有效

    1.先找到mysql的安装地址.找到my.ini 2.修改端口号(mysql默认端口是3306)我这里修改为3307 3.打开服务.找到刚刚修改的mysql版本 4.重新启动该服务(我已经安装了mys ...

  9. 2.Python封装练习及私有属性

    面向对象三大特性 封装:根据职责将属性和方法封装到一个抽象的类中 继承:实现代码的重用,相同代码不需要重复的编写 1.单继承 2.多继承 多态:不同的对象调用相同的方法,产生不同的执行结果,增加代码的 ...

  10. node.js:《接口实现文件的上传和下载》

    使用node.js写上传文件和下载文件的接口 上传接口: 开始写接口前,我们先安装一个上传文件的插件:npm install multer 安装成功在package.json或package-lock ...