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

    技术2024-05-18  82

    搭建Mybatis环境注意事项

    一. 搭建Mybatis环境注意事项二.涉及到的设计模式2.1工厂模式(SqlSessionFactory)2.2 代理模式(MapperProxyFactory)2.3构建者模式(SqlSessionFactoryBuilder) 三.实现原理四.补充

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

    一. 搭建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(); } }

    2.1工厂模式(SqlSessionFactory)

    工厂模式的原理如下图:

    2.2 代理模式(MapperProxyFactory)

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

    2.3构建者模式(SqlSessionFactoryBuilder)

    具体设计模式的模型图如下:

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

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

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

    三.实现原理

    四.补充

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

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

    Processed: 0.018, SQL: 9