目录
Mybatis
MyBatis简介
MyBatis基本使用
1.导入依赖
2.配置核心配置文件
3.配置SQL语句
4.执行SQL
MyBatis核心配置文件
1.MyBatis设置
2.environments 数据连接环境
3.mappers 加载映射
基于xml文件配置SQL语句
1.增删改查语句
2.参数传递
3.#{} 和 ${} 的区别
4.查询结果映射类型
SQL执行操作
接口映射
添加日志
字段与属性不一致问题
方式一:起别名
方式二:驼峰映射
方式三:手动配置结果映射
多表查询
One To One
One To Many
Many To Many
多语句组合查询
PageHelper分页插件
1.添加依赖
2.配置插件
3.实现分页
动态SQL
Mybatis缓存机制
一级缓存
二级缓存
Mybatis注解形式
Mybatis
什么是mybatis框架?
mybatis是一个持久层框架,半自动化的orm框架
什么是orm框架?
ORM(Object-Relational-Mapping):是对象关系映射的意思,它是一种思想,是指将数据库中的每一行数据用对象的形式表现出来。可以将 ORM 简单理解为上面我们提出的,可以自动将对象与数据进行映射的技术。
| Java | 数据库 |
|---|---|
| 类 | 表 |
| 对象 | 一行数据(表中的某行数据) |
| 属性 | 列(一行数据中的某个列) |
ORM框架的分类
全自动化ORM框架:不需要自己编写SQL,直接进行对象操作即可完成SQL语句的生成,并进行数据库操作
半自动化ORM框架:需要自己编写SQL,但是查询结果的映射,框架自动完成
全自动 ORM 与半自动 ORM 对比
| 维度 | 全自动 ORM | 半自动 ORM |
|---|---|---|
| SQL 编写 | 自动生成(框架根据对象操作生成 SQL) | 手动编写(开发者编写原生 SQL 或模板) |
| 映射方式 | 自动/注解/约定(如 JPA 注解、Django 模型) | 手动配置(XML、注解、代码或映射文件) |
| 控制粒度 | 低(黑盒)——底层 SQL 不透明 | 高(白盒)——SQL 可见且可调试 |
| 开发效率 | 高 —— 减少样板代码,快速实现 CRUD | 中 —— 需额外编写 SQL 和配置 |
| 性能调优 | 困难 —— SQL 由框架生成,难以优化 | 容易 —— 可直接优化 SQL 语句 |
| 适用场景 | 快速开发、CRUD 主导、业务逻辑简单 | 复杂查询、高性能需求、兼容老旧系统、定制 SQL |
| 典型代表 | Hibernate(Java)、Django ORM(Python) | MyBatis(Java)、SqlAlchemy Core(Python) |
| 灵活性 | 低 —— 难以处理复杂 JOIN、存储过程等 | 高 —— 支持原生 SQL、数据库特有功能 |
| 事务管理 | 框架封装,通常支持声明式事务 | 通常需手动或通过 API 控制 |
MyBatis简介
MyBatis官网地址:https://mybatis.org/mybatis-3/zh/index.html
mybatis是一个半自动化的持久层框架
mybatis封装了jdbc的很多细节,开发者只需要关注sql本身,无需关注注册驱动 获取连接等操作
mybatis使用ORM思想来对结果集一个封装
优点
简单易学:基于 SQL 编程,比 Hibernate 更易上手。
减少样板代码:自动管理 JDBC 连接,无需手动开关。
数据库兼容性强:只要 JDBC 支持(即有对应 Java 驱动),MyBatis 就支持。
生态丰富:支持多种第三方插件(如分页、逆向工程)。
无缝集成 Spring:与 Spring 框架良好整合。
配置灵活:使用映射文件可实现 SQL 与代码解耦,修改 SQL 无需改 Java 代码。
MyBatis基本使用
1.导入依赖
<dependencies> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.13</version> </dependency> <!-- MySQL Connector/J --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> </dependencies>
2.配置核心配置文件
<?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> <!--环境配置 default默认使用固定环境--> <environments default="A"> <!--环境A--> <environment> <!--事务管理--> <transactionManager type="JDBC"/> <!--数据源--> <dataSource type="POOLED"> <!--配置信息--> <property value="com.mysql.jdbc.Driver"/> <property value="jdbc:mysql://localhost:3306/demo"/> <property value="root"/> <property value="123456"/> </dataSource> </environment> <!--环境B--> <environment> <!--事务管理--> <transactionManager type="JDBC"/> <!--数据源--> <dataSource type="POOLED"> <!--配置信息--> <property value="com.mysql.jdbc.Driver"/> <property value="jdbc:mysql://localhost:3306/demo2"/> <property value="root"/> <property value="123456"/> </dataSource> </environment> </environments> <!--配置映射文件加载-映射器--> <mappers> <mapper resource="testMapper.xml"/> </mappers> </configuration>
3.配置SQL语句
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="ts1"> <insert> insert into account values(null,"ZS",1000.0) </insert> </mapper>
4.执行SQL
package com.itdemo; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class App { public static void main( String[] args ) throws IOException { // 创建SqlSessionFactoryBuilder对象 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); // 加载配置文件获取流对象 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 创建SqlSessionFactory对象 需要传递流 SqlSessionFactory sessionFactory = builder.build(inputStream); // 获取SqlSession对象 SqlSession sqlSession = sessionFactory.openSession(); // 执行sql int i = sqlSession.insert("ts1.addAccount"); System.out.println(i > 0 ? "添加成功" : "添加失败"); // 提交事务 关闭SqlSession对象 sqlSession.commit(); sqlSession.close(); } }MyBatis核心配置文件
1.MyBatis设置
主要对默认设置进行修改
2.environments 数据连接环境
MyBatis 可以配置多个环境。这可以帮助你SQL映射对应多种数据库等。比如说,你想为开发、测试、 发布产品配置不用的环境。或者,你想为多个数据库产品共享相同的模式,或者也想使用相同的SQL 映射。等等。
需要记住一个重要的事情:虽然你可以配置多重环境,你也可以只选择一对一SqlSessionFactory实例。
所以如果你想连接两个数据库,你需要使用SqlSessionFactory创建两个实例,每个数据库一个。
<environments default="环境名"> <!--每一个环境--> <environment> <!--事务管理--> <transactionManager type="JDBC"/> <!--数据源--> <dataSource type="POOLED"> <!--配置信息--> <property value="com.mysql.jdbc.Driver"/> <property value="jdbc:mysql://localhost:3306/数据库名"/> <property value="用户名"/> <property value="密码"/> </dataSource> </environment> </environments>
default:中必须设置一个已经配置好的环境,创建工厂时,不指定会使用默认的环境
id:指定环境名称,不能与其他环境同名
事务管理 type:
JDBC- 这个类型直接全部使用JDBC的提交和回滚功能。它依靠使用连接的数据源来管理事务的作用域
MANAGED- 这个类型什么不做,它从不提交、回滚和关闭连接。而是让窗口来管理事务的全部生命周期。
数据源 type:
UNPOOLED:在每次请求的时候简单的打开和关闭一个连接
POOLED:MyBatis自带的简单连接池,会缓存一定数量的连接供复用
JNDI:从应用服务器的 JNDI 容器中获取已配置好的数据源
property配置信息 (部分常用)
driver- 指定JDBC 驱动器的J