一、SqlSessionFactoryBuilder

  从命名上可以看出,这个是一个 Builder 模式的,用于创建 SqlSessionFactory 的类。SqlSessionFactoryBuilder 根据配置来构造 SqlSessionFactory。其中配置方式有两种:

1.1、XML 文件方式

  XML 文件方式是作为常用的一种方式:

1 String resource = "org/mybatis/example/mybatis-config.xml";
2
3 InputStream inputStream = Resources.getResourceAsStream(resource);
4
5 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

mybatis-config.xml 就是我们的配置文件:

 1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE configuration
3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
5 <configuration>
6 <environments default="development">
7 <environment id="development">
8 <transactionManager type="JDBC"/>
9 <dataSource type="POOLED">
10 <property name="driver" value="${driver}"/>
11 <property name="url" value="${url}"/>
12 <property name="username" value="${username}"/>
13 <property name="password" value="${password}"/>
14 </dataSource>
15 </environment>
16 </environments>
17 <mappers>
18 <mapper resource="org/mybatis/example/BlogMapper.xml"/>
19 </mappers>
20 </configuration>

1.2、Java Config

  这是第二种配置方式,通过 Java 代码来配置:

 1 DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
2
3 TransactionFactory transactionFactory = new JdbcTransactionFactory();
4
5 Environment environment = new Environment("development", transactionFactory, dataSource);
6
7 Configuration configuration = new Configuration(environment);
8 configuration.addMapper(BlogMapper.class);
9
10 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

  Java Config 相比较 XML 文件的方式而言,会有一些限制。比如修改了配置文件需要重新编译,注解方式没有 XML 配置项多等。所以,业界大多数情况下是选择 XML 文件的方式。但到底选择哪种方式,这个要取决与自己团队的需要。比如,项目的 SQL 语句不复杂,也不需要一些高级的 SQL 特性,那么 Java Config 则会更加简洁一点;反之,则可以选择 XML 文件的方式。

二、SqlSessionFactory

  SqlSessionFactory 顾名思义,是用于生产 SqlSession 的工厂。  通过如下的方式来获取 SqlSession 实例:

1 SqlSession session = sqlSessionFactory.openSession();

三、SqlSession

  SqlSession 包含了执行 SQL 的所有的方法。以下是示例:

1 SqlSession session = sqlSessionFactory.openSession();
2 try {
3 Blog blog = session.selectOne(
4 "org.mybatis.example.BlogMapper.selectBlog", 101);
5 } finally {
6 session.close();
7 }

  当然,下面的方式可以做到类型安全:

1 SqlSession session = sqlSessionFactory.openSession();
2 try {
3 BlogMapper mapper = session.getMapper(BlogMapper.class);
4 Blog blog = mapper.selectBlog(101);
5 } finally {
6 session.close();
7 }

四、Mapper

  Mapper 顾名思义,是用做 Java 与 SQL 之间的映射的。包括了 Java 映射为 SQL 语句,以及 SQL 返回结果映射为 Java。比如,下面是一个常见的 Mapper 接口映射文件:

1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper
3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5 <mapper namespace="org.mybatis.example.BlogMapper">
6 <select id="selectBlog" resultType="Blog">
7 select * from Blog where id = #{id}
8 </select>
9 </mapper>

  其中 “org.mybatis.example.BlogMapper” 就是我们要射射的接口,selectBlog 就是BlogMapper上的方法。而这个 selectBlog 具体就是要执行“select * from Blog where id = #{id}”这个 SQL 语句。  这样,我们就能通过

1 Blog blog = session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);

  或者是

1 BlogMapper mapper = session.getMapper(BlogMapper.class);
2 Blog blog = mapper.selectBlog(101);

  来获取到执行的结果。当然,如果是采用注解的方式的话,可以省去 XML 文件:

1 public interface BlogMapper {
2 @Select("SELECT * FROM blog WHERE id = #{id}")
3 Blog selectBlog(int id);
4 }

  但是,我们推荐使用sql映射文件的方式来写sql语句,而不要把sql语句写在注解中。

MyBatis重要核心概念的更多相关文章

  1. Mybatis的核心配置

    之前了解了Mybatis的基本用法,现在学习一下Mybatis框架中的核心对象以及映射文件和配置文件,来深入的了解这个框架. 1.Mybatis的核心对象 使用MyBatis框架时,主要涉及两个核心对 ...

  2. Spring核心概念和案例

    一.Spring概念 1.Spring框架概述 轻量级的Java EE开源框架,它是由Rod Johnson为了解决企业应用程序开发的复杂性而创建, Spring框架提供了一个开发平台,用于整合其他技 ...

  3. 掌握Mybatis的核心配置文件

    一.配置文件结构 MyBatis的核心配置文件配置了MyBatis的一些全局信息,包含数据库连接信息和MyBatis运行时所需的各种特性,以及设置和影响MyBatis行为的一些属性. 该配置文件的元素 ...

  4. Java开发学习(一)----初识Spring及其核心概念

    一. Spring系统架构 1.1 系统架构图 Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基. Spring Framework的发展也经历了很多版本的变更,每 ...

  5. 领域驱动设计(DDD)部分核心概念的个人理解

    领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...

  6. Javascript本质第一篇:核心概念

    很多人在使用Javascript之前都至少使用过C++.C#或Java,面向对象的编程思想已经根深蒂固,恰好Javascript在语法上借鉴了Java,虽然方便了Javascript的入门,但要深入理 ...

  7. [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)

    本系列导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有 ...

  8. spring技术核心概念纪要

    一.背景 springframework 从最初的2.5版本发展至今,期间已经发生了非常多的修正及优化.许多新特性及模块的出现,使得整个框架体系显得越趋庞大,同时也带来了学习及理解上的困难. 本文阐述 ...

  9. ElasticSearch学习笔记-01 简介、安装、配置与核心概念

    一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...

随机推荐

  1. C语言中time_t数据类型详细介绍

    包含文件:<time.h> #ifndef __TIME_T #define __TIME_T     /* 避免重复定义 time_t */ typedef long     time_ ...

  2. MinGW与Cygwin的关系与差别

    PART1 共同点 Cygwin / GCC和MinGW都是gcc在WINDOWS下的实现. gcc:它是一款原来只能在Linux系统上使用的开源C语言编译器,后来移植到了Windows操作系统上(以 ...

  3. 【状态压缩DP】SCOI2009 围豆豆

    题目大意 洛谷链接 在一个\(N×M\)的矩阵方格内分布着\(D\)颗豆子,每颗豆有不同的分值\(V_i\).游戏者可以选择任意一个方格作为起始格,每次移动可以随意的走到相邻的四个格子,直到最终又回到 ...

  4. centos8平台使用pidstat监控cpu/内存/io

    一,安装pidstat: 1,安装 [root@localhost yum.repos.d]# yum install sysstat 2,查看版本: [root@localhost ~]# pids ...

  5. python 爬虫 循环分页

    import osfrom time import sleepimport fakerimport requestsfrom lxml import etreefake = faker.Faker() ...

  6. property和setter装饰器

    # property装饰器 # 作用: 将一个get方法转换为对象的属性. 就是 调用方法改为调用对象 # 使用条件: 必须和属性名一样 # setter方法的装饰器: # 作用:将一个set方法转换 ...

  7. Spring Boot 整合多点套路,少走点弯路~

    持续原创输出,点击上方蓝字关注我 个人原创博客+1,点击前往,查看更多 目录 前言 Spring Boot 版本 找到自动配置类 注意@Conditionalxxx注解 注意EnableConfigu ...

  8. Nginx常见错误解决办法

    报错: nginx: [error] CreateFile() "C:\mytools\nginx-1.8.1/logs/nginx.pid" failed (2: The sys ...

  9. sync-player:使用websocket实现异地同步播放视频

    本文作者:星空无限 原文链接:https://liyangzone.com/2020/09/20/前端/sync-player/ GoEasy已获作者授权转载,GoEasy转载时有改动,感谢作者的分享 ...

  10. Vue踩坑日记-Element this.$message 找不到模块

    在使用Vue.js的 Element框架时,无法使用Message组件 浏览器提示:找不到组件 原始写法: this.$message({ message: '恭喜你,这是一条成功消息', type: ...