Mybatis学习day_01框架概述入门案例

什么是框架

它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题,比如mybatis解决的是持久层的问题。

使用框架的好处:框架封装了很多的细节,使开发者可以使用极简的方式实现功能,大大提高开发效率


三层架构

  • 表现层:用于展示数据
  • 业务层:处理业务需求
  • 持久层:和数据库交互
    Mybatis学习day_01框架概述入门案例_第1张图片

持久层技术解决方案

  • JDBC:Connection、PreparedStatement、ResultSet
  • Spring的JdbcTemplate:Spring中对jdbc 的简单封装
  • Apache的DBUtils:和上一个很像,也是对jdbc 的简单封装

以上这些都不是框架,JDBC是规范,Spring的JdbcTemplate和Apache的DBUtils都只是工具类


Mybatis框架概述

  • mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
  • mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成(存在占位符)最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
  • 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

ORM: Object Relational Mapping 对象关系映射 简单的说就是把数据库表和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表
实体类中的属性和数据库表的字段名称保持一致


mybatis入门

  • mybatis环境搭建
    • 创建maven工程并导入坐标
    • 创建实体类和dao接口
    • 创建Mybatis的主配置文件SqlMapConfig.xml
    • 创建映射配置文件IUserDao.xml
  • 环境搭建注意事项
    • 创建IUserDao.xml和IUserDao.java时,名称无所谓,在Mybatis中把持久层的操作接口名称和映射文件也叫做:Mapper,所以:IUserDao和IUserMapper是一样的
    • 在idea创建目录和创建包的时候,是不一样的,包在创建的时候:com.itheima.dao是三级结构,而目录是一级目录,所以要一层一层的创建
    • mybatis的映射配置文件位置必须和dao接口的包结构相同
    • 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定名
    • 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名

    当我们遵从了后三点后,我们在开发中就无须再写dao的实现类。


mybatis入门案例以及其中关键点

    public static void main(String[] args)throws Exception {
        //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();
    }
  • 步骤:读取配置文件、创建SqlSessionFactory工厂、创建SqlSession、创建Dao接口的代理对象、执行dao中的方法、释放资源
  • 注意事项:不要忘记在映射配置中告知mybatis要封装到哪个实体类配置的方式:指定实体类的全限定类名
  • 相对路径和绝对路径
    • 两者都不用,因为绝对路径会出现比如没有d盘的情况,相对路径会出现一部署之后,没有src路径的情况
    • 解决方案:1. 使用类加载器,它只能读取类路径的配置文件 2. 使用ServletContext对象的getRealPath(),它能得到当前应用部署的绝对路径
  • SqlSessionFactory
    • 工厂不是我们自己创建的,mybatis使用了构建者模式(比如真实的工厂,首先选址,然后购材料,人工,就这样还不一定能建好。所以最简单的就是找一个包工队,所以SqlSessionFactoryBuilder就是那个包工队,in就是钱 )
    • 优点:把对象的创建细节隐藏,使使用者直接调用方法即可拿到对象。屏蔽了很多繁琐的操作
  • SqlSession
    • 生产SqlSession使用了工厂模式
    • 优点:解偶(降低了类之间的依赖关系),不用每次重新编译、部署包括重新启动服务器
  • 创建Dao接口实现类
    • getMapper()使用了代理模式
    • 优势:不修改源码的基础上对已有方法增强
  • mybatis基于注解的入门案例
    • 把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并指定sql语句
    • 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名

不用实现类是为了简化开发,实现类实现的时候要指定到哪个namespace的哪个方法,在mybatis的代理实现时,也采用同样的方法

你可能感兴趣的:(Mybatis学习啦啦啦,mybatis,java,学习)