课程介绍
  • 第一天: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. 从Kubernetes Event中提取有效信息

  2. 图解 Kubernetes Service

    文章转载自:https://www.qikqiak.com/post/visually-explained-k8s-service/ 原文链接:https://medium.com/swlh/kube ...

  3. 【ceph】理解Ceph的三种存储接口:块设备、文件系统、对象存储

    文章转载自:https://blog.51cto.com/liangchaoxi/4049104

  4. Redis一键安装脚本

    #! /usr/bin/env bash # redis 6.0.3 源码安装 # 用法: bash -x install-redis-single.sh 6.0.3 version=$1 usage ...

  5. PAT (Advanced Level) Practice 1003 Emergency 分数 25 迪杰斯特拉算法(dijkstra)

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  6. [题解] Codeforces 1548 C The Three Little Pigs 组合数学,生成函数

    题目 首先令\(x=i\)时的答案为\(f_i\) ,令\(f_i\)对应的普通生成函数为\(F(x)\). 很容易发现\(F(x)=\sum_{i=0}^n (1+x)^{3i}\),sigma是在 ...

  7. VLQ & Base64 VLQ 编码方式的原理及代码实现

    目录 VLQ Base64 VLQ VLQ VLQ (Variable-length quantity)是一种通用的,使用任意位数的二进制来表示一个任意大的数字的一种编码方式. 编码实现: ** 对数 ...

  8. JUC(1)线程和进程、并发和并行、线程的状态、lock锁、生产者和消费者问题

    1.线程和进程 进程:一个程序,微信.qq...程序的集合.(一个进程包含多个线程,至少包含一个线程.java默认有两个线程:主线程(main).垃圾回收线程(GC) 线程:runnable.thre ...

  9. breakout靶机

    breakout:https://www.vulnhub.com/entry/empire-breakout,751/ 开机显示ip也可以不用扫描 首先使用nmap扫描 去访问网页 使用dirb扫描这 ...

  10. dns隧道攻击原理及常用工具流量分析

    DNS协议是一种请求应答协议,也是一种可用于应用层的隧道技术.虽然DNS流量的异常变化可能会被发现,但是在基于传统socket隧道已经濒临淘汰,TCP.UDP通信大量被安全设备拦截的大背景下,DNS. ...