目录
一、mybatis基础概念
1、对象/关系数据库映射 (ORM)
ORM 全称 Object/Relation Mapping:表示对象-关系映射的缩写
ORM 完成面向对象的编程语言到关系数据库的映射。
把对持久化对象的保存、修改、删除等操作,转换为对数据库的操作
2、mybatis 简介
myBatis 是一款优秀的基于 ORM 的半自动轻量级持久层框架,它支持定制化 SQL、存储过程以及高级映射。myBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
二、mybatis 配置目录
1、myBatis 的映射文件概述
2、myBatis 核心配置文件层级关系
- configuration 配置
-
- properties 属性
- settings 设置
- typeAllases 类型别名
- typeHandlers 类型处理器
- objectFactory 对象工厂
- plugins 配件
- environments 环境
-
- environment 环境变量
-
- transactionManager 事务管理器
- dataSource 数据源
- dataBaseIdProvider 数据库厂商标识
- mappers 映射器
3、MyBatis常用配置解析
1)environments标签
数据库环境的配置,支持多环境配置。
其中,事务管理器 (transactionManager) 类型有两种:
- JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
- MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。
其中,数据源 (dataSource) 类型有三种:
- UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
- POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来。
- JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
2)mapper标签
该标签的作用是加载映射的,加载方式有如下几种:
<mappers>
<!-- 使用相对于类路径的资源引用 -->
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<!-- 使用完全限定资源定位符(URL) -->
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mapper class="org.mybatis.builder.AuthorMapper"/>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<package name="org.mybatis.builder"/>
</mappers>
3)Properties 标签
实际开发中,习惯将数据源的配置信息单独抽取成一个 properties 文件,该标签可以加载额外配置的 properties 文件。
4)typeAliases 标签
类型别名是为 Java 类型设置一个短的名字。原来的类型名称配置如下:
配置 typeAliases,为 com.lagou.domain.User 定义别名为 user:
上面我们是自定义的别名,mybatis 框架已经为我们设置好的一些常用的类型的别名:
别名 | 数据类型 |
---|---|
string | String |
long | Long |
int | Integer |
double | Double |
boolean | Boolean |
… … | … … |
4、mybatis 相应 API 介绍
1)SqlSessionFactoryBuilder
SqlSessionFactoryBuilder:SqlSession 工厂构建器。
常用API:SqlSessionFactory build(InputStream inputStream) 。
通过加载 mybatis 的核心文件的输入流的形式构建一个 SqlSessionFactory 对象。
String resource = "org/mybatis/builder/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
其中, Resources 工具类,这个类在 org.apache.ibatis.io 包中。Resources 类帮助你从类路径下、文件系统或一个 web URL 中加载资源文件。
2)SqlSessionFactory
SqlSessionFactory:SqlSession 工厂对象。
SqlSessionFactory 有多个个方法创建 SqlSession 实例。常用的有如下两个:
方法 | 解释 |
---|---|
openSession() | 会默认开启一个事务,但事务不会自动提交,也就意味着需要手动提交该事务,更新操作数据才会持久化到数据库中。 |
openSession(boolean autoCommit) | 参数为是否自动提交,如果设置为true,那么不需要手动提交事务。 |
3)SqlSession
SqlSession:会话对象
<T> T selectOne(String statement, Object parameter);
<E> List<E> selectList(String statement, Object parameter);
int insert(String statement, Object parameter);
int update(String statement, Object parameter);
int delete(String statement, Object parameter);
操作事务的方法主要有:
void commit();
void rollback();
5、mybatis 注解
实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用 @Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置。
注解 | 说明 |
---|---|
@Insert | 新增 @Insert(“insert sql语句”) |
@Update | 更新 @Update(“update sql语句”) |
@Delete | 删除 @Delete(“delete sql语句”) |
@Select | 查询 @Select(“select sql语句”) |
@Results | 代替的标签 该注解中可以使用单个 @Result 注解,也可以使用 @Result 集合。使用格式:@Results({@Result(), @Result()}) 或 @Results(@Result()) |
@Result | 代替了 标签和 标签 @Result 中属性介绍:column,数据库的列名;property,需要配置的属性名;one,需要使用的 @One 注解 (@Result(one=@One() ) );many,需要使用的 @Many 注解 (@Result(many=@many() ) ) |
@One (一对一) | 代替了 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。@One 注解属性介绍:select,指定用来多表查询的 sqlmapper;使用格式,@Result(column=" “, property=”", one=@One(select="")) |
@Many (多对一) | 代替了 标签,是多表查询的关键,在注解中用来指定子查询返回对象集合。使用格式:@Result(property="", column="", many=@Many(select="")) |
文章内容输出来源:拉勾教育Java高薪训练营