实战系列(三)| Mybatis和MybatisPlus区别,包含详细代码

news2024/12/28 20:01:34

目录

  • 1. 底层框架:
  • 2. 代码差异:
  • 3. 使用差异:
  • 4. 案例代码分析:
    • 4.1 MyBatis
    • 4.2 MyBatisPlus

在这里插入图片描述

MyBatis 和 MyBatisPlus 都是基于 MyBatis 的扩展库,用于简化 MyBatis 的开发。MyBatisPlus 是在 MyBatis 的基础上进行封装,提供了一套通用的 CRUD 操作接口,而 MyBatis 是一个底层的持久层框架。

1. 底层框架:

MyBatis 是一个持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原生映射。
MyBatisPlus 是一个基于 MyBatis 的扩展库,它提供了一套通用的 CRUD 操作接口,自动生成 SQL 语句,并提供了丰富的查询条件构造器等功能。MyBatisPlus 主要使用了注解进行配置和映射。

2. 代码差异:

MyBatis 的代码主要涉及到以下几个部分:

  • MyBatis 的配置文件(mybatis-config.xml),用于配置数据源、映射文件等。
  • 映射文件(Mapper.xml),用于定义 SQL 语句和结果映射。
  • Mapper 接口,用于定义与映射文件对应的方法。
  • DAO 接口,用于封装 Mapper 接口,提供统一的 CRUD 方法。
    MyBatisPlus 的代码主要涉及到以下几个部分:
  • MyBatisPlus 的配置文件(mybatis-plus-config.xml),用于配置数据源、分页插件等。
  • 实体类(Entity),用于定义数据库表对应的实体类。
  • Mapper 接口,用于定义与数据库表对应的方法。
  • Service 接口,用于封装 Mapper 接口,提供统一的 CRUD 方法。
  • ServiceImpl 类,实现 Service 接口,调用 Mapper 接口进行数据库操作。

3. 使用差异:

MyBatis 需要手动编写 SQL 语句和结果映射,但提供了高度的定制化能力。MyBatis 的优点是可以根据实际需求灵活编写 SQL 语句,但缺点是编写映射文件和手动设置参数比较繁琐。
MyBatisPlus 提供了一套通用的 CRUD 操作接口,自动生成 SQL 语句。MyBatisPlus 的优点是简化了 MyBatis 的开发,提高了开发效率,但缺点是定制化能力较差,对于复杂的 SQL 语句可能无法满足需求。

4. 案例代码分析:

4.1 MyBatis

以下是一个简单的 MyBatis 案例,用于演示用户信息的增删改查:

<!-- 配置文件 -->  
<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?useSSL=false&amp;serverTimezone=UTC"/>  
               <property name="username" value="root"/>  
               <property name="password" value="password"/>  
           </dataSource>  
       </environment>  
   </environments>  
   <mappers>  
       <mapper resource="com/example/mapper/UserMapper.xml"/>  
   </mappers>  
</configuration>  
<!-- 映射文件 -->  
<mapper namespace="com.example.mapper.UserMapper">  
   <insert id="insertUser" parameterType="com.example.entity.User">  
       INSERT INTO user (username, password, email) VALUES (#{username}, #{password}, #{email})  
   </insert>  
   <!-- 其他 SQL 语句 -->  
</mapper>  
// Mapper 接口  
public interface UserMapper {  
   int insertUser(User user);  
   // 其他方法  
}
// DAO 接口  
public interface UserDao {  
   int insertUser(User user);  
   // 其他方法  
}
// 业务逻辑层  
@Service  
public class UserService {  
   @Autowired  
   private UserDao userDao;  
   public int insertUser(User user) {  
       return userDao.insertUser(user);  
   }  
   // 其他方法  
}

4.2 MyBatisPlus

以下是一个简单的 MyBatisPlus 案例,用于演示用户信息的增删改查:

  1. 首先,创建一个实体类(Entity)User.java:
public class User {  
   private Long id;  
   private String username;  
   private String password;  
   private String email;
   // 省略 getter 和 setter 方法  
}
  1. 创建一个 Mapper 接口 UserMapper.java:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {  
}
  1. 创建一个 Service 接口 UserService.java:
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {  
}
  1. 创建一个 ServiceImpl 类 UserServiceImpl.java,实现 Service 接口:
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;  
import org.springframework.stereotype.Service;
@Service  
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {  
}
  1. 创建一个 Controller 类 UserController.java,处理 HTTP 请求:
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController  
@RequestMapping("/user")  
public class UserController {
   @Autowired  
   private UserService userService;
   @PostMapping  
   public String createUser(@RequestBody User user) {  
       userService.save(user);  
       return "User created";  
   }
   @GetMapping("/{id}")  
   public User getUser(@PathVariable Long id) {  
       return userService.getById(id);  
   }
   @GetMapping  
   public List<User> getUsers() {  
       return userService.list();  
   }
   @PutMapping("/{id}")  
   public String updateUser(@PathVariable Long id, @RequestBody User user) {  
       user.setId(id);  
       userService.updateById(user);  
       return "User updated";  
   }
   @DeleteMapping("/{id}")  
   public String deleteUser(@PathVariable Long id) {  
       userService.removeById(id);  
       return "User deleted";  
   }  
}
  1. 配置 MyBatisPlus 在 Spring Boot 项目中:
<!-- 配置文件 -->  
<configuration>  
   <extensions>  
       <extension plugin-id="mybatis-plus" interceptor="com.baomidou.mybatisplus.extension.MybatisPlusInterceptor"/>  
   </extensions>  
</configuration>  
<!-- 配置文件 -->  
<mybatis-plus-config>  
   <mapper-locations>  
       <mapper-location resource="classpath:mapper/*Mapper.xml"/>  
   </mapper-locations>  
   <type-aliases>  
       <package name="com.example.entity"/>  
   </type-aliases>  
   <global-config>  
       <db-config>  
           <logic delete-flag="true"/>  
           <logic not-delete-flag="false"/>  
       </db-config>  
       <date-format>yyyy-MM-dd HH:mm:ss</date-format>  
       <null-type-handler>com.baomidou.mybatisplus.core.handlers.空字符串类型处理器</null-type-handler>  
   </global-config>  
</mybatis-plus-config>  

以上代码演示了如何使用 MyBatisPlus 实现用户信息的增删改查。在这个案例中,我们使用了 MyBatisPlus 提供的注解和插件,简化了 MyBatis 的开发。

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

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

相关文章

华为云云耀云服务器L实例评测 | 华为云云耀云服务器L实例使用教学

文章目录 前言一、登录华为云二、创建云服务器L实例三、登录云服务器L实例四、使用云服务器L实例后记 前言 华为云是中国领先的云计算服务提供商之一&#xff0c;旗下的云耀云服务器是一种高性能、高可靠性、灵活可扩展的云服务器。 下面&#xff0c;我将为大家介绍华为云云耀云…

STM32-固件打包部署

STM32-固件打包部署 Fang XS.1452512966qq.com STM32固件输出 工程上使用Keil开发STM32软件&#xff1b;在调试过程中&#xff0c;可直接编译下载&#xff1b;例如bootloader和APP&#xff0c;在调试时&#xff0c;可以直接下载2次&#xff1b;但是工程上&#xff0c;需要大…

第四章 Linux常用命令

第四章 Linux常用命令 1.Linux命令 ​ 要使用命令&#xff0c;必须先启动Shell程序。用户可以通过桌面右键打开终端&#xff0c;或使用CtrlAltT组合启动Shell&#xff0c;当然也可以从左侧dock面板上找到终端图标打开&#xff0c;打开后如下图&#xff1a; ​ Shell命令由命令…

真嘟假嘟?!这么清晰简单的字符函数和字符串函数!!!

目录​​​​​​​ 1. 字符分类函数 1.1 小练习 1.1.1 方法一 2. 字符转换函数 2.1 小练习的方法二 3. strlen的使⽤和模拟实现 3.1 注意事项 3.1.1 注意事项2的练习 3.2 strlen函数的模拟实现 3.2.1 方法一 3.2.2 方法二&#xff08;指针—指针&#xff09; 3.2.…

Unreal Engine Loop 流程

引擎LOOP 虚幻引擎的启动是怎么一个过程。 之前在分析热更新和加载流程过程中&#xff0c;做了一个图。记录一下&#xff01;&#xff01; ![在这里插入图片描述](https://img-blog.csdnimg.cn/f11f7762f5dd42f9b4dd9b7455fa7a74.png#pic_center 只是记录&#xff0c;以备后用…

C++ 中 API 兼容与 ABI 兼容万字详解

文章目录 API 的生命周期兼容性级别向后兼容性向前兼容性功能兼容性源代码兼容性二进制兼容性 究竟是什么导致了二进制不兼容二进制不兼容可能导致的现象怎样维护源代码兼容添加功能修改功能弃用声明&#xff08;向后兼容&#xff09;移除功能&#xff08;向后兼容&#xff09;…

【大数据之Kafka】十、Kafka消费者工作流程

1 Kafka消费方式 &#xff08;1&#xff09;pull&#xff08;拉&#xff09;模式&#xff1a;消费者从broker中主动拉取数据。&#xff08;Kafka中使用&#xff09; 不足&#xff1a;如果Kafka中没有数据&#xff0c;消费者可能会陷入循环&#xff0c;一直返回空数据。 &#…

【性能测试】数据库优化

数据库优化 1. Oracle 1&#xff09;查询和修改数据库最大连接数 查看当前的数据库连接数: select count(*) from v$process; 数据库允许的最大连接数: select value from v$parameter where name processes; 修改数据库最大连接数: ----设置数据库最大连接数为2000 alte…

CSP 202305-2 垦田计划

直接用循环找最长天数的寻常写法只能拿15分&#xff0c;便运行超时结束了 #include <iostream> using namespace std; int main(){int n,m,k,t0;cin>>n>>m>>k;auto*datanew pair<int ,int>[n];for(int i0;i<n;i){cin>>data[i].first&g…

43.MQ—RabbitMQ

目录 一、MQ—RabbitMQ。 &#xff08;1&#xff09;同步调用与异步调用。 &#xff08;1.1&#xff09;同步调用。 &#xff08;1.2&#xff09;异步调用。 &#xff08;2&#xff09;MQ之间的区别。 &#xff08;3&#xff09;RabbitMQ学习。 &#xff08;3.1&#xf…

如何多号定时发朋友圈?

如何多号定时发圈&#xff1f; 通过定时发表朋友圈可以节省时间&#xff0c;保持账号信息更新的频率&#xff0c;在不同的适当时间进行宣传&#xff0c;让发布内容更精准的抵达目标客户&#xff0c;提高互动效果和阅读率&#xff0c;还可以防止朋友圈被折叠。 下面来看看是如何…

statistic learning outlook

supervised learning 贝叶斯估计 决策树与信息熵 信息熵 H ( D ) − ∑ i 1 n p ( X x i ) l o g ( P ( X x i ) ) − ∑ p i l o g ( p i ) H(D)-\sum_{i1}^n p(Xx_i)log(P(Xx_i))-\sum p_ilog(p_i) H(D)−∑i1n​p(Xxi​)log(P(Xxi​))−∑pi​log(pi​)&#xff0c;信…

帮助中心管理系统,人人都能用的知识管理平台

帮助中心管理系统是一种知识管理平台&#xff0c;旨在帮助企业有效组织和管理知识资源&#xff0c;使其能够为客户和员工提供快速、准确的帮助和支持。 关于帮助中心管理系统的重要特点和优势&#xff1a; 知识库管理&#xff1a; 帮助中心管理系统允许企业将知识组织和分类…

Vue3+Ts+Vite项目(第十二篇)——echarts安装与使用,vue3项目echarts组件封装

概述 技术栈&#xff1a;Vue3 Ts Vite Echarts 简介&#xff1a; 图文详解&#xff0c;教你如何在Vue3项目中引入Echarts&#xff0c;封装Echarts组件&#xff0c;并实现常用Echarts图例 文章目录 概述一、先看效果1.1 静态效果1.2 动态效果 二、话不多数&#xff0c;引入 …

Linux 内核 6.5 发布,首次支持 Wi-Fi 7 和 USB4

导读Linux 6.5 内核 已经推出&#xff0c;此次更新在 Linux 6.4 内核的基础上进行了进一步的开发&#xff0c;带来了值得注意的改变和新特性。 Linus Torvalds 表示&#xff0c;这是一次相对顺畅的发布&#xff1a; 上周并没有发生任何异常或惊人的事情&#xff0c;因此没有理…

大数据之yarn

Yarn概述 是一个资源调度平台&#xff0c;相当于一个分布式的操作系统平台&#xff0c;而MR相当于操作系统中运行的软件&#xff0c;比如QQ、微信。 基础架构 ResourceManager 处理客户端请求监控NodeManager启动或监控ApplicationMaster资源的分配与调度 NodeManager 管理单…

CSC关于进一步优化国家公派出国留学服务管理工作的通知

近日国家留学基金委&#xff08;CSC&#xff09;在其官网上发布了“关于进一步优化国家公派出国留学服务管理工作的通知”&#xff08;https://www.csc.edu.cn/chuguo/s/2676&#xff09;&#xff0c;知识人网小编原文转载如下。 为进一步优化国家公派出国留学人员有关服务管理…

【开箱即用】开发了一个基于环信IM聊天室的Vue3插件,从而快速实现仿直播间聊天窗功能

前言 由于看到有部分的需求为在页面层&#xff0c;快速的引入一个包&#xff0c;并且以简单的配置&#xff0c;就可以快速实现一个聊天窗口&#xff0c;因此尝试以 Vue3 插件的形式开发一个轻量的聊天窗口。 这次简单分享一下此插件的实现思路&#xff0c;以及实现过程&#xf…

Elasticsearch近实时架构

1 Elasticsearch 与 Lucene 的结构理解 一个Elasticsearch索引由一个或多个分片&#xff08;shards&#xff09;组成。这些分片可以是主分片&#xff08;primary shard&#xff09;或副本分片&#xff08;replica shard&#xff09;。每个分片都是一个独立的Lucene索引&#xf…

什么是Docker和Docker-Compose?

Docker的构成 Docker仓库&#xff1a;https://hub.docker.com Docker自身组件 Docker Client&#xff1a;Docker的客户端 Docker Server&#xff1a;Docker daemon的主要组成部分&#xff0c;接受用户通过Docker Client发出的请求&#xff0c;并按照相应的路由规则实现路由分发…