搭建Mybatis注意事项和实现原理,你真的看懂了吗?


在这里插入图片描述

承接上文,这是对上文搭建时的一些注意事项,以及实现原理分析

一. 搭建Mybatis环境注意事项

  • 第一个:创建IUserDao.xml和IUserDao.java名称时是为了和我们之前的知识保持一致,在Mybatis中把持久层的操作接口名和映射文件也叫作Mapper,所以IuserDao和IUserMapper是一样的
  • 第二个:idea创建目录时,它和包是不一样的,包在创建时:com.zzd.dao是三级结构,目录在创建时:com.zzd.dao是一级结构
  • 第三个: mybatis 的映射配置文件位置必须和dao接口的包结构一样
  • 第四个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名。
  • 第五个:映射配置文件的操作配置,id属性取值必须是dao接口的方法
    当我们遵循了第三四点时,我们在开发中无需再写dao的实现类。

二.涉及到的设计模式

测试类

/**
* 
* <p>Title: MybatisTest</p>
* <p>Description: 测试 mybatis 的环境</p>
* <p>Company: http://www.itheima.com/ </p>
*/
public class MybatisTest {
    
    
public static void main(String[] args)throws Exception {
    
    
    //1.读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建 SqlSessionFactory 的构建者对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//3.使用构建者创建工厂对象 SqlSessionFactory
SqlSessionFactory factory = builder.build(in);
//4.使用 SqlSessionFactory 生产 SqlSession 对象
SqlSession session = factory.openSession();
//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();
} }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OdQEjfMb-1593776803081)(C:\Users\张振东\AppData\Roaming\Typora\typora-user-images\image-20200629111308301.png)]

2.1工厂模式(SqlSessionFactory)

在这里插入图片描述

工厂模式的原理如下图:
在这里插入图片描述

2.2 代理模式(MapperProxyFactory)

在这里插入图片描述

代理模式分为静态和动态代理。静态代理,我们通常都很熟悉。有一个写好的代理类,实现与要代理的类的一个共同的接口,目的是为了约束也为了安全。具体不再多说。
这里主要想说的是关于动态代理。我们知道静态代理若想代理多个类,实现扩展功能,那么它必须具有多个代理类分别取代理不同的实现类。这样做的后果是造成太多的代码冗余。那么我们会思考如果做,才能既满足需求,
又没有太多的冗余代码呢?——————动态代理。通过前面的课程我们已经学过了基于 JDK 的动态代理实现方式,今天我们就会使用 JDK 动态代理方式来编写 MapperProxyFactory 类。
动态代理模型图:
在这里插入图片描述

2.3构建者模式(SqlSessionFactoryBuilder)

在这里插入图片描述

具体设计模式的模型图如下:
在这里插入图片描述

扫描二维码关注公众号,回复: 12441067 查看本文章

从图中我们可以看出,创建者模式由四部分组成。
抽象创建者角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体创建者角色。具体创建者必须实现这个接口的两种方法:一是建造方法,比如图中的 buildPart1 和 buildPart2 方法;另一种是结果返回方法,即图中的 getProduct 方法。一般来说,产品所包含的零件数目与建造方法的数目相符。换言之,有多少零件,就有多少相应的建造方法。
具体创建者角色:他们在应用程序中负责创建产品的实例。这个角色要完成的任务包括:

  1. 实现抽象创建者所声明的抽象方法,给出一步一步的完成产品创建实例的操作。
  2. 在创建完成后,提供产品的实例。

导演者角色:这个类调用具体创建者角色以创建产品对象。但是导演者并没有产品类的具体知识,真正拥有产
品类的具体知识的是具体创建者角色。
产品角色:产品便是建造中的复杂对象。一般说来,一个系统中会有多于一个的产品类,而且这些产品类并不
一定有共同的接口,而完全可以使不相关联的

三.实现原理

在这里插入图片描述

四.补充

明确:在实际开发中,都是越简单越好,所以都是采用不写dao实现类的方式,不管使用XML还是注解配置,但是Mybatis是支持写dao实现类的

mybatis在使用代理dao的方式实现查时做什么事呢?只有两件事:
第一:创建代理对象
第二:在代理对象中调用selectList
在这里插入图片描述
END!!! 如果这篇文章对你有用的话不胜感激!!!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43688587/article/details/107113297