MyBatis重要核心概念
一、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重要核心概念的更多相关文章
- Mybatis的核心配置
之前了解了Mybatis的基本用法,现在学习一下Mybatis框架中的核心对象以及映射文件和配置文件,来深入的了解这个框架. 1.Mybatis的核心对象 使用MyBatis框架时,主要涉及两个核心对 ...
- Spring核心概念和案例
一.Spring概念 1.Spring框架概述 轻量级的Java EE开源框架,它是由Rod Johnson为了解决企业应用程序开发的复杂性而创建, Spring框架提供了一个开发平台,用于整合其他技 ...
- 掌握Mybatis的核心配置文件
一.配置文件结构 MyBatis的核心配置文件配置了MyBatis的一些全局信息,包含数据库连接信息和MyBatis运行时所需的各种特性,以及设置和影响MyBatis行为的一些属性. 该配置文件的元素 ...
- Java开发学习(一)----初识Spring及其核心概念
一. Spring系统架构 1.1 系统架构图 Spring Framework是Spring生态圈中最基础的项目,是其他项目的根基. Spring Framework的发展也经历了很多版本的变更,每 ...
- 领域驱动设计(DDD)部分核心概念的个人理解
领域驱动设计(DDD)是一种基于模型驱动的软件设计方式.它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题.Eric Ivans为领域驱动设计提出了大量的最佳实践 ...
- Javascript本质第一篇:核心概念
很多人在使用Javascript之前都至少使用过C++.C#或Java,面向对象的编程思想已经根深蒂固,恰好Javascript在语法上借鉴了Java,虽然方便了Javascript的入门,但要深入理 ...
- [程序设计语言]-[核心概念]-02:名字、作用域和约束(Bindings)
本系列导航 本系列其他文章目录请戳这里. 1.名字.约束时间(Binding Time) 在本篇博文开始前先介绍两个约定:第一个是“对象”,除非在介绍面向对象语言时,本系列中出现的对象均是指任何可以有 ...
- spring技术核心概念纪要
一.背景 springframework 从最初的2.5版本发展至今,期间已经发生了非常多的修正及优化.许多新特性及模块的出现,使得整个框架体系显得越趋庞大,同时也带来了学习及理解上的困难. 本文阐述 ...
- ElasticSearch学习笔记-01 简介、安装、配置与核心概念
一.简介 ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进 ...
随机推荐
- 获取豆瓣读书所有热门标签并保存到mongodb数据库
目标url:https://book.douban.com/tag/?view=type&icn=index-sorttags-all 目的:抓取所有标签名称(tag_name),标签链接(t ...
- 065 01 Android 零基础入门 01 Java基础语法 08 Java方法 02 带参无返回值方法
065 01 Android 零基础入门 01 Java基础语法 08 Java方法 03 带参无返回值方法 本文知识点:带参无返回值方法 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...
- VS2013中带命令行参数的调试方法---C++
今天先记录一下(也是传说中大神喜欢装逼的comment line)c++中向主函数int main(int argc,char** argv )传递4中方法,欢迎添加新方法, 然后可以参考别人写的很好 ...
- 解决:npm install ERR! Unexpected end of JSON input
npm ERR! Unexpected end of JSON input npm i -g npm@5 npm install --registry=https://registry.npm.tao ...
- xuexi0.1
1.C语言通过编译器对内存进行了一定的封装.a +=4等效于a=a+4.C语言中数据类型的本质含义:表示一个内存格子的长度和解析方法.(int *)0:表示0是一个指针,这个指针指向一个int类型的数 ...
- 2020-2021-1 20209313 《Linux内核原理与分析》第一周作业
遇到的问题:安装ubuntu遇到问题 描述:在本机上虚拟机的安装包点开就闪退,无法安装VMware 解决方案: 清理VMware相关注册表,更改用户名为英文,查阅相关资料,重装系统. 更换linux安 ...
- 第二十六章 ansible主要模块介绍
一.Ansible模块回顾 1.command模块 [root@m01 ~]# ansible web01 -m command -a 'free -m' 2.shell模块 #支持管道符这种特殊符号 ...
- Python之dict字典详解
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,字典是另 一种可变容器模型,且可存储任意类型对象.具有极快的查找速度. 字典是一种通过名字或者关键字 ...
- C# 获取页面get过来的数据
/// <summary> /// 获取get过来的数据 /// </summary> /// <param name="page"></ ...
- soct的创建方法
服务器端:ServerSocket提供的实例 ServerSocket server = new ServerSocket(端口号) 客户端:Socket提供的实例 Socket client = ...