news 2026/7/7 23:05:38

MyBatis框架入门:ORM持久层实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MyBatis框架入门:ORM持久层实战指南

目录

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 23:59:04

基于VUE的实验室使用管理系统[VUE]-计算机毕业设计源码+LW文档

摘要&#xff1a;实验室作为科研与教学的重要场所&#xff0c;其高效管理至关重要。本文阐述了一个基于VUE框架开发的实验室使用管理系统&#xff0c;详细介绍了系统的需求分析、技术选型、架构设计、功能模块设计以及实现过程。该系统实现了用户管理、实验室管理、实验室管理员…

作者头像 李华
网站建设 2026/7/6 5:05:08

【单片机毕业设计】【mcugc-mcu911】基于单片机的多功能安防系统

一、基本介绍 功能&#xff1a; 1、通过火焰传感器检测是否发生明火&#xff0c;如果发生&#xff0c;通过继电器控制水泵灭火&#xff0c;并声光报警 2、通过MQ-2检测烟雾浓度&#xff0c;如果烟雾值大于设置的最大值&#xff0c;通过继电器控制风扇通风&#xff0c;并声光报警…

作者头像 李华
网站建设 2026/7/7 22:44:59

【单片机毕业设计】【mcugc-mcu916】基于单片机的智能家居安防系统

一、基本介绍 功能&#xff1a; 1、通过MQ-2检测烟雾浓度&#xff0c;如果烟雾值大于设置的最大值&#xff0c;声光报警&#xff0c;通过GSM发送“烟雾过高”短信 2、通过DS18B20检测温度值&#xff0c;如果温度值大于设置的最大值&#xff0c;声光报警 &#xff0c;通过GSM发送…

作者头像 李华
网站建设 2026/7/4 9:07:13

Java---小球移动案例(附代码)

小球可以上下左右移动import javax.swing.*; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener;/*** 演示小球通过键盘进行上下左右的移动&#xff0c;讲解 Java 事件控制*/ public class BallMove extends JFrame {MyPanel mp null;pu…

作者头像 李华
网站建设 2026/7/4 18:55:00

分享一个夸克网盘不限速的下载方法-在线免费工具

今天教大家一招能解决夸克网盘限制的在线工具。这个工具也是完全免费使用的。下面让大家看看我用这个工具的下载速度咋样。地址获取&#xff1a;放在这里了&#xff0c;可以直接获取 这个速度还是不错的把。对于平常不怎么下载的用户还是很友好的。下面开始今天的教学 输入我给…

作者头像 李华