持久层框架设计实现及MyBatis源码分析

本文章主要记述了学习自定义框架所理解的框架结构以及对使用MyBatis中会用到的配置内容的链接,方便使用的时候查询。

MyBatis及MP官方网站

MyBatis官方网站
MyBatis-Plus官方网站

自定义持久层框架(仿MyBatis)

配置文件和映射文件所对应的实体类关系逻辑

在这里插入图片描述

调用持久层框架时框架内部的执行过程

在这里插入图片描述

调用过程中的build执行过程

图片

MyBatis框架使用中常用的配置内容模版

  • sqlMapConfig.xml 约束头

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN“
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    

    需要注意的是config下的标签内容有限定好的编写顺序,编写是必须遵循。

    属性<properties/>
    设置<settings/>
    类型命名<typeAliases/>
    类型处理器<typeHandlers/>
    对象工厂<objectFactory/>
    插件<plugins/>
    配置环境<environments>
    环境变量<environment>
    事务管理器<transactionManager/>
    数据源<dataSource/>
    环境变量</environment>
    配置环境</environments>
    数据库厂商标识<databaseIdProvider/>
    映射器<mappers/>
    
  • 常用配置:<typeAliases>

    <typeAlias alias="Tag" type="domain.blog.Tag"/><!--给单个类加别名-->
    <package name="domain.blog"/><!--给整个包下的类加别名-->
    
  • <mapper>

  • <settings>

  • 映射文件 XXXMapper.xml 约束头

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
  • Mapper中用到的动态SQL语法

  • Mapper中一对多,多对多的复杂映射

  • MyBatis缓存

    • 使用redis作为MyBatis的二级缓存
      <dependency>
      	<groupId>org.mybatis.caches</groupId>
      	<artifactId>mybatis-redis</artifactId>
      	<version>1.0.0-beta2</version>
      </dependency>
      
      修改映射文件的配置
      <cache type="org.mybatis.caches.redis.RedisCache" />
      
      • 添加配置 redis.properties文件
      redis.host=localhost
      redis.port=6379
      redis.connectionTimeout=5000
      redis.password=
      redis.database=0
      
  • MyBatis 自定义插件

    <plugins>
    	<plugin interceptor="com.lagou.plugin.MySqlPagingPlugin">
    	<!--配置参数-->
    	<property name="name" value="Bob"/>
    	</plugin>
    </plugins>
    
    • PageHelper插件
      <dependency>
      	<groupId>com.github.pagehelper</groupId>
      	<artifactId>pagehelper</artifactId>
      	<version>3.7.5</version>
      </dependency>
      <dependency>
      	<groupId>com.github.jsqlparser</groupId>
      	<artifactId>jsqlparser</artifactId>
      	<version>0.9.1</version>
      </dependency>
      
    • 通用Mapper插件
      <dependency>
      	<groupId>tk.mybatis</groupId>
      	<artifactId>mapper</artifactId>
      	<version>3.1.2</version>
      </dependency>
      
      在sqlMapConfig.xml文件中添加配置内容
      <plugins>
      	<!--分页插件:如果有分页插件,要排在通用mapper之前-->
      	<plugin interceptor="com.github.pagehelper.PageHelper">
      		<property name="dialect" value="mysql"/>
      	</plugin>
      	<plugin interceptor="tk.mybatis.mapper.mapperhelper.MapperInterceptor">
      		<!-- 通用Mapper接口,多个通用接口用逗号隔开 -->
      		<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
      	</plugin>
      </plugins>
      

MyBatis-Plus相关内容索引

  • MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具
  1. MP的特殊注解

如@TableField(支持ResultType 和 数据字段不对应)查询的时候配置不查询该字段等配置

  1. MP的配置项索引

加了一些全局的配置(是否启用缓存,默认的主键生成策略)

  1. 条件构造器-Wapper 的条件拼装(eq,le,ge)

  2. 逻辑删除

  3. 乐观锁-当要更新一条记录的时候,希望这条记录没有被别人更新

  4. 自动填充-如需要特殊处理的时间,主要是开发没有数据库修改权限的时候

  5. 逻辑删除(自动添加是否删除的查询条件)

  6. 代码生成器

  7. 性能分析插件

  8. Sql注入器

其他在使用过程中可能遇到的问题

1. MyBatis Generator-使用mave plugin生成代码和映射文件
2. prePareStatement 中文乱码问题的原因 及解决方案

网上Mybatis源码分析文章

深入浅出Mybatis系列(一)—Mybatis入门
深入浅出Mybatis系列(二)—配置简介(mybatis源码篇)
深入浅出Mybatis系列(三)—配置详解之properties与environments(mybatis源码篇)
深入浅出Mybatis系列(四)—配置详解之typeAliases别名(mybatis源码篇)
深入浅出Mybatis系列(五)—TypeHandler简介及配置(mybatis源码篇)
深入浅出Mybatis系列(六)—objectFactory、plugins、mappers简介与配置
深入浅出Mybatis系列(七)—mapper映射文件配置之insert、update、delete
深入浅出Mybatis系列(八)—mapper映射文件配置之select、resultMap
深入浅出Mybatis系列(九)—强大的动态SQL
深入浅出Mybatis系列(十)—SQL执行流程分析(源码篇)

猜你喜欢

转载自blog.csdn.net/u013795102/article/details/110986470