目录
一. 什么是Mybatis
(1)Mybatis是一款优秀的持久层框架。
(2)它支持定制化SQL、存储过程以及高级映射。
(3)Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
(4)Mybatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO(Plain Old Java Object,普通老式Java对象)为数据库中的记录。
二.使用MyBatis的开发步骤
(1)下载mybatis-3.5.1.jar
(2)将所需jar文件导入工程
(3)编写MyBatis核心配置文件
(4)创建实体类(POJO)
(5)定义DAO层Mapper接口
(6)定义SQL映射文件
(7)创建测试类
读取MyBatis核心配置文件
创建SqlSessionFactory实例
创建SqlSession实例
创建Mapper实例
执行SQL映射文件中的SQL语句
三.MyBatis与JDBC的对比
四.MyBatis框架优缺点
优点
与JDBC相比,减少了50%以上的代码量
最简单的持久化框架,小巧并简单易学
SQL代码从程序代码中彻底分离,可重用
提供XML标签,支持编写动态SQL 提供映射标签,支持对象与数据库的ORM字段映射
缺点
SQL语句编写工作量大,对开发人员有一定要求 数据库移植性差
五.MyBatis基本要素
MyBatis的核心对象
(1)SqlSessionFactoryBuilder
用过即丢,其生命周期只存在于方法体内
负责构建SqlSessionFactory,并提供多个build()方法的重载
// 读取XML文件构造方式
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
(2)SqlSessionFactory
SqlSessionFactory是每个MyBatis应用的核心
作用:创建SqlSession实例
生命周期与应用的生命周期相同
单例
存在于整个应用运行时,并且同时只存在一个对象实例
openSession( boolean autoCommit ) //true为开启事务控制,false为关闭事务控制(默认)
(3)SqlSession
包含了执行SQL所需的所有方法
非线程安全,不能共享
对应一次数据库会话,会话结束必须关闭
// 1. 创建SqlSession实例
SqlSession sqlSession = MyBatisUtil.createSqlSession();
try {
// 2. do work
} finally {
// 3. 关闭SqlSession
MyBatisUtil.closeSqlSession(sqlSession);
}
MyBatis核心配置文件
主要元素
configuration 根节点
properties 描述一些外部的、可替代的属性
配置properties元素的两种方式
1.通过指定外部属性文件(如下)
<properties resource="database.properties" />
2.直接配置property子节点
<properties>
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/……" />
<property name="user" value="root" />
<property name="password" value="123456" />
</properties>
settings 修改MyBatis的运行时行为
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置
typeAliases 为Java类型指定一个别名
类型别名 在SQL映射文件中简化冗长的Java类名
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境配置
可以通过environment子元素节点配置MyBatis的多套运行环境
必须通过default属性指定其中一个为默认运行环境
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="test">
……
</environment>
</environments>
environment 一组环境配置
transactionManager 事务管理器
语法展示:
<transactionManager type="[ JDBC | MANAGED ]" />
dataSource 数据源
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
有三种内建的数据源类型
语法展示:
<dataSource type="[UNPOOLED|POOLED|JNDI]" />
databaseIdProvider 启用多数据库厂商支持
mappers 映射器
SQL映射文件定义SQL语句映射
须在配置中引用SQL映射文件
方式一:使用类资源路径获取资源
<mappers>
<mapper resource="cn/cvs/dao/sysUser/SysUserMapper.xml" />
……
</mappers>
方式二:使用Mapper接口的包路径
<!-- 要求SQL映射文件与Mapper接口位于同一包路径下,并且名称相同 -->
<mappers>
<package name="cn.cvs.dao" />
</mappers>
SQL映射文件
MyBatis 真正的强大在于映射语句,专注于SQL,功能强大,SQL映射的配置却是相当简单
SQL映射文件的几个顶级元素(按照定义的顺序)
mapper - namespace
cache - 配置给定命名空间的缓存
cache-ref – 从其他命名空间引用缓存配置
resultMap –用来描述数据库结果集和对象的对应关系
sql – 可以重用的SQL块,也可以被其他语句引用
insert – 映射插入语句
update – 映射更新语句
delete – 映射删除语句
select – 映射查询语句
六.mapper
MyBatis是一种Java持久化框架,它提供了一种将Java对象映射到关系型数据库的解决方案。Mapper是MyBatis中的一个重要组成部分,它就像是一个DAO(数据访问对象)一样,用于定义SQL语句及其与Java方法的映射关系。
Mapper中包含了一组方法,每个方法都对应着一个SQL语句。这些方法定义了如何访问数据库,以及如何将查询结果映射到Java对象中。Mapper文件通常是XML格式,但也可以使用注解或Java代码的方式定义。
Mapper的作用主要有以下几个方面:
-
定义SQL语句:Mapper文件中定义了一组SQL语句,包括查询、插入、更新、删除等操作。
-
映射Java对象:Mapper文件中的一个SQL语句通常会返回一组结果,这些结果需要映射到Java对象中。Mapper文件定义了如何将查询结果映射到Java对象中的细节。
-
提供可重用的数据访问代码:Mapper文件中定义的SQL语句可以被多个Java方法重用,从而避免了重复编写数据访问代码的问题。
总之,MyBatis中的Mapper是一个非常重要的组件,它定义了如何访问数据库,并将查询结果映射到Java对象中。它能够大幅提高Java应用程序中的数据访问效率。
七.select
MyBatis中的select元素是用来定义SQL查询语句的XML标签,主要用于从数据库中获取数据。该元素的结构如下:
<select id="selectUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
其中:
- id:唯一标识符,需要与接口中的方法名对应。
- parameterType:参数类型,用于指定传入SQL语句的参数类型,可以是Java类或基本数据类型。
- resultType:结果类型,用于指定返回的结果类型,可以是Java类或基本数据类型。
- SQL语句:定义实际的SQL查询语句。
在使用select元素时,一般要遵循以下几个步骤:
- 定义SQL语句,可以使用占位符#{}来引用参数。
- 在mapper文件中使用select元素,传入id、parameterType和resultType等属性。
- 在Java代码中使用MyBatis的SqlSession对象执行select语句,传入参数并获取结果。
示例代码如下:
定义SQL语句:
SELECT * FROM user WHERE id = #{id}
在mapper文件中定义select元素:
<select id="selectUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
在Java代码中执行select语句:
int userId = 1;
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("selectUserById", userId);
以上代码中,根据id查询用户信息,返回一个User对象。