MyBatis框架入门:ORM持久层实战指南
2026/6/5 16:29:40 网站建设 项目流程

目录

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

  1. mybatis是一个半自动化的持久层框架

  2. mybatis封装了jdbc的很多细节,开发者只需要关注sql本身,无需关注注册驱动 获取连接等操作

  3. 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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询