SSM开发(二) MyBatis简介

目录

一、MyBatis是什么

二、mybatis的优点

三、mybatis的缺点

四、mybatis与JDBC、jdbctemplate对比

1、JDBC

2、 MyBatis

3、 JdbcTemplate

五、mybatis工作原理


一、MyBatis是什么

        mybatis是一个简化和实现了java数据持久层的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单易用的API和数据库交互

二、mybatis的优点

1、与JDBC相比,减少了50%以上的代码量。

2、mybatis是最简单的持久化框架,小巧并且简单易学(使用简单,学习成本较低)。

3、mybatis灵活,不会对应用程序或者数据库的限售设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。

4、提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)

三、mybatis的缺点

1、SQL语句的编写工作量较大,对开发人员的SQL语句编写有一定的水平要求。

2、SQL语句过于依赖数据库,不能随意更换数据库。自动化程度不高,移植性也不高,有时从一个数据库迁移到另外一个数据库的时候需要自己修改配置,所以称只为半自动ORM框架

3、拼接复杂SQL语句时不灵活

注:复杂交易订单、支付等业务逻辑往往需要复杂SQL,本人曾在的互联网公司就没有使用mybatis,而是使用了JDBCTemplate.

四、mybatis与JDBC、jdbctemplate对比

相同点: 都是用于操作数据库

1、JDBC

JDBC英文名为:Java Data Base Connectivity(Java数据库连接),官方解释它是Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API,根本上说JDBC是一种规范,它提供的接口,一套完整的,允许便捷式访问底层数据库。

通过JDBC,Java应用程序可以与多种关系数据库进行交互,如Oracle、MySQL、SQL Server等。

JDBC存在的问题

1.数据库连接创建,释放频繁造成西戎资源的浪费,从而影响系统性能,使用数据库连接池可以解决问题。

2.sql语句在代码中硬编码,造成代码的不已维护,实际应用中sql的变化可能较大,sql代码和java代码没有分离开来维护不方便。

3.使用preparedStatement向有占位符传递参数存在硬编码问题因为sql中的where子句的条件不确定,同样是修改不方便/

4.对结果集中解析存在硬编码问题,sql的变化导致解析代码的变化,系统维护不方便。


举例说明:

public  void test() throws SQLException {Connection conn=null;PreparedStatement pstmt=null;try {// 1.加载驱动Class.forName("com.mysql.jdbc.Driver");// 2.创建连接conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc_example", "root", "123456");// SQL语句String sql="select id,user_name,create_time from t_user where id=?";// 获得sql执行者pstmt=conn.prepareStatement(sql);pstmt.setInt(1,1);// 执行查询//ResultSet rs= pstmt.executeQuery();pstmt.execute();ResultSet rs= pstmt.getResultSet();rs.next();User user =new User();user.setId(rs.getLong("id"));user.setUserName(rs.getString("user_name"));user.setCreateTime(rs.getDate("create_time"));System.out.println(user.toString());} catch (Exception e) {e.printStackTrace();}finally{// 关闭资源try {if(conn!=null){conn.close();}if(pstmt!=null){pstmt.close();}} catch (SQLException e) {e.printStackTrace();}}
}

2、 MyBatis

一句话总结:灵活的 SQL 控制(将SQL语句与Java代码进行解耦)

        MyBatis 是一个持久层框架(需要在Spring中使用Mybatsi, 可以与Spring框架整合),用于将 SQL 语句和 Java 对象之间进行映射,它消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs (Plain Old Java Objects) 映射成数据库中的记录。

        通过 XML 或注解配置 SQL 语句和映射关系,MyBatis 将 SQL 语句与 Java 代码解耦,使开发者能够更自由地编写和优化 SQL 语句。这使得 MyBatis 特别适用于需要精细控制 SQL 的应用场景

Mybatis与JDBC的关系

        Mybatis并没有取代JDBC,而是在JDBC的基础上进行了封装和扩展。Mybatis通过JDBC连接数据库,然后提供了一种更加简洁、灵活的方式来操作数据库。通过Mybatis,开发者可以更加专注于SQL语句的编写,而不需要关心底层的JDBC细节。

MyBatis通过什么方式连接数据库?

        MyBatis是一款持久层框架,它提供了多种连接数据库的方式。其中最常用的方式是通过JDBC连接数据库。MyBatis使用JDBC来与数据库进行通信,通过配置数据源和数据库连接信息,可以轻松地连接到各种不同类型的数据库,如MySQL、Oracle、SQL Server等。

        除了通过JDBC连接数据库外,MyBatis还支持通过JNDI和Spring的数据源来连接数据库。通过JNDI连接数据库需要在应用服务器中配置数据源,并在MyBatis的配置文件中指定JNDI名称。而通过Spring的数据源连接数据库,则需要在Spring的配置文件中配置数据源,并将数据源注入到MyBatis的SqlSessionFactory中。这些方式都能够实现与数据库的连接,并且可以根据具体的场景选择合适的方式来连接数据库。

举例说明:

  <sql id="Base_Column_List">id, filename, fileurl, isdel</sql><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select <include refid="Base_Column_List" />from filewhere id = #{id,jdbcType=INTEGER}</select>

3、 JdbcTemplate

一句话总结:简化的数据库访问

JdbcTemplate 是 Spring 框架中的一部分(Spring 框架提供的一个 JDBC 抽象层),它用于简化 JDBC 操作。它消除了可能导致大量代码的错误,如手动关闭连接和结果集。JdbcTemplate 自动进行事务管理,并且可以很容易地集成 Spring 的异常转换。

相对于 MyBatis,JdbcTemplate 提供了更高级别的接口,不需要手动编写 SQL 语句。通过方法调用和占位符,开发者可以执行数据库操作,如查询、插入、更新和删除等。

在 Spring 框架,你希望使用更简化的方式,那么选择 JdbcTemplate 是更合适的选择

举例说明:

// JdbcTemplate 使用
@Autowired
private JdbcTemplate jdbcTemplate;public User getUserById(int id) {String sql = "SELECT * FROM users WHERE id = ?";RowMapper<User> rowMapper = new BeanPropertyRowMapper<>(User.class);return jdbcTemplate.queryForObject(sql, rowMapper, id);
}

五、mybatis工作原理

Mybatis在底层使用了JDBC进行数据库的连接和操作。

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

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

相关文章

LabVIEW 水电站厂内经济运行系统

基于 LabVIEW 的水电站经济运行系统&#xff0c;主要针对农村小水电站运行管理的不足进行改进&#xff0c;通过精确控制发电与用水量&#xff0c;最小化耗水量并优化负荷分配&#xff0c;提升水电站的运营效率和经济效益。 ​ LabVIEW 在系统中的功能特点 强大的图形化编程环…

重学SpringBoot3-WebClient配置与使用详解

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-WebClient配置与使用详解 1. 简介2. 环境准备 2.1 依赖配置 3. WebClient配置 3.1 基础配置3.2 高级配置3.3 retrieve()和exchange()区别 4. 使用示例 4.1 基本请求操…

鸿蒙仓颉环境配置(仓颉SDK下载,仓颉VsCode开发环境配置,仓颉DevEco开发环境配置)

目录 ​1&#xff09;仓颉的SDK下载 1--进入仓颉的官网 2--点击图片中的下载按钮 3--在新跳转的页面点击即刻下载 4--下载 5--找到你们自己下载好的地方 6--解压软件 2&#xff09;仓颉编程环境配置 1--找到自己的根目录 2--进入命令行窗口 3--输入 envsetup.bat 4--验证是否安…

【AI编辑器】字节跳动推出AI IDE——Trae,专为中文开发者深度定制

目录 一、背景 二、核心特性 2.1 AI驱动的代码自动生成 2.2 智能问答与代码补全 2.3 多语言支持 2.4 插件与扩展 三、架构 四、下载使用 4.1 下载与安装 4.2 界面与配置 五、应用实践 5.1 快速生成代码 5.2 智能问答与调试 5.3 团队协作与代码审查 六、与Cursor…

linux网络 | 传输层TCP | 认识tcp报头字段与分离

前言&#xff1a; 本节内容继续传输层的讲解&#xff0c; 本节讲解的是tcp协议。 tcp协议是我们日常中最常用的协议。就比如我们浏览网页&#xff0c;我们知道网页时http或者https协议。 其实http或者https底层就是用的tcp协议。tcp协议&#xff0c;全名又称为传输控制协议&…

快速入门Flink

Flink是新一代实时计算平台&#xff0c;采用原生的流处理系统&#xff0c;保证了低延迟性&#xff0c;在API和容错上也是做的相当完善&#xff0c;本文将从架构、组件栈、安装、入门程序等进行基础知识的分析&#xff0c;帮助大家快速对Flink有一个了解。 一.简介 1.是什么 Ap…

最新版pycharm如何配置conda环境

首先在conda prompt里创建虚拟环境&#xff0c;比如 conda create --prefix E:/projects/myenv python3.8然后激活 conda activate E:/projects/myenv往里面安装点自己的包&#xff0c;比如 conda install pytorch1.7.1 torchvision0.8.2 -c pytorch打开pycharm 注意&#x…

循环队列(C语言版)

循环队列(C语言版&#xff09; 1.简单介绍循环队列2.使用何种结构来实现3.基本结构4.初始化5.判空判满6.向循环队列插入一个元素7.从循环队列中删除一个元素8.获取队头队尾元素9.释放空间10.完整代码 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#…

【线性代数】列主元法求矩阵的逆

列主元方法是一种用于求解矩阵逆的数值方法&#xff0c;特别适用于在计算机上实现。其基本思想是通过高斯消元法将矩阵转换为上三角矩阵&#xff0c;然后通过回代求解矩阵的逆。以下是列主元方法求解矩阵 A A A 的逆的步骤&#xff1a; [精确算法] 列主元高斯消元法 步骤 1&am…

OGG 19C 集成模式启用DDL复制

接Oracle19C PDB 环境下 OGG 搭建&#xff08;PDB to PDB&#xff09;_cdb架构 配置ogg-CSDN博客&#xff0c;给 pdb 环境 ogg 配置 DDL 功能。 一个报错 SYShfdb1> ddl_setup.sqlOracle GoldenGate DDL Replication setup scriptVerifying that current user has privile…

基于微信小程序的健身管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

澎峰科技计算软件栈与沐曦GPU完成适配和互认证

近期&#xff0c;澎峰科技与沐曦完成了对PerfXLM&#xff08;推理引擎&#xff09;、PerfXCloud&#xff08;大模型服务平台&#xff09;与沐曦的曦云系列通用计算GPU的联合测试&#xff0c;测试结果表明PerfXLM、PerfXCloud软件与沐曦GPU产品实现了全面兼容。 PerfXLM高性能大…

Tensor 基本操作1 unsqueeze, squeeze, softmax | PyTorch 深度学习实战

本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 目录 创建 Tensor常用操作unsqueezesqueezeSoftmax代码1代码2代码3 argmaxitem 创建 Tensor 使用 Torch 接口创建 Tensor import torch参考&#xff1a;https://pytorch.org/tutorials/beginn…

计算机毕业设计hadoop+spark股票基金推荐系统 股票基金预测系统 股票基金可视化系统 股票基金数据分析 股票基金大数据 股票基金爬虫

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

C++17 新特性深入解析:constexpr 扩展、if constexpr 和 constexpr lambda

C17 不仅增强了现有特性&#xff0c;还引入了一些全新的编程工具&#xff0c;极大地提升了代码的效率和表达力。在这篇文章中&#xff0c;我们将深入探讨 C17 中与 constexpr 相关的三个重要特性&#xff1a;constexpr 的扩展用法、if constexpr 和 constexpr lambda。这些特性…

AI 编程工具—Cursor进阶使用 Rules for AI

AI 编程工具—Cursor进阶使用 Rules for AI 这里配置是给所有的会话和内嵌模式的,你可以理解为是一个全局的配置 下面的代码是之前Cursor 给我们生成的,下面我们开始配置Rules ,来让Cursor生成的代码更加符合我们的编程习惯 def quick_sort(arr):"""使用快…

Games104——渲染中光和材质的数学魔法

原文链接 渲染方程及挑战 挑战 对于任一给定方向如何获得radiance–阴影 对于光源和表面shading的积分运算&#xff08;蒙特卡洛积分&#xff09; 对于反射光多Bounce的无限递归计算 基础光照解决方案 Blinn-Phong模型&#xff1a; 简化阴影 最常见的处理方式就是Shadow M…

RV1126+FFMPEG推流项目源码

源码在我的gitee上面&#xff0c;感兴趣的可以自行了解 nullhttps://gitee.com/x-lan/rv126-ffmpeg-streaming-project

150 Linux 网络编程6 ,从socket 到 epoll整理。listen函数参数再研究

一 . 只能被一个client 链接 socket例子 此例子用于socket 例子&#xff0c; 该例子只能用于一个客户端连接server。 不能用于多个client 连接 server socket_server_support_one_clientconnect.c /* 此例子用于socket 例子&#xff0c; 该例子只能用于一个客户端连接server。…

2D 超声心动图视频到 3D 心脏形状重建的临床应用| 文献速递-医学影像人工智能进展

Title 题目 2D echocardiography video to 3D heart shape reconstruction for clinicalapplication 2D 超声心动图视频到 3D 心脏形状重建的临床应用 01 文献速递介绍 超声心动图是心血管医学中一种至关重要且广泛应用的影像学技术&#xff0c;利用超声波技术捕捉心脏及其…