springboot mybatis 打印sql_mybatis系列之初识mybatis

说在前面的话

今天开始,准备把 mybatis 的知识梳理一遍,为什么梳理 mybatis 呢?因为 mybatis 的源码最简单啊(说什么大实话)。no~no~no~,是因为现在的这些框架都和 springboot 整合在一起了,用起来是方便了,但是其中的原理就越不了解了。所以整理几篇 mybatis 的文章分享给大家,配合代码案例,希望大家有所收获。另外因为这是第一篇,所以代码量相对来说比较多,希望大家耐下看下去,毕竟也是下了一番功夫的,绝对是原创,如有雷同,肯定是他们抄袭的。

好了,话不多说,我们直接进入正题。

1 mybatis为我们做了哪些事情

  1. 使用连接池对连接进行管理 :连接池,这个不多说。
  2. SQL 和代码分离,集中管理 :主要是 mapper.xml 文件,专门用来配置sql语句。
  3. 重复 SQL 的提取 :比如标签。
  4. 参数映射和动态 SQL :比如 等。
  5. 结果集映射 :查询结果后会映射成对象。
  6. 缓存管理 :一级缓存和二级缓存。
  7. 插件机制:分页插件等。

2 准备工作(小demo,配合讲解)

先整体说下需要有哪些东西:

  • pom.xml 引入 mybatis 引入 jar 包。
  • mybatis-config.xml 配置文件。
  • mapper 接口和 mapper.xml 文件。
  • 测试类。

2.1 pom.xml 文件 ,因为不和 spring/springBoot 集成,所以引入的 jar 包比较少。

org.mybatis      mybatis      3.5.1mysql      mysql-connector-java      8.0.16

2.2 mybatis-config.xml文件(重点) ,db.properties 为数据库的配置信息,不单独贴出来。

2.3 mapper接口和 mapper.xml,Fruit为水果 pojo 类,只有id和name两个属性,不单独贴出来

public interface FruitMapper {    Fruit findById(Long id);}
id,name         select  from fruit where id =#{id}    

2.4 测试方法(重点)

public class MybatisTest {    @Test    public void testSelect() throws IOException {        String resource = "mybatis-config.xml";        InputStream inputStream = Resources.getResourceAsStream(resource);        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);        SqlSession session = sqlSessionFactory.openSession();        try {            FruitMapper mapper = session.getMapper(FruitMapper.class);            Fruit fruit = mapper.findById(1L);            System.out.println(fruit);        } finally {            session.close();        }    }}

2.5 执行测试方法的结果

Created connection 2014838114.Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7817fd62]==>  Preparing: select id,name from fruit where id =? ==> Parameters: 1(Long)<==    Columns: id, name<==        Row: 1, 苹果<==      Total: 1Fruit(id=1, name=苹果)

简单的 demo 就做好了,大家有兴趣的话可以跟着做一下。下面才是本次的重点类容。

3 配置文件标签作用

这里只说下mybatis-config.xml里面现在用到的标签,后面用到了其他标签时会说明。然后在最后一篇 mybatias 文章时,会把所有的标签都整理出来,并且重要的会有例子说明,还会有自定义标签里面的类容的例子。

  • configuration:这个是配置的最顶层标签
  • properties:用来配置数据库连接的信息
  • settings:全局配置标签,这里只配置了打印sql日志
  • typeAliases :类型别名,用来设置一些别名来代替 Java 的长类型声明(如 java.lang.int 变为 int),减少配置编码的冗余
  • mappers:映射器配置,配置mapper.xml文件
  • environments:环境配置,主要用来配置数据源和事物

4 核心对象

最后讲下测试类,里面的代码就是单独使用 MyBatis 的全部流程。后面讲源码也是基于这个来讲。首先说下里面的4个核心对象:

  • SqlSessionFactory 全局唯一的,一旦被创建之后,在应用的运行期间一直存在。
  • SqlSessionFactoryBuilder 这个就是用来构建 SqlSessionFactory ,一旦构建好后面就用不到。实际上就是解析 mapper.xml 和 mybatis-config.xml 里面的标签的属性值设置到 Configuration这个类对应的属性上。
  • SqlSession :是一次会话,它不是线程安全的,不能在线程间共享。所以我们在请求开始的时候创建一个 SqlSession 对象,在请求结束或者说方法执行完毕的时候要及时关闭它。
  • Mapper :是从 SqlSession 中获取的(实际上是一个代理对象)。 它的作用是发送 SQL 来操作数据库。

然后用个类比的方法,模拟一个场景来帮助大家理解一下这几个核心对象的作用。场景是这样的:比如说一个建筑公司(SqlSessionFactory)需要修一个房子,首先是不是有设计图纸(mapper.xml)和修房子需要用到的材料清单( mybatis-config.xml),然后采购部门(SqlSessionFactoryBuilder)根据材料清单去采购材料放到仓库(Configuration)中。然后是工人师傅(SqlSession)根据设计图纸(mapper.xml)和仓库里面的材料( mybatis-config.xml)去造房子(数据库)。

这样是不是要好理解一点。啊,都被自己的聪明给折服了(自恋中)。

5 主要的执行流程

6091cf362fa8dd040e6d7fe346862827.png

主要流程就这些,里面的细节后面会讲。这幅图的流程就不做讲解了,可以看下上面的类比例子。

6 总结

回顾一下这节的类容:

  1. 一个简单的demo。
  2. mybatis-config.xml里面一级标签的作用说明。
  3. 几个核心对象的作用。
  4. 一个图片说明了一下执行的流程。

这期 mybatis 的类容到这里就结束了,觉得讲的还可以的,记得点个赞哦!我们下期再见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值