Mybatis的优缺点及适用场景?

目录

一、什么是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 configurationPUBLIC "-//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 mapperPUBLIC "-//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.mzph.cn/web/43097.shtml

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

相关文章

QT TCP网络通信编程

学习目标&#xff1a; TCP网络通信编程 前置环境 运行环境:qt creator 4.12 学习内容 一、TCP 协议基础知识: TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 拥塞控制算法包括慢启动、拥塞避免、快速重传和快速恢复。TCP 通信需要建立连接,Qt 提供 QTcp…

linux 查看历史命令列表来访问之前的内容的命令是:history

在Linux中&#xff0c;要查看历史命令列表以访问之前的内容&#xff0c;你可以使用history命令。这个命令会显示你当前shell会话&#xff08;或者&#xff0c;如果你指定了参数&#xff0c;可能是所有会话&#xff09;中执行过的命令列表。 基本用法 简单地输入history并按下…

设计模式使用场景实现示例及优缺点(结构型模式——代理模式、外观模式)

结构型模式 代理模式&#xff08;Proxy Pattern&#xff09; 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过引入一个代理对象来控制对另一个对象的访问。这个代理对象可以为被代理的对象提供额外的功能&#xff0c;例如访问控制、延…

力扣844.比较含退格的字符串

力扣844.比较含退格的字符串 栈模拟 class Solution {public:bool backspaceCompare(string s, string t) {int n s.size(),m t.size();stack<char> s1,s2;for(int i0;i<n;i){s1.push(s[i]);if(s[i] #){if(s1.size() 1) s1.pop();else s1.pop(),s1.pop();}}for(i…

利用Python的sympy包求解一元多次方程

一元1次方程 import sympy as sp # 导入sympy包 x sp.Symbol(x) # 定义符号变量 f 2*x -8 # 定义要求解的一元1次方程 x sp.solve(f) # 调用solve函数求解方程 x[4]一元2次方程 import sympy as sp # 导入sympy包 x sp.Symbol(x) # 定义符号变量 f …

网络安全合规建设

网络安全合规建设 一、法律安全需求基本合规&#xff08;1&#xff09;《网络安全法》重要节点等级保护政策核心变化 二、安全需求 业务刚需&#xff08;1&#xff09;内忧&#xff08;2&#xff09;外患 三、解决方法&#xff08;1&#xff09;总安全战略目标图&#xff08;2&…

广汇汽车:救得起来吗?

五折奔驰、六折宝马...BBA们“腰斩式”大降价后正在引发连锁反应。 国内第二大汽车经销商——广汇汽车&#xff0c;还好吗&#xff1f; 受新能源品牌冲击&#xff0c;近年来奔驰、宝马等豪华燃油品牌销量低迷&#xff0c;纷纷开启降价模式&#xff0c;首当其冲的就是以广汇汽车…

使用Python实现深度学习模型:跨平台模型移植与部署

引言 随着深度学习技术的快速发展,模型的跨平台移植与部署变得越来越重要。无论是将模型从开发环境移植到生产环境,还是在不同的硬件平台上运行,跨平台部署都能显著提高模型的实用性和可扩展性。本文将介绍如何使用Python实现深度学习模型的跨平台移植与部署,并提供详细的…

QT TCP多线程网络通信

学习目标&#xff1a; TCP网络通信编程 学习前置环境 运行环境:qt creator 4.12 QT TCP网络通信编程-CSDN博客 Qt 线程 QThread类详解-CSDN博客 学习内容 使用多线程技术实现服务端计数器 核心代码 客户端 客户端&#xff1a;负责连接服务端&#xff0c;每次连接次数1。…

从零开始做题:MP3

题目 给出一个mp3文件 解题 右键->selection->save selection->另存为xxx.png即可 8750d5109208213f E:\逐鹿\MISC\tools\MP3Stego_1_1_19\MP3Stego>.\decode -X cipher.mp3 MP3StegoEncoder 1.1.19 See README file for copyright info Input file cipher.mp3…

未来代理IP的发展趋势:创新、适应和可持续性

你是否好奇&#xff0c;未来代理IP将如何演变以适应日益复杂和全球化的网络环境&#xff1f;让我们探讨一下代理IP技术在创新、适应性和可持续发展方面的未来前景。 1. 创新技术驱动 未来的代理IP将依托创新技术&#xff0c;如边缘计算、区块链和深度学习。边缘计算技术的应用…

AcWing 5458:进水排水问题

【题目描述】 某已经蓄满水的泳池内装有 4 个水管。 前 2 个水管是进水管&#xff0c;单位时间的进水量分别为 a,b。 后 2 个水管是排水管&#xff0c;单位时间的排水量分别为 c,d。 请你计算&#xff0c;当 4 个水管同时工作时&#xff0c;是否可能将泳池里的水排干。【输入格…

53-5 内网代理7 - CS上线不出网主机

靶场搭建: 这里就用之前内网代理的靶场,把web服务器这台虚拟机关闭掉,用剩下的3台加kali 各个虚拟机的网络情况 kali - 可以连接外网win2008(之前的FTP服务器) 可以连接外网 win 7(之前的办公电脑) 不出网主机 - 无法连接外网win2012 克隆机(之前的域控) - 无法连接…

视频压缩文件太大了怎么缩小?3个压缩方法分享

视频压缩文件太大了怎么缩小&#xff1f;当视频压缩文件过大时&#xff0c;缩小其大小不仅能节省宝贵的存储空间&#xff0c;还能显著提升文件传输速度&#xff0c;特别是在网络条件有限的情况下。通过专业的视频压缩软件&#xff0c;可以有效减少文件体积&#xff0c;使视频内…

python库(9):prettytable库快速实现ASCII表格

下面介绍一个快速制作ASCII表格库——prettytable&#xff0c;可以方便地制作简单表格。 1 安装prettytable pip install -i https://pypi.tuna.tsinghua.edu.cn/simple prettytable 结果如下&#xff1a; 2 代码实例 from prettytable import PrettyTable table PrettyTa…

【Python系列】深入解析 Python 中的 JSON 处理工具

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

兼容MySQL和PostgreSQL协议的数据库

兼容MySQL和PostgreSQL协议的数据库 一、Aurora二、TDSQL数据库三、TDSQL-C数据库四、TDSQL-C MySQL 版和 TDSQL MySQL 版的区别 一、Aurora Aurora是由亚马逊网络服务&#xff08;AWS&#xff09;提供的一种关系型数据库引擎。它是在MySQL和PostgreSQL之上构建的&#xff0c;…

coco数据集格式计算mAP的python脚本

目录 背景说明COCOeval 计算mAPtxt文件转换为coco json 格式自定义数据集标注 背景说明 在完成YOLOv5模型移植&#xff0c;运行在板端后&#xff0c;通常需要衡量板端运行的mAP。 一般需要两个步骤 步骤一&#xff1a;在板端批量运行得到目标检测结果&#xff0c;可保存为yol…

【Django项目】基于Python+Django+MySQL的音乐网站系统项目

功能介绍 首页&#xff1a;歌曲分类、歌曲搜索、热门歌曲、热门下载、新歌推荐 歌曲排行&#xff1a;歌曲分类、分页功能 用户板块&#xff1a;用户登陆/注册、播放历史 歌曲详情&#xff1a;歌曲播放、当前播放列表、歌曲点评、歌曲播放插件、下载歌曲 系统后台&#xff1a;歌…

MySQL体系架构解析

1.MySQL体系架构 1.1.MySQL的分支与变种 MySQL变种有好几个,主要有三个久经考验的主流变种:Percona Server,MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持,均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库,值得我们了解一下。 1.1.1.Drizzle …