Mybatis的优缺点及适用场景?

news2024/9/26 5:13:58

目录

一、什么是Mybatis?

二、Mybatis框架的特点

三、Mybatis框架的优点?

四、MyBatis 框架的缺点?

五、MyBatis 框架适用场合?

六、代码示例 

1. 配置文件 mybatis-config.xml

2. 映射文件 UserMapper.xml 

3. Java 代码 

七、总结 


🎈边走、边悟🎈迟早会好

一、什么是Mybatis?

        Mybatis是一种基于Java语言的持久化框架,它能够让开发人员更加方便地进行数据库操作,同时也能够提高程序的性能和可维护性。下面我们来详细了解一下Mybatis框架的特点、优点和缺点。

二、Mybatis框架的特点

  1. SQL语句的灵活性:在Mybatis框架中,SQL语句是通过XML文件来进行管理的,开发人员可以通过XML文件自由编写SQL语句,从而实现对数据库的灵活操作。
  2. 映射关系的可配置性:Mybatis框架支持将Java对象与数据库表进行映射,开发人员可以通过XML文件来配置Java对象与数据库表之间的映射关系,从而实现对数据库表的操作。
  3. 数据库连接的可管理性:Mybatis框架支持连接池技术,能够对数据库连接进行有效的管理,从而提高程序的性能和可维护性。
  4. SQL语句的可重用性:在Mybatis框架中,可以将SQL语句抽象为一个个可重用的组件,这样可以在不同的SQL语句中重复使用这些组件,从而提高程序的可重用性和可维护性。
  5. 提供多种映射方式:Mybatis框架支持多种映射方式,可以根据不同的需求选择适合的映射方式,比如注解映射、XML映射等。

三、Mybatis框架的优点?

  1. 灵活性高:Mybatis框架采用XML文件来管理SQL语句,开发人员可以根据需要自由编写SQL语句,从而实现对数据库的灵活操作。
  2. 可配置性强:Mybatis框架支持将Java对象与数据库表进行映射,开发人员可以通过XML文件来配置Java对象与数据库表之间的映射关系,从而实现对数据库表的操作。
  3. 易于维护:Mybatis框架将SQL语句抽象为可重用的组件,可以在不同的SQL语句中重复使用这些组件,从而提高程序的可重用性和可维护性。
  4. 性能高:Mybatis框架采用连接池技术,能够对数据库连接进行有效的管理,从而提高程序的性能和可维护性。
  5. 易于集成:Mybatis框架与Spring框架等其他常用框架集成比较容易,可以与其他框架一起使用,从而实现更加高效的开发。
  6. 支持多种数据库:Mybatis框架支持多种数据库,包括Mysql、Oracle、Sql server等,可以根据不同的需求选择适合的数据库。

四、MyBatis 框架的缺点?

  1. SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL 语句的功底有一定要求。
  2. SQL 语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

五、MyBatis 框架适用场合?

  1. MyBatis 专注于 SQL 本身,是一个足够灵活的 DAO 层解决方案。
  2. 对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis 将是不错的选择。
  3. 复杂查询:当项目需要大量复杂查询时,MyBatis 的直接 SQL 支持非常有用。
  4. 现有数据库:项目使用已有的复杂数据库结构,MyBatis 可以更好地与之集成。

六、代码示例 

1. 配置文件 mybatis-config.xml
<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>
2. 映射文件 UserMapper.xml 
<?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="com.example.mapper.UserMapper">
    <select id="selectUser" parameterType="int" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <insert id="insertUser" parameterType="com.example.model.User">
        INSERT INTO users (name, age) VALUES (#{name}, #{age})
    </insert>
    <update id="updateUser" parameterType="com.example.model.User">
        UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>
    <delete id="deleteUser" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>
3. Java 代码 
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.Reader;

public class MyBatisExample {
    public static void main(String[] args) throws Exception {
        String resource = "mybatis-config.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);
            
            // 插入用户
            User newUser = new User("John", 25);
            mapper.insertUser(newUser);
            session.commit();
            
            // 查询用户
            User user = mapper.selectUser(newUser.getId());
            System.out.println(user);
            
            // 更新用户
            user.setAge(26);
            mapper.updateUser(user);
            session.commit();
            
            // 删除用户
            mapper.deleteUser(user.getId());
            session.commit();
        }
    }
}

七、总结 

        Mybatis框架是一种基于Java语言的持久化框架,它具有灵活性高、可配置性强、易于维护、性能高、易于集成、支持多种数据库等优点,但是需要开发人员掌握XML文件编写和SQL语句的构建等技术,学习成本较高,开发效率相对较低,需要编写大量的XML配置文件,对初学者不太友好等缺点。因此,在使用Mybatis框架的过程中,需要根据项目的实际需求和开发人员的技术水平来选择合适的持久化框架。

 🌟感谢支持 听忆.-CSDN博客

🎈众口难调🎈从心就好

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1914613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构--二叉树相关性质

1.性质 1.满二叉树每层节点个数&#xff1a;等比数列 3.&#xff08;重要&#xff09;任意二叉树&#xff1a;度为0&#xff08;叶子节点&#xff09;的比度为2的永远多一个。。度&#xff1a;就是看有多少孩子 如下图解析&#xff1a;&#xff08;用推到归纳来分析&#xff…

CSS关于居中的问题

文章目录 1. 行内和块级元素自身相对父控件居中1.1. 块级元素相对父控件居中1.2. 行内元素相对于父控件居中 2. 实现单行文字垂直居中3. 子绝父相实现子元素的水平垂直居中3.1. 方案一3.1.1. 示例 3.2. 方案二3.2.1. 示例 3.3. 方案三(推荐)3.3.1. 示例 3.4. 方案四(了解一下) …

【linux】 sudo apt update报错——‘由于没有公钥,无法验证下列签名: NO_PUBKEY 3B4FE6ACC0B21F32’

【linux】 sudo apt update报错——‘由于没有公钥&#xff0c;无法验证下列签名&#xff1a; NO_PUBKEY 3B4FE6ACC0B21F32’ 在运行sudo apt update时遇到报错&#xff0c;由于没有公钥&#xff0c;无法验证下列签名&#xff1a; NO_PUBKEY 3B4FE6ACC0B21F32 解决方法&#x…

Vue 项目中 history 路由模式的使用

在最近帮客户开发的一个项目中&#xff0c;由于项目的特殊性&#xff0c;需要用到 Vue 中的 history路由模式。该模式使用时会涉及到“上传白屏”和“刷新 404 问题”。在帮助客户解决这两个问题的过程中&#xff0c;总结问题的解决方案并记录下来&#xff0c;希望能够保留这篇…

【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树

目录 1 -> 红黑树 1.1 -> 红黑树的概念 1.2 -> 红黑树的性质 1.3 -> 红黑树节点的定义 1.4 -> 红黑树的结构 1.5 -> 红黑树的插入操作 1.6 -> 红黑树的验证 1.8 -> 红黑树与AVL树的比较 2 -> 红黑树模拟实现STL中的map与set 2.1 -> 红…

私域流量新纪元:解锁电商增长新引擎

一、私域流量的战略价值再审视 在数字化转型的浪潮中&#xff0c;流量已成为企业生命力的源泉。相较于公域流量的广泛而难以深度触及&#xff0c;私域流量以其独有的专属性和高复用性&#xff0c;为企业搭建起通往用户内心的桥梁。它不仅赋予企业精准营销的能力&#xff0c;还…

Qt:11.输入类控件(QLineEdit-单行文本输入控件、QTextEdit-多行文本输入控件、QComboBox-下拉列表的控件)

一、QLineEdit-单行文本输入控件&#xff1a; 1.1QLineEdit介绍&#xff1a; QLineEdit 是 Qt 库中的一个单行文本输入控件&#xff0c;不能换行。允许用户输入和编辑单行文本。 1.2属性介绍&#xff1a; inputMask 设置输入掩码&#xff0c;以限定输入格式。setInputMask(con…

C#知识|账号管理系统:数据库查询账号类别动态绑定到下拉框。

哈喽,你好啊,我是雷工! 本节学习如何将数据库中账号类别动态添加到下拉框列表中。 以下为学习笔记。 01 类型表 SQLServer数据库LGAccountManagentDB中AccountType表的数据内容为: 该数据库及数据表的创建可以查看: 《 数据库|基于T-SQL创建数据表(练习笔记)》 更多关于…

(一)项目实践-利用Appdesigner制作目标跟踪仿真软件

目录 前言 一、软件页面设计 二、仿真部分 &#xff08;一&#xff09;参数输入 &#xff08;二&#xff09;绘图部分 &#xff08;三&#xff09;目标追踪程序 总结 前言 本博客有一个专栏用来介绍有关MATLAB中的Appdesigner的操作以及使用&#xff0c;本文是为了深化读者对于…

动态规划专题一 斐波那契数问题

目录 题一 最小花费爬楼梯 1、算法解析 1&#xff09;确定状态&#xff1a; ​编辑2&#xff09;状态转移方程&#xff1a; ​编辑3&#xff09;初始化&#xff1a; 4&#xff09;填表顺序&#xff1a; 5&#xff09;返回值&#xff1a; 2、代码 题二 第N个泰波那锲数 …

Git 命令行快速入门

前言 &#xff08;1&#xff09;新手个人建议使用TortoiseGit这类图形化界面来上手学习。 &#xff08;2&#xff09;如果一定需要用命令行进行操作&#xff0c;可以按照B站&#xff1a;程式与网页开发者必备技能&#xff01;Git 和 GitHub 零基础快速上手&#xff0c;轻松掌握…

odoo模型继承

odoo模型继承 模块化是Odoo一个非常重要的功能。一个模块通常定义一块业务内容&#xff0c;模块之间是可以交互的。所以从已有模块中去继承修改原有模块功能就很有必要。 Odoo中&#xff0c;模型之间也定义了一套继承的逻辑&#xff0c;目前有三种继承方 式&#xff1a; 1、…

学习测试7-ADB的使用

ADB是什么&#xff1f; ADB&#xff0c;即 Android Debug Bridge&#xff08;安卓调试桥&#xff09; 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具&#xff0c;它可为各种设备操作提供便利&#xff0c;如安装和调试应用&#xff0c;并提供对 Unix shell&…

ScrapySharp框架:小红书视频数据采集的API集成与应用

引言 随着大数据时代的到来&#xff0c;数据采集成为了互联网企业获取信息的重要手段。小红书作为一个集社交和电商于一体的平台&#xff0c;其丰富的用户生成内容&#xff08;UGC&#xff09;为数据采集提供了丰富的资源。本文将介绍如何使用ScrapySharp框架进行小红书视频数…

FLinkCDC引起的生产事故(二)

背景&#xff1a; 最近在做实时数据的抽取工作&#xff0c;利用FLinkCDC实时抽取目标库Oracle的数据到Doris中&#xff0c;但是在抽取的过程中&#xff0c;会导致目标库的生产库数据库非常卡顿&#xff0c;为了避免对生产环境的数据库造成影响&#xff0c;对生产环境的数据库利…

BJT交流分析+共发射极(CE)放大器+单片机的中断系统(中断的产生背景+使用中断重写秒表程序+中断优先级)

2024-7-10&#xff0c;星期三&#xff0c;16:58&#xff0c;天气&#xff1a;阴&#xff0c;心情&#xff1a;晴。今天终于阴天啦&#xff0c;有点风凉快一点了&#xff0c;不然真要受不了了&#xff0c;然后没有什么特殊的事情发生&#xff0c;继续学习啦&#xff0c;加油加油…

物流数据分析成本利润计算软件,佳易王物流货运单管理系统操作教程

前言&#xff1a; 物流数据分析成本利润计算软件&#xff0c;佳易王物流货运单管理系统操作教程 以下软件操作教程以&#xff0c;佳易王物流单统计分析软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件操作教程 1、佳易王物流货运…

原生小程序生成二维码方法之一

效果图&#xff1a; 第一步&#xff1a;下载对应的包并构建&#xff08;工具---》构建npm&#xff09; npm install weapp-qrcode --save 第二步&#xff1a;在wxml页面声明canvas <canvas style"width: 200px; height: 200px;margin:0 auto;" canvas-id"myQ…

【QT】QComboBox允许输入查询,且不区分大小写

目录 0.简介 1.环境 2.详细代码 3.参考 0.简介 项目需求&#xff0c;原本有一个下拉框&#xff0c;但是条目太多&#xff0c;不好搜索&#xff0c;所以用户要求可以输入查找 修改前 &#xff1a; 修改后&#xff1a; 1.环境 windows11 vs-code qt5.12 2.详细代码 QComboB…

常用网络概念

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ​​ 目录 了解组织 局域网技术 …