MyBatis和MyBatis Plus的区别

文章目录

  • 前言
  • 共同点
  • 各自的优势
    • MyBatis
    • MyBatis Plus
    • 各自的代码示例
      • MyBatis 示例:
        • 实体类 User.java:
        • MyBatis Mapper XML 配置文件 UserMapper.xml:
        • MyBatis Mapper 接口 UserMapper.java:
        • MyBatis 使用:
      • MyBatis Plus 示例:
        • 实体类 User.java:
        • MyBatis Plus Mapper 接口 UserMapper.java:
        • MyBatis Plus 使用:
  • 区别总结
  • 如何选择
  • 扩展:MyBatis Plus的常用注解
      • 实体类注解:
      • 主键注解:
      • Mapper接口方法注解:
      • 其他注解:

前言

简单来说,MyBatis Plus就是MyBatis的加强版,MyBatis Plus是在MyBatis基础上进行了功能扩展和增强,如果你会用Mybatis,那么对于MyBatis Plus的使用也是一看就会的。

共同点

MyBatis和MyBatis Plus都是基于Java的持久层框架,用于简化数据库操作。

各自的优势

MyBatis

  1. XML配置驱动:MyBatis以XML文件配置SQL语句和数据库映射,开发者需要手动编写SQL映射文件。

  2. 基本功能:提供SQL执行、结果映射和参数处理等功能,通过XML文件或注解配置SQL语句与Java方法的映射。

  3. 灵活性:开发者对SQL语句有更高的控制权,可以优化和定制SQL语句,适应各种复杂的查询需求。

MyBatis Plus

  1. 代码生成器:MyBatis Plus提供了代码生成器功能,可以根据数据库表自动生成Entity、Mapper、Service、Controller等代码,加速开发过程。

  2. 简化操作:内置了通用的CRUD方法,例如insert、update、delete等操作,简化了数据操作。

  3. 增强功能:提供了更多方便的方法和功能,如分页、条件构造器、Lambda表达式查询等,减少了一些重复的代码编写,提高了开发效率。

  4. 集成Spring Boot:天然地集成了Spring Boot,使得在Spring Boot项目中更加便捷地使用。

  5. Wrapper查询:支持Wrapper的查询方式,允许使用条件构造器进行动态SQL查询,简化了复杂查询条件的拼接。

各自的代码示例

好的,下面是一个简单的示例,展示了使用MyBatis和MyBatis Plus进行数据库操作的区别。

MyBatis 示例:

实体类 User.java:
@Data
public class User {private Long id;private String username;private String password;}
MyBatis Mapper XML 配置文件 UserMapper.xml:
<!-- 查询用户 -->
<select id="getUserById" parameterType="long" resultType="User">SELECT id, username, password FROM user WHERE id = #{id}
</select>
MyBatis Mapper 接口 UserMapper.java:
public interface UserMapper {User getUserById(Long id);
}
MyBatis 使用:
public class MyBatisExample {public static void main(String[] args) {SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();try (SqlSession sqlSession = sqlSessionFactory.openSession()) {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = userMapper.getUserById(1L);System.out.println(user.getUsername());}}
}

MyBatis Plus 示例:

实体类 User.java:
import com.baomidou.mybatisplus.annotation.TableName;@TableName("user")
@Data
public class User {private Long id;private String username;private String password;}
MyBatis Plus Mapper 接口 UserMapper.java:
import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface UserMapper extends BaseMapper<User> {
}
MyBatis Plus 使用:
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;public class MyBatisPlusExample {public static void main(String[] args) {try (SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession()) {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);// 查询用户User user = userMapper.selectById(1L);System.out.println(user.getUsername());// 使用Wrapper进行查询QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("username", "十七号程序猿");List<User> userList = userMapper.selectList(wrapper);// 输出用户列表userList.forEach(u -> System.out.println(u.getUsername()));}}
}

这个示例展示了MyBatis和MyBatis Plus的基本用法:
在MyBatis中,需要编写XML配置文件来定义SQL语句和Mapper接口,而MyBatis Plus则更为简洁,只需定义实体类和继承自BaseMapper的Mapper接口即可使用内置的CRUD方法。此外,MyBatis Plus提供了条件构造器QueryWrapper,可以方便地构建动态查询条件。

区别总结

  1. 开发效率: MyBatis Plus相对于MyBatis提供了更多的内置功能和方法,能够提高开发效率,尤其是对于通用的数据库操作。

  2. 配置和操作: MyBatis Plus减少了手动编写SQL和Mapper文件的需求,提供了更多便捷的方法来执行数据库操作,而MyBatis更加灵活,需要开发者手动处理更多的SQL和映射配置。

  3. 功能扩展: MyBatis Plus在MyBatis的基础上提供了更多的功能扩展,使得开发者能够更快速地完成开发任务。

如何选择

这个没有一个固定的答案。并不是说MyBatis Plus一定比MyBatis要好。选择使用哪个取决于项目需求和团队偏好,对于需要更多内置功能、简化操作和提高开发效率的项目,MyBatis Plus可能更适合。而对于需要更高度定制和对SQL控制要求较高的项目,则MyBatis可能更合适。

扩展:MyBatis Plus的常用注解

MyBatis Plus提供了多种注解,用于简化数据库操作和增加灵活性。以下是一些常用的注解:

实体类注解:

  1. @TableName:标识实体类对应的数据库表名,用于指定实体类与数据库表的映射关系。

    @TableName("user")
    public class User {//...
    }
    
  2. @TableField:指定实体类字段和数据库表字段的映射关系,用于非主键字段。

    public class User {@TableField("username")private String name;//...
    }
    

主键注解:

  1. @TableId:标识主键字段,并指定主键生成策略和数据库表主键字段名称。

    public class User {@TableId(value = "id", type = IdType.AUTO)private Long userId;//...
    }
    

Mapper接口方法注解:

  1. @Mapper:在Mapper接口上使用,标识该接口是MyBatis Plus的Mapper接口。

    @Mapper
    public interface UserMapper extends BaseMapper<User> {//...
    }
    
  2. @Select@Insert@Update@Delete:在自定义SQL方法上使用,用于映射SQL操作。

    @Select("SELECT * FROM user WHERE username = #{username}")
    User findByUsername(String username);
    

其他注解:

  1. @Version:用于乐观锁的字段标识,在更新操作时用于控制并发。

    public class User {@Versionprivate Integer version;//...
    }
    

这些注解能够简化MyBatis Plus的使用,并且提供了更多的灵活性,减少了开发者编写重复代码的工作。根据实际情况,使用这些注解可以更方便地进行数据库操作。

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

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

相关文章

Redis队列stream,Redis多线程详解

Redis 目前最新版本为 Redis-6.2.6 &#xff0c;会以 CentOS7 下 Redis-6.2.4 版本进行讲解。 下载地址&#xff1a; https://redis.io/download 安装运行 Redis 很简单&#xff0c;在 Linux 下执行上面的 4 条命令即可 &#xff0c;同时前面的 课程已经有完整的视…

《尚品甄选》:后台系统——权限管理之分类和品牌管理,使用EasyExcel导入导出数据(debug一遍)

文章目录 一、分类管理1.1 表结构介绍1.2 分类列表查询 二、EasyExcel使用2.1 EasyExcel简介2.2 导出功能2.3 导入功能 三、品牌管理3.1 表结构介绍3.2 列表查询3.3 添加品牌3.4 修改品牌3.5 删除品牌 一、分类管理 分类管理就是对商品的分类数据进行维护。 1.1 表结构介绍 分…

缺省参数的声明和定义

首先&#xff0c;函数缺省参数不能同时出现在声明和定义中&#xff0c;如出现则报错&#xff1a; 声明和定义中同时出现缺省参数 ctrlb&#xff0c;编译报错&#xff0c;提示 “test"&#xff1a;重定义默认参数&#xff1a;参数1 编译报错 当函数的声明和定义中都出现…

第10关:基数排序

任务要求参考答案问答98 任务描述相关知识 基数排序算法编程要求测试说明 任务描述 本关任务&#xff1a;实现基数排序算法&#xff0c;并将乱序数列变成升序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1.基数排序算法。 基数排序算法 基数排序是按…

Node.js下载安装教程

一、下载安装包 1、百度网盘自提链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Bbw895MtUgjlfZylPHCCxw 提取码&#xff1a;x89v 2、进入官网下载 https://nodejs.org/zh-cn/download/ 选择对应版本&#xff0c;我这里选的windows64位版本 二、安装程序 1、…

使用shell快速查看电脑曾经连接过的WiFi密码

此方法只能查看以前连接过的wifi名称和对应的密码 查看连接过的WiFi名称netsh wlan show profiles查看具体的WiFi名称netsh wlan show profile name"你的wifi名称" keyclear

2023 OI 总结

2023 O I 2023 \space OI 2023 OI ここは总 • 结です ここは总\space• \space结です ここは总 • 结です 我也不知道要写些什么&#xff0c;就随便写了 csp/s第一题10min出ac思路&#xff0c;结果写炸了qwq&#xff0c;被旁边的大哥影响稍微有点大&#xff0c;没调完第一题…

vivado综合分析与收敛技巧1

使用细化视图对 RTL 进行最优化 完成任意实现步骤后使用 report_timing 、 report_timing_summary 或 report_design_analysis 分析时序结果时&#xff0c; 您必须审查关键路径结构 &#xff0c; 了解是否可通过修改 RTL 、使用综合属性或者使用其他综合选项来更有效地将…

LeetCode.24两两交换链表中的节点

LeetCode.24两两交换链表中的节点 1.问题描述2.解题思路3.代码 1.问题描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示…

雷达公式实现(matlab)

雷达公式实现 代码来源&#xff1a;《雷达系统分析与设计(MATLAB版)(第三版)》 function [snr] radar_eq(pt,freq,g,sigma,b,nf,loss,range) % This program implements Eq.(1.63) %% Inputs:% pt——峰值功率&#xff0c;W% freq——雷达中心频率&#xff0c;Hz% g——天线…

IntelliJ IDEA 中有什么让你相见恨晚的技巧

一、条件断点 循环中经常用到这个技巧&#xff0c;比如&#xff1a;遍历1个大List的过程中&#xff0c;想让断点停在某个特定值。 参考上图&#xff0c;在断点的位置&#xff0c;右击断点旁边的小红点&#xff0c;会出来一个界面&#xff0c;在Condition这里填入断点条件即可&…

AI旅游:旅游行业的人工智能成熟艺术适应从实践到表现报告

今天分享的是AI系列深度研究报告&#xff1a;《AI旅游&#xff1a;旅游行业的人工智能成熟艺术适应从实践到表现报告》。 &#xff08;报告出品方&#xff1a;accenture&#xff09; 报告共计&#xff1a;25页 旅行还没有充分利用AI所能做的一 而旅游业比两年前强多了。公司…

如何通过Portal实现消息集成

在数字化时代浪潮下&#xff0c;信息的流通与交互已变得至关重要&#xff0c;不论是在企业内部日常协作&#xff0c;还是与外部客户的紧密沟通&#xff0c;信息的快速、准确、实时传递都成为了确保业务顺畅进行的关键因素、决策精准的核心要素。 为了满足这种日益增长的需求&a…

flask web开发学习之初识flask(一)

一、概念 flask是一个使用python编写的轻量级web框架&#xff0c;作者为Armin Ronacher&#xff08;中文名&#xff1a;阿尔敏罗纳彻&#xff09;&#xff0c;它广泛被应用于web开发和API。flask提供了简洁而灵活地方式来构建web应用&#xff0c;它不会强加太多约束&#xff0…

Vue 2.0源码分析-从入口开始

之前提到过 Vue.js 构建过程&#xff0c;在 web 应用下&#xff0c;一起来分析 Runtime Compiler 构建出来的 Vue.js&#xff0c;它的入口是 src/platforms/web/entry-runtime-with-compiler.js&#xff1a; import config from core/config import { warn, cached } from co…

PyCharm简介与安装

pyCharm的作用 PyCharm是一种Python的集成开发环境&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高效率的工具 pyCharm的集成 pyCharm的分类 PyCharm的下载 网址&#xff1a;https://www.jetbrains.com/pycharm/download/#sectionwindows PyCharm的安装

Java源码中经常出现的for (;;) {}:理解无限循环

其他系列文章导航 Java基础合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、无限循环的原理 二、使用场景 2.1服务器端的消息监听&#xff1a; 2.2守护线程的执行&#xff1a; 三、总结 前言 我们平常都会去阅读Java的源…

LeetCode [中等]128. 最长连续序列

给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 128. 最长连续序列 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 利…

大数据学习(26)-数据倾斜总结

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…

第五届全国高校计算机能力挑战赛-程序设计挑战赛(C语言模拟题)

1、已有定义“int a[10]{1,2},i0;”&#xff0c;下面语句中与“ a[i]a[i1],i;”等价的是()。 A. a[i]a[i1]; B. a[i]a[i]; C. a[i]a[i1]; D. i,a[i-1]a[i]; 2、两次运行下面的程序&#xff0c;如果从键盘上分别输入6和4&#xff0c;则输出结果是(&#xff09;。 A. 7和5 …