MyBatis01:框架概述、环境搭建及入门案例、自定义框架

课程介绍
  • 第一天: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注解
  • 取消注释
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值