news 2026/8/7 4:09:43

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/8/5 23:43:28

基于VUE的手机商城管理系统[VUE]-计算机毕业设计源码+LW文档

摘要&#xff1a;随着移动互联网的迅猛发展&#xff0c;手机商城业务日益繁荣&#xff0c;对高效的管理系统需求愈发迫切。本文介绍了一个基于VUE框架开发的手机商城管理系统&#xff0c;阐述了系统的需求分析、技术选型、架构设计、功能模块设计及具体实现过程。该系统实现了手…

作者头像 李华
网站建设 2026/8/6 5:36:54

Linux Shell 脚本入门实战:猜数字游戏开发(核心知识点总结)

前言作为 Linux Shell 脚本初学者&#xff0c;近期通过实战开发猜数字游戏&#xff0c;系统掌握了脚本基础核心语法&#xff0c;彻底理清了变量操作、流程控制等关键知识点。本文将结合完整的游戏脚本&#xff0c;逐一拆解学习收获&#xff0c;从基础语法到实战落地&#xff0c…

作者头像 李华
网站建设 2026/8/6 14:48:47

01Agent惊艳亮相2025 XAIR大会,重塑内容生产,现场引爆签约热潮

近日&#xff0c;备受瞩目的“2025 XAIR粤港澳大湾区人工智能与机器人产业大会”在科技创新的热潮中圆满落下帷幕。为期三天的盛会汇聚了全球顶尖的科技企业、行业领袖及专家学者&#xff0c;共同探讨AI技术的落地应用与未来趋势。作为国内多智能体领域的先行者&#xff0c;超空…

作者头像 李华
网站建设 2026/8/6 5:26:56

基于vue的家具商城 家居店活动抽奖系统_wi1h6xl5_springboot php python nodejs

目录 具体实现截图项目介绍论文大纲核心代码部分展示项目运行指导结论源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;同时还支持java、ThinkPHP、Node.js、Spring…

作者头像 李华
网站建设 2026/8/7 4:38:50

关于JS中的全部存储方式

一、为什么需要 JS 客户端存储&#xff1f;HTTP 协议的无状态特性导致浏览器与服务器每次通信都无法保留上下文&#xff0c;而客户端存储正是解决这一痛点的关键&#xff1a;状态保持&#xff1a;记住用户登录状态、购物车数据、表单填写进度性能优化&#xff1a;缓存接口数据、…

作者头像 李华
网站建设 2026/8/6 18:07:15

7、算法与数据结构:多种问题的解决方案

算法与数据结构:多种问题的解决方案 1. 问题介绍 在编程的世界里,有许多经典的问题和场景需要特定的数据结构和算法来解决。下面我们将介绍几个不同类型的问题及其解决方案。 2. 编程任务问题 The Weasel program :该程序需要实现Richard Dawkins的weasel计算机模拟。程…

作者头像 李华