【Java进阶营】MyBatis四大核心概念
本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。
图片描述
MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper。可以说,了解了这四大核心,便可知 MyBatis 八九。
SqlSessionFactoryBuilder
从命名上可以看出,这个是一个 Builder 模式的,用于创建 SqlSessionFactory 的类。SqlSessionFactoryBuilder 根据配置来构造 SqlSessionFactory。
其中配置方式有两种
- XML 文件方式
XML 文件方式是作为常用的一种方式:
String resource = org/mybatis/example/mybatis-config.xml;
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
mybatis-config.xml 就是我们的配置文件:
PUBLIC -//mybatis.org//DTD Config 3.0//EN
http://mybatis.org/dtd/mybatis-3-config.dtd
- Java Config
这是第二种配置方式,通过 Java 代码来配置:
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment(development, transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
Java Config 相比较 XML 文件的方式而言,会有一些限制。比如修改了配置文件需要重新编译,注解方式没有 XML 配置项多等。所以,业界大多数情况下是选择 XML 文件的方式。但到底选择哪种方式,这个要取决与自己团队的需要。比如,项目的 SQL 语句不复杂,也不需要一些高级的 SQL 特性,那么 Java Config 则会更加简洁一点;反之,则可以选择 XML 文件的方式。在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
SqlSessionFactory
SqlSessionFactory 顾名思义,是用于生产 SqlSession 的工厂。
通过如下的方式来获取 SqlSession 实例:
SqlSession session = sqlSessionFactory.openSession();
SqlSession
SqlSession 包含了执行 SQL 的所有的方法。以下是示例:
SqlSession session = sqlSessionFactory.openSession();
try {
Blog blog = session.selectOne(
org.mybatis.example.BlogMapper.selectBlog, 101);
} finally {
session.close();
}
当然,下面的方式可以做到类型安全:
SqlSession session = sqlSessionFactory.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
} finally {
session.close();
}
Mapper
Mapper 顾名思义,是用做 Java 与 SQL 之间的映射的。包括了 Java 映射为 SQL 语句,以及 SQL 返回结果映射为 Java。
比如,下面是一个常见的 Mapper 接口映射文件:
PUBLIC -//mybatis.org//DTD Mapper 3.0//EN
http://mybatis.org/dtd/mybatis-3-mapper.dtd
select * from Blog where id = #{id}
其中 “org.mybatis.example.BlogMapper” 就是我们要射射的接口,selectBlog 就是BlogMapper上的方法。而这个 selectBlog 具体就是要执行“select * from Blog where id = #{id}”这个 SQL 语句。
这样,我们就能通过
Blog blog = session.selectOne(
org.mybatis.example.BlogMapper.selectBlog, 101);
或者是
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
来获取到执行的结果。
当然,如果是采用注解的方式的话,可以省去 XML 文件:
public interface BlogMapper {
@Select(SELECT * FROM blog WHERE id = #{id})
Blog selectBlog(int id);
}
【Java进阶营】MyBatis四大核心概念相关推荐
- MyBatis四大核心概念
本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder.SqlSessionFactory.SqlSession.Mapper). MyBatis 作为互联网数据库映 ...
- 【Java进阶营】Java是什么?Java的特点有哪些?
IT程序员现在几乎是薪资高,前景好的行业象征,无论是国内还是国外,IT行业的程序员.工程师,甚至连码农都要比其他行业的从业者的收入高很多!尤其是作为IT界的"常青树"Java,起薪 ...
- [RabbitMQ]RabbitMQ概念_四大核心概念
RabbitMQ RabbitMQ 的概念 RabbitMQ 是一个消息中间件:它接受并转发消息.你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收 ...
- Mybatis四大核心对象及四大内置对象
一.MyBatis四大核心对象 MyBatis完成一次数据库操作需要经过的步骤,如下: 1.加载配置文件 2.获取SqlSessionFactoryBuiler对象 3.通过SqlSessionFac ...
- 【Java进阶营】年薪30WJava岗需要什么水平?《2022年面试总纲笔录》
前言 一份月薪30K的java开发岗位工作要求是怎样的呢?面试都会问到哪些呢? 任职要求: 1.计算机或相关专业本科(或以上)学历,具备3年以上Java服务端开发经验,熟悉常用的Java开源框架,如熟 ...
- 浅谈java中的四个核心概念【转】
2019独角兽企业重金招聘Python工程师标准>>> Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少.现 ...
- java元婴期(25)----java进阶(mybatis(4)---高级映射查询缓存)
1.需要用到的数据模型(这是后面高级查询需要用到的实例) 用户表user: 记录了购买商品的用户信息 订单表:orders 记录了用户所创建的订单(购买商品的订单) ...
- java元婴期(23)----java进阶(mybatis(2)---mapper代理mybatis核心配置文件输入输出映射)
1.mapper代理 1.mybatis开发dao的方法----引入(为啥要使用mapper代理) 1.SqlSession使用范围 1.SqlSessionFactoryBuilder 通过SqlS ...
- 【Java进阶营】Java技术专题「难点-核心-遗漏」Java线程状态流转及生命周期的技术指南(知识点串烧)
前提介绍 本章主要介绍相关线程声明周期的转换机制以及声明周期的流转关系以及相关AQS的实现和相关的基本原理,配合这相关官方文档的中英文互译的介绍. 线程状态流转及生命周期 当线程被创建并启动以后,它既 ...
最新文章
- 背水一战 Windows 10 (47) - 控件(ScrollViewer 特性): Chaining, Rail, Inertia, Snap, Zoom
- ZOJ 3776 A - Pokemon Master 签到水题
- 反制爬虫之Burp Suite RCE
- minio安装(包括docker安装)
- VTK:Math之VectorDot
- 移动端效果之Picker
- mllib协同过滤 java实现_协同过滤(ALS)算法介绍及Spark MLlib调用实例(Scala/Java/Python)...
- 布同:web版比赛实时算分系统的设计
- java 使用logback进行日志输出
- 关于Django的搭建
- deepin和UOS sunpinyin 皮肤添加
- java学习笔记14-多态
- 电脑绣花制版软件评比(上)
- java 图片转pdf_在Java语言中将图像转换为PDF?Spire.PDF for Java轻松搞定!
- 阿里云搭建MQTT服务器
- Linux中drwxr-xr-x.的意思和文件权限详解
- 卷毛机器人抢大龙_LOL:机器人史诗级加强,如果他还没退役,SKT都不敢放机器人...
- 中国十大域名圈高手 看看知道几个
- ios点击推送闪退_升级iOS14.1之后,我的6S崩溃了|ios|ios系统|手机|闪退
- 今天安利几个实用的APP给你