MyBatis开发框架的四大核心
MyBatis 四大核心主要包括(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。
MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper。可以说,了解了这四大核心,便可知 MyBatis 八 九。
SqlSessionFactoryBuilder
从命名上可以看出,这个是一个 Builder 模式的,用于创建 SqlSessionFactory 的类。SqlSessionFactoryBuilder 根据配置来构造 SqlSessionFactory。
其中配置方式有两种
1. 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">
2. 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 文件的方式。
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 接口映射文件:
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); }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
01.Java基础问题
目录介绍 1.0.0.1 请手写equal方法,讲讲具体的原理? 1.0.0.2 请说下String与StringBuffer区别,StringBuffer底部如何实现?String类可以被继承吗,为什么? 1.0.0.3 String a=""和String a=new String("")的的关系和异同?String的创建机制? 1.0.0.4 static关键字可以修饰什么?static使用的注意事项有哪些?static关键字的特点? 1.0.0.5 为什么 Java 中的 String 是不可变的(Immutable)?字符串设计和实现考量?String不可变的好处? 1.0.0.6 Hashcode与equal区别,什么时候需要用到hashcode?讲讲里面的原理。如何解决Hash冲突? 1.0.0.7 访问修饰符public,private,protected,以及不写(默认)时的区别? 1.0.0.8 静态变量和实例变量的区别?成员变量与局部变量的区别有那些? 1.0.0.9 如何实现对象克隆?深克隆,浅克隆分别说的是什么意思? 1.0.1.0 int和Integer的区...
- 下一篇
02.Java面向对象问题
目录介绍 2.0.0.1 重载和重写的区别?重载和重写绑定机制有何区别?父类的静态方法能否被子类重写? 2.0.0.2 封装、继承、多态分别是什么? 2.0.0.3 接口和抽象类的区别是什么?接口的意义是什么?抽象类的意义是什么?如何选择抽象类和接口? 2.0.0.4 什么是内部类,有哪些?有什么作用?静态内部类和非静态内部类的区别? 2.0.0.5 为什么内部类调用的外部变量必须是final修饰的? 2.0.0.6 Java实现多态有哪些必要条件?具体怎么实现?多态的实现原理?多态的作用? 2.0.0.7 什么是多态?多态的实现方式有哪些?多态有哪些弊端? 2.0.0.9 静态变量和成员变量的区别?代码块有哪些?构造代码块和构造方法哪一个先执行? 2.0.1.0 抽象类具有什么特点?抽象类和普通类有何区别?抽象类可以new吗?会出现什么问题? 好消息 博客笔记大汇总【15年10月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是m...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- MySQL8.0.19开启GTID主从同步CentOS8
- 设置Eclipse缩进为4个空格,增强代码规范
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2全家桶,快速入门学习开发网站教程
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长