Mybatis入门
简介
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
安装
要使用Mybatis只需要到官网下载Mybatis的Jar包,并复制到ClassPath下即可。如果您是使用Maven来构建Java项目,那只需要在其pom.xml文件中加入Mybatis的依赖关系即可。
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency>
连接数据库
在使用Mybatis之前,我们要先确保其可以正确连接到我们要使用的目标数据库。Mybatis连接数据库也是非常的简单,和JDBC类似,只需要在XML文件中指定要使用的数据库驱动、连接字符串、数据库用户名和密码信息即可。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> <environment id="product"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> </configuration>
Mybatis允许我们在同一个配置文件中指定多个数据库连接信息,实际工作中也是需要这样的。开发环境,我们需要一个用于开发的数据库;测试环境,我们需要一个用于系统测试的数据库;生产环境,我们需要一个保存真实数据的生产数据库。在Mybatis中,使用enviroments标签即可定义多个环境中需要使用的数据库连接信息,并使用default关键字指示出当前使用的环境信息。
数据库连接配置写好之后,我们就可以开始编写操作数据库的Java代码了。大家可以回想一下,使用JDBC是如何操作数据库的呢?熟悉Java开发模式的同学一定知道,我们需要在DAO层编写以下功能代码:
- 加载数据库驱动类 Class.forName(“com.mysql.jdbc.driver”);
- 获得数据库连接 DeriverManager.getConnection(url, username, password)
- 执行SQL语句
- 获取查询结果,进行封装
- 返回封装后的结果
其中前两步,通常我们会提取出来,封装在一个专门数据与数据库连接的类DBUtils中。为什么这样做呢?因为DAO层要做的只是后面三步的工作,至于如何连接数据库、连接哪个数据库,DAO层是不关心的。她需要的是一个能够与数据库交互,交执行SQL语句的对象。在使用JDBC时,就是Connection对象。那么在Mybatis中有没有这样一个对象呢?又是如何向DAO层提供这个对象的呢?
在正式开始编写Java代码之前,我们先了解一下Mybatis的相关基础知识。
答案是肯定的,在Mybatis中向DAO层提供的这个能够与数据库交互并执行SQL语句的对象叫做SqlSession。这个是Mybatis最核心的一个对象。SqlSession完全包含了面向数据库执行SQL命令所需的全部方法。
那么如何获得这个对象呢?分为三步。
- 通过配置文件获取数据库连接相关信息
- 通过配置信息创建SqlSessionFactory对象。一眼就可以看出这是一个工厂类,负责创建SqlSession对象实例
- 使用SqlSessionFactory创建SqlSession对象,打开一个数据库会话。
下面的代码展示了数据库连接实践。
Reader reader; SqlSessionFactory sqlSessionFactory; try { //读取配置文件 reader = Resources.getResourceAsReader("mybatis.xml"); } catch (IOException e) { e.printStackTrace(); } //创建SqlSessionFactory对象实例 sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); //获得数据库会话对象实例 SqlSession session = sqlSessionFactory.openSession(); try { //数据库操作 …… } finally { //关闭数据库会话 session.close(); }
范围和生命周期
这里顺带提一下上述代码中使用到的几个主要对象的范围和生命周期。
SqlSessionFactoryBuilder
这个类可以被实例化、使用和丢弃,一旦创建了 SqlSessionFactory,就不再需要它了。因此 SqlSessionFactoryBuilder 实例的最佳范围是方法范围(也就是局部方法变量)。你可以重用 SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但是最好还是不要让其一直存在以保证所有的 XML 解析资源开放给更重要的事情。
SqlSessionFactory
SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在,没有任何理由对它进行清除或重建。使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次,多次重建 SqlSessionFactory 被视为一种代码“坏味道(bad smell)”。因此 SqlSessionFactory 的最佳范围是应用范围。有很多方法可以做到,最简单的就是使用单例模式或者静态单例模式。
SqlSession
每个线程都应该有它自己的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的范围是请求或方法范围。绝对不能将 SqlSession 实例的引用放在一个类的静态域,甚至一个类的实例变量也不行。也绝不能将 SqlSession 实例的引用放在任何类型的管理范围中,比如 Serlvet 架构中的 HttpSession。如果你现在正在使用一种 Web 框架,要考虑 SqlSession 放在一个和 HTTP 请求对象相似的范围中。换句话说,每次收到的 HTTP 请求,就可以打开一个 SqlSession,返回一个响应,就关闭它。这个关闭操作是很重要的,你应该把这个关闭操作放到 finally 块中以确保每次都能执行关闭。
通过本篇的学习,我们对Mybatis有了一个大体的了解。后续我还会和大家一起分享我的Mybatis学习路程。静请期待。
相关推荐
《Spring+MyBatis+MySQL实战入门》系列教程旨在帮助初学者快速掌握这三大核心技术在实际项目中的应用。本文将重点讲解MyBatis操作入门的相关知识,通过源码解析,帮助你深入理解MyBatis的工作原理及使用方法。 1. ...
MyBatis是一款流行的持久层框架,支持SQL查询、存储过程以及高级映射,...通过本系列教程,你可以从基础的环境搭建,逐步学习到MyBatis的核心概念、高级特性以及与其他流行框架的集成方法,从而达到精通MyBatis的目标。
【标题】"MyBatis简单入门实例"是一个关于学习MyBatis基础操作的教程,适合初学者了解并实践这个流行的Java持久层框架。MyBatis是一个优秀的轻量级ORM(对象关系映射)框架,它简化了数据库操作,将SQL语句与Java...
MyBatis通过一系列Java API来操作数据库,包括SqlSession、SqlSessionFactoryBuilder、SqlSessionFactory、SelectBuilder、SqlBuilder等。这些API是操作数据库的关键。 7. 应用目录结构 为了使MyBatis能够正确工作...
MyBatis是一款优秀的ORM框架,本课程为走进Mybatis世界系列课程第二讲第二章:MyBatis与Spring集成。本章主要内容:MyBatis与Spring如何集成,声明式事务管理,MapperScannerConfigurer本次课程,在YY上进行,YY频道...
在这个名为"mybatis从入门到精通的学习代码.rar"的压缩包中,你将找到一系列与MyBatis相关的学习资料,包括代码示例,这些示例将帮助你逐步掌握MyBatis的核心概念和使用方法。通过配合提供的博客链接...
它提供了一系列精心设计的组件,如表格、表单、对话框、树形结构等,这些组件能够帮助开发者快速构建用户界面,提升用户体验。在本项目中,DWZ被用来创建美观且交互性强的前端页面,实现数据的展示、编辑以及操作...
读书笔记:学习《Mybatis从入门到精通》的系列感悟总结
mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现...
### MyBatis 入门到实践 #### 1. MyBatis 概览 ##### 1.1 MyBatis 历史与演变 MyBatis 的前身是 Apache 的一个开源项目 iBatis,在 2010 年 6 月时该项目由 Apache Software Foundation 迁移到了 Google Code,并...
MyBatis是一个流行的Java持久层框架,源自Apache的iBatis项目,后来迁移至Google Code,再后来在2013年转移到了GitHub。MyBatis致力于解决Java应用程序中的数据持久化问题,它通过将实体类与SQL语句之间的映射关系...
### MyBatis 入门教程(二):高级映射、查询缓存及Spring整合 #### MyBatis 概述 MyBatis 是一个优秀的持久层框架,它支持自定义 SQL 查询语句,并能很好地与 Java 的 POJOs 对象(Plain Old Java Objects)互相...
### MyBatis 入门与深入理解 #### 一、MyBatis简介 MyBatis,原名为iBatis,是Apache的一个开源项目。它的名字虽然发生了变化,但其核心功能却得到了进一步增强和发展。MyBatis是一个持久层框架,主要用于处理与...
- **SqlSession**: 是执行数据库操作的主要接口,提供了一系列方法来执行 SQL 命令。 #### 快速入门 1. **环境搭建** - 创建 Maven 项目。 - 添加 MySQL 驱动依赖。 ```xml <groupId>mysql <artifactId>...
在这个名为 "mybatis.rar" 的压缩包中,我们可以预见到包含了一系列关于 MyBatis 的学习资源,如项目文档、源代码以及如何将 MyBatis 整合到 Spring 框架中的教程。下面我们将详细探讨这些知识点: 1. **MyBatis ...
本教程将通过一系列的代码示例,带你从入门到精通地掌握MyBatis Plus的使用。 首先,让我们了解一下MyBatis Plus的核心特性: 1. **无侵入**:MyBatis Plus在MyBatis的基础上只做增强不做改变,引入MyBatis Plus...
压缩包中的 "MybatisDoc" 文件可能是整个文档的根目录,包含了一系列 HTML 文件,这些文件可能按照章节和主题组织,如介绍、安装指南、快速入门、配置、映射器、SQL 动态语句、缓存、事务管理、插件等。每个 HTML ...