目录

  • 绪论
  • 构建
    • SQL
    • 配置文件
    • 映射文件
    • Application
  • 总结

绪论

上一篇文章中专门整理了如何构建Mybatis源码,小伙伴们可以在本地写demo跟踪或者注释修改源码等等骚操作。。。本篇就是为小伙伴们介绍一下如何本地化构建demo。
这里分享一下mybatis的中文官方文档,小编构建本地化demo时参考了官方文档。

构建

首先,创建一个package,命名为demo。小编先贴出自己本地化目录。

SQL

数据库中创建blog表,并在model包下生成对应实体类Blog;

DROP TABLE IF EXISTS `blog`;
CREATE TABLE `blog` (`id` int(11) NOT NULL,`title` varchar(255) DEFAULT NULL,`author` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

配置文件

mybatis-config.xml文件主要包含对mybatis的全局配置:数据库配置数据源连接、事务管理器和作用域等,并且深深影响 MyBatis 行为的设置和属性信息。具体结构如下:

- configuration(配置)- properties(属性) - settings(设置)- typeAliases(类型别名)- typeHandlers(类型处理器)- objectFactory(对象工厂)- plugins(插件)- environments(环境配置)- environment(环境变量)- transactionManager(事务管理器)- dataSource(数据源)- databaseIdProvider(数据库厂商标识)- mappers(映射器)

说明:1. 从上图中可以看出,configuration 元素是整个 XML 配置文件的根节点,其角色就相当于是 MyBatis 的总管, MyBatis 所有的配置信息都会存放在它里面。 MyBatis 还提供了设置这些配置信息的方法。 Configuration 可从配置文件里获取属性值,也可以通过程序直接设置。Configuration 可供配置的内容如下。
2. mybatis-config.xml 文件的元素节点是有一定顺序的,节点位置若不按顺序排位,那么 XML 文件会报错。为什么会报错呢???这里小编以为是源码执行顺序解析自上向下,所以顺序不能改变。如果想改变顺序,可以对源码进行一波操作。
以下是小编的mybatis-config.xml配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><typeAliases><typeAlias type="org.apache.ibatis.demo.model.Blog" alias="Blog"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/stream-source"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="org/apache/ibatis/demo/BlogMapper.xml"/><!--使用全限定类名--><!--<package name="org.apache.ibatis.demo.mapper"/>--><!-- <mapper class="org.apache.ibatis.demo.mapper.BlogMapper"/>--></mappers>
</configuration>

注意点:这里着重提一下引用Mapper.xml文件的四种格式,即标签中内容。(小心面试官突然问到,自己懵逼中)。
再加一个彩蛋,这四种方式,默认引用的优先级是哪一种???有知道的大佬评论区留言哦。(答案请见源码区,后面的文章小编会提到)。

  1. 相对于类路径的资源引用
<!-- 使用相对于类路径的资源引用 -->
<mappers><mapper resource="org/mybatis/builder/BlogMapper.xml"/>
</mappers>
  1. 完全限定资源定位符(包括 file:/// 形式的 URL)
<!-- 使用完全限定资源定位符(URL) -->
<mappers>java<mapper url="file:///var/mappers/BlogMapper.xml"/>
</mappers>
  1. 类名
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers><mapper class="org.mybatis.builder.BlogMapper"/>
</mappers>
  1. 包名
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers><package name="org.mybatis.builder"/>
</mappers>

映射文件

xxxMapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd。
SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):

cache – 该命名空间的缓存配置。
cache-ref – 引用其它命名空间的缓存配置。
resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
parameterMap – 老式风格的参数映射。此元素已被废弃,并可能在将来被移除!
sql – 可被其它语句引用的可重用语句块。
insert – 映射插入语句。
update – 映射更新语句。
delete – 映射删除语句。
select – 映射查询语句。

Mapper映射文件是以作为根节点,在根节点中支持9个元素,分别为 cache、cache-ref、resultMap、parameterMap、sql;insert、update、delete、select;
小编映射文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.apache.ibatis.demo.mapper.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select>
</mapper>

注意:这里小编并未定义出resultMap、SQL等标签,此文只是为了搭建demo示例,后面跟踪源码时,会依次定义。有需要的伙伴自行定义。

Application

进入主启动类:

 public static void main(String[] args) throws IOException {String resource = "org/apache/ibatis/demo/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);//解析XML核心配置、映射文件,sql语句;注册MapperSqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession session = sqlSessionFactory.openSession();//底层采用JDK动态代理创建Mapper接口对象BlogMapper mapper = session.getMapper(BlogMapper.class);//jdbc交互Blog blog = mapper.selectBlog(1);System.out.println(blog.getAuthor());//        Blog blog = session.selectOne("org.apache.ibatis.demo.mapper.BlogMapper.selectBlog", 1);
//        System.out.println(blog.toString());}

总结

准备工作已经完成,后面小编准备死磕源码啦,也会整理出相关跟踪源码的过程。希望大家能够多多支持!!!

Mybatis源码本地化构建Demo相关推荐

  1. 如何优雅地本地化构建Mybatis源码

    目录 一.环境准备 二. 源码构建 2.1 parent 2.2mybatis源码 一.环境准备 不耽误各位想提升技术的热血沸腾的心情,不想啰嗦半天鸡汤废话,直接进入正题. 要想构建源码,大家都知道第 ...

  2. MyBatis源码-解读Executor的三个实现类之BatchExecutor(批处理执行器)

    文章目录 Pre Executor 执行器 接口继承关系 BatchExecutor(重用执行器) 入门小demo 源码 BatchExecutor VS ReuseExecutor Pre MyBa ...

  3. MyBatis源码-解读Executor的三个实现类之SimpleExecutor(简单执行器)

    文章目录 Pre Executor 执行器 接口继承关系 SimpleExecutor(简单执行器) 入门小demo 实例化SimpleExecutor doQuery方法 Pre MyBatis源码 ...

  4. java你画我猜源码_为什么看到Mybatis源码就感到烦躁?

    背景 最近,听到很多吐槽:看到源码,心中就感到十分纠结.特别烦恼. 为什么纠结? 因为面试的时候,面试官很喜欢问:你看过什么框架源码?JDK源码也行. 这时候,如果回答没有看过,虽然没让你立马回去等通 ...

  5. mybatis源码解析 - mapper代理对象的生成

    1.简单示例 先看一个简单纯粹的mybatis demo(不集成spring等其他框架),代码结构很简单,如下图: 完整代码地址:kingoe/boot-study:mapper层和我们平时说的dao ...

  6. mybatis源码分析执行流程

    前言 在上一篇,我们了解了mybatis的整体执行流程,以及内部的各个组件在执行过程中的功能,下面我们来通过源码的方式对其中比较重要的几个组件在执行过程的使用进行简单的分析与说明 环境准备 基于第一篇 ...

  7. mybatis源码环境搭建

    前言 mybatis在众多的数据持久化框架中应该说是目前使用最多的,其优秀的设计和底层封装,值得很多开发人员进行学习,下面让我们先来构建一下mybatis的源码阅读环境吧 准备 1.github下载m ...

  8. 【Mybatis源码】源码分析

    [Mybatis源码]源码分析 (一)Mybatis重要组件 [1]四大核心组件 (1)SqlSessionFactoryBuilder (2)SqlSessionFactory (3)SqlSess ...

  9. Mybatis源码分析与技术原理

    前言 Mybatis框架属于ORM框架,全称(Object Relational Mapping).用于实现面向对象main车工语言里不同类型系统之间的数据之间的转换.我们在开发中Mybatis框架通 ...

最新文章

  1. 《强化学习导论》经典课程10讲,DeepMind大神David Silver主讲
  2. Configuration of OpenCV 2.4.7 in VS2012 (X86)
  3. puppet完全攻略(一)puppet应用原理及安装部署
  4. 机器人导论知识点总结
  5. php 实时监测网站是否异常_网站监控劫持问题,怎么通过网站监控解决劫持问题...
  6. FAT12中,如何定位大于一个扇区(512B)的文件内容
  7. python中文叫什么-python中文叫什么
  8. 0x3a能否作为c语言常量,C语言编程遇到了宏定义的问题,求解答,万分感谢
  9. oracle 创建表同时添加注释
  10. 校园卡管理系统c语言代码,基于C++的校园一卡通管理系统
  11. 工程量清单软件测试,输变电工程量清单投标标准化应用软件BQB2017基本操作方法...
  12. MySQL字符串拼接(函数)
  13. 直播svga礼物应该如何设计,让用户更加青睐
  14. Spark常用端口号
  15. 《缠中说禅108课》6:本 ID 如何在五粮液、包钢权证上提款的
  16. 计算机国际会议口头报告范例,国际会议报告开场白(共4篇).docx
  17. DeepMind VS Meta:实现纳什均衡理性最优解,还是多人非零和博弈算法更强大?
  18. Docker常见使用
  19. Python——定义全局变量
  20. MKMapView用法

热门文章

  1. Struts2 整合jQuery实现Ajax功能
  2. 在程序里面(服务器端)调用Winrar压缩文件的方法?另寻求一条语句转换的方法。vb.net到C#。...
  3. windowsCE镜像文件结构
  4. 黑客攻防技术宝典Web实战篇第2版—第1章Web应用程序安全与风险
  5. ShardingSphere(五) 公共表配置,实现读写改操作
  6. SpringCloud(三)Eureka之集群搭建以及将服务注册到多个EurekaServer
  7. vue 编辑弹框,编辑页面,列表数据也会跟着变
  8. kratos import 飘红问题
  9. iOS OC与JS交互(WebView监听事件)
  10. Java多线程编程系列-多线程基础