课程介绍
  • 第一天: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.云原生之Docker容器Registry私有镜像仓库搭建实践

    转载自:https://www.bilibili.com/read/cv15219863/?from=readlist #1.下载registry仓库并设置数据存放的目录(并生成认证账号密码) doc ...

  2. 重要参考步骤---ProxySQL实现读写分离

    MySQL配置主从同步文章地址:https://www.cnblogs.com/sanduzxcvbnm/p/16295369.html ProxySQL实现读写分离与读负载均衡参考文档:https: ...

  3. Logstash集成GaussDB(高斯DB)数据到Elasticsearch

    GaussDB 简介 GaussDB 数据库分为 GaussDB T 和 GaussDB A,分别面向 OLTP 和 OLAP 的业务用户. GaussDB T 数据库是华为公司全自研的分布式数据库, ...

  4. 使用logstash拉取MySQL数据存储到es中的再次操作

    使用情况说明: 已经使用logstash拉取MySQL数据存储到es中,es中也创建了相应的索引,也存储了数据.假若把这个索引给删除了,再次进行同步操作的话要咋做,从最开始的数据进行同步,而不是新增的 ...

  5. linux开机自启服务

    前言:最近,有一个项目需要用到开机自动启动机房,所以就研究了一下 1.把node的快捷方式放在放在/usr/bin/(环境变量)下面,所有的命令默认是从这里面进行调用的 ln -s /home/too ...

  6. 代码随想录第四天| 24. 两两交换链表中的节点 、19.删除链表的倒数第N个节点 、160.链表相交、142.环形链表II

    今天链表致死量 第一题 public static class ListNode { int val; ListNode next; ListNode() {} ListNode(int val) { ...

  7. 绝杀processOn,这款UML画图神器,阿里字节都用疯了,你还不知道?

    大家好,我是陶朱公Boy,又和大家见面了. 前言 在文章开始前,想先问大家一个问题,大家平时在项目需求评审完后,是直接开始编码了呢?还是会先写详细设计文档,后再开始进行编码开发? ☆现实 这个时候可能 ...

  8. java中获取当前执行线程的名称

    Thread.currentThread().getName()

  9. AI带你省钱旅游!精准预测民宿房源价格!

    作者:韩信子@ShowMeAI 数据分析实战系列:https://www.showmeai.tech/tutorials/40 机器学习实战系列:https://www.showmeai.tech/t ...

  10. linux清理内存缓存cache

    Linux服务器有自己先进的内存管理机制,有时候会发现我们系统的buff/cache内存占用会越来越高,操作系统也有卡顿的情况,遇到这种情况,不妨试试下面的方法. 1步骤一:我们先查看物理内存占用情况 ...