本章将开启mybatis系列
mybatis介绍
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身, 而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并 返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我 们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。 为了我们能够更好掌握框架运行的内部过程,并且有更好的体验,
下面我们将从自定义 Mybatis 框架开始来 学习框架。此时我们将会体验框架从无到有的过程体验,也能够很好的综合前面阶段所学的基础。
三层架构
持久层总图:
入门第一个实例:
测试类主方法:
public static void main(String[] args) throws IOException { //1.读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //读取配置文件的常用方法有两种:第一,使用类加载器;第二,使用servletContext对象的getRealPath()方法 //2.创建 SqlSessionFactory 的构建者对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();//创建工厂mybatis使用了构建者模式 //3.使用构建者创建工厂对象 SqlSessionFactory SqlSessionFactory factory = builder.build(in);//builder就是构建者 构建者模式:把对像的创建细节隐藏 //4.使用 SqlSessionFactory 生产 SqlSession 对象 SqlSession session = factory.openSession(); //生产SqlSession使用了工厂模式,工厂模式的优势:解耦(降低类间的依赖关系) //5.使用 SqlSession 创建 dao 接口的代理对象 IUserDao userDao = session.getMapper(IUserDao.class); //代理模式:不修改源码的基础上对已有的方法增强 //6.使用代理对象执行查询所有方法 List<User> users = userDao.findAll(); for (User user : users){ System.out.println(user); } //7.释放资源 session.close(); in.close(); }
mybatis mapper配置文件的要求
mybatis分析自定义mybatis框架:
1.涉及知识点:
我们将使用前面所学的基础知识来构建一个属于自己的持久层框架,将会涉及到的一些知识点:工厂模式 (Factory 工厂模式)、构造者模式(Builder 模式)、代理模式,反射,自定义注解,注解的反射,xml 解析, 数据库元数据,元数据的反射等。
2. 自定义Mybatis的分析:
mybatis在使用代理dao的方式实现增删改查时做什么事呢?
只有两件事:第一,创建代理对象; 第二,在代理对象中调用selectList
数据库配置文件:--------> 解析配置文件,此处用dom4j解析xml技术
下一节将是自定义mybatis框架代码实现,敬请请期待~