当前位置: 首页 > news >正文

【热门框架】Mybatis-Plus入门介绍看这一篇文章就足够了

MyBatis-Plus 是在 MyBatis 的基础上进行了封装,提供了更加便捷的开发方式,具有简化开发、提高效率等优点。以下是 MyBatis-Plus 的一些特点和用法:

  1. 通用 CRUD 操作:MyBatis-Plus 提供了通用的 CRUD 接口,可以直接调用,无需再编写 SQL 语句。例如,可以通过继承 BaseMapper 接口来实现对数据表的增删改查操作。

  2. 支持 Lambda 表达式:MyBatis-Plus 除了提供常规的 CRUD 接口,还支持使用 Lambda 表达式进行条件构造,使用更加简单,代码更加易读。例如:

    List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getName, "Jack").or().like(User::getEmail, "test")
    );
    
  3. 支持分页查询:MyBatis-Plus 提供了 Page 类用于分页查询,可以轻松地进行分页查询操作,例如:

    Page<User> page = new Page<>(1, 10);
    IPage<User> userPage = userMapper.selectPage(page, new QueryWrapper<User>().eq("status", 1).like("name", "Jack")
    );
    List<User> userList = userPage.getRecords();
    
  4. 代码生成器:MyBatis-Plus 提供了代码生成器,可以快速生成实体类、Mapper 接口以及 XML 映射文件,大大提高了开发效率。

  5. 支持注解方式配置:MyBatis-Plus 支持使用注解来配置 SQL 语句,例如可以使用 @TableName 注解来指定实体类对应的数据表,使用 @TableId 注解来指定主键字段。

以下是 MyBatis-Plus 的一些配置示例:

  1. 配置 XML 映射文件:

    <mapper namespace="com.example.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.example.entity.User"><id column="id" property="id" jdbcType="BIGINT"/><result column="name" property="name" jdbcType="VARCHAR"/><result column="age" property="age" jdbcType="INTEGER"/><result column="email" property="email" jdbcType="VARCHAR"/></resultMap><select id="selectById" resultMap="BaseResultMap">select id, name, age, email from user where id=#{id}</select>
    </mapper>
    
  2. 配置注解方式:

    @TableName("user")
    public class User {@TableId(type = IdType.AUTO)private Long id;private String name;private Integer age;private String email;// ...
    }
    
  3. 使用 Lambda 表达式:

    List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getName, "Jack").or().like(User::getEmail, "test")
    );
    

以上就是 MyBatis-Plus 的一些特点和用法,接下来可以更深入地了解 MyBatis-Plus 的一些重要功能和用法:

  1. 实体类的代码生成:MyBatis-Plus 提供了代码生成器,可以根据数据库表结构自动生成实体类、Mapper 接口以及 XML 配置文件。使用代码生成器可以极大地提高开发效率,并且减少出错的可能性。以下是代码生成器的使用示例:
public class CodeGenerator {public static void main(String[] args) {// 数据源配置DataSourceConfig dataSourceConfig = new DataSourceConfig();dataSourceConfig.setDbType(DbType.MYSQL);dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8");dataSourceConfig.setUsername("root");dataSourceConfig.setPassword("root");// 全局配置GlobalConfig globalConfig = new GlobalConfig();globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java");globalConfig.setAuthor("test");globalConfig.setOpen(false);globalConfig.setServiceName("%sService");globalConfig.setMapperName("%sMapper");globalConfig.setXmlName("%sMapper");// 策略配置StrategyConfig strategyConfig = new StrategyConfig();strategyConfig.setNaming(NamingStrategy.underline_to_camel);strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);strategyConfig.setSuperEntityClass("com.baomidou.mybatisplus.extension.activerecord.Model");strategyConfig.setEntityLombokModel(true);strategyConfig.setRestControllerStyle(true);strategyConfig.setInclude("user"); // 需要生成的表名strategyConfig.setControllerMappingHyphenStyle(true);// 包配置PackageConfig packageConfig = new PackageConfig();packageConfig.setParent("com.example.demo");packageConfig.setEntity("entity");packageConfig.setService("service");packageConfig.setServiceImpl("service.impl");packageConfig.setMapper("mapper");packageConfig.setXml("mapper.xml");packageConfig.setController("controller");// 代码生成器AutoGenerator generator = new AutoGenerator();generator.setDataSource(dataSourceConfig);generator.setGlobalConfig(globalConfig);generator.setStrategy(strategyConfig);generator.setPackageInfo(packageConfig);// 执行生成代码generator.execute();}
}

上述代码会根据指定的数据库表生成对应的实体类、Mapper 接口以及 XML 配置文件,并且可以自定义配置生成的代码的包路径、作者名等信息。

  1. 分页查询:MyBatis-Plus 提供了一个非常方便的分页查询 API,可以通过 Page 对象来实现分页查询,例如:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {@Overridepublic Page<User> listUsersByPage(int pageNum, int pageSize) {Page<User> page = new Page<>(pageNum, pageSize);QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.lambda().eq(User::getIsDeleted, false);return this.page(page, wrapper);}
}

上述代码会根据传入的 pageNum 和 pageSize 参数,查询对应的分页数据,并且使用 QueryWrapper 来构造查询条件。

  1. 条件构造器:MyBatis-Plus 提供条件构造器是 MyBatis-Plus 中的一个重要特性,它可以帮助我们在使用 MyBatis 进行数据库操作时更加方便地进行条件组合和查询。MyBatis-Plus 提供了三种类型的条件构造器:Wrapper、QueryWrapper 和 UpdateWrapper。

  2. Wrapper

Wrapper 是最基本的条件构造器,它提供了 where、and、or、in、notIn、eq、ne、gt、lt、ge、le、groupBy、orderBy 等方法,可以方便地构造查询条件,示例代码如下:

Wrapper<User> wrapper = new Wrapper<User>() {@Overridepublic String getSqlSegment() {return "where age > 18 and sex = 1 order by create_time desc";}
};
List<User> userList = userMapper.selectList(wrapper);
  1. QueryWrapper

QueryWrapper 继承自 Wrapper,增加了一些更加方便的方法,如 eq、ne、gt、ge、lt、le 等方法,可以更加方便地进行条件组合,示例代码如下:

QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.gt("age", 18).eq("sex", 1).orderByDesc("create_time");
List<User> userList = userMapper.selectList(queryWrapper);
  1. UpdateWrapper

UpdateWrapper 也是继承自 Wrapper,它提供了一些更新操作的方法,如 set、setSql、inc、mul、like 等方法,可以方便地构造更新条件,示例代码如下:

UpdateWrapper<User> updateWrapper = new UpdateWrapper<User>();
updateWrapper.set("name", "Tom").eq("age", 20);
int count = userMapper.update(null, updateWrapper);

除了以上三种条件构造器,MyBatis-Plus 还提供了 LambdaQueryWrapper 和 LambdaUpdateWrapper 两种条件构造器,它们采用 Lambda 表达式的方式构造查询和更新条件,可以使代码更加简洁和易读。例如:

LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<User>();
lambdaQueryWrapper.gt(User::getAge, 18).eq(User::getSex, 1).orderByDesc(User::getCreateTime);
List<User> userList = userMapper.selectList(lambdaQueryWrapper);LambdaUpdateWrapper<User> lambdaUpdateWrapper = new LambdaUpdateWrapper<User>();
lambdaUpdateWrapper.set(User::getName, "Tom").eq(User::getAge, 20);
int count = userMapper.update(null, lambdaUpdateWrapper);

总之,MyBatis-Plus 提供了强大的条件构造器功能,可以帮助我们更加方便地进行条件组合和查询操作,提高开发效率。

相关文章:

【热门框架】Mybatis-Plus入门介绍看这一篇文章就足够了

MyBatis-Plus 是在 MyBatis 的基础上进行了封装&#xff0c;提供了更加便捷的开发方式&#xff0c;具有简化开发、提高效率等优点。以下是 MyBatis-Plus 的一些特点和用法&#xff1a; 通用 CRUD 操作&#xff1a;MyBatis-Plus 提供了通用的 CRUD 接口&#xff0c;可以直接调用…...

Node【Node.js 20】新特性

文章目录 &#x1f31f;前言&#x1f31f;Node.js 20: 一次重要的升级和改进&#x1f31f;Internationalization API Update&#x1f31f;端口管理器&#x1f31f;字符串处理&#x1f31f; 更好的调试工具&#x1f31f; Crypto模块的更新&#x1f31f;总结&#x1f31f;写在最后…...

前端程序员的职业发展规划与路线——ChatGPT的回答

文章目录 一、前端程序员的职业规划是&#xff1f;回答1&#xff1a; 作为一个前端开发程序员&#xff0c;您的职业发展路线可能如下&#xff1a;回答2&#xff1a;作为前端开发程序员&#xff0c;您的职业发展路线可能如下&#xff1a;回答3&#xff1a; 你的职业发展路线可能…...

AlgoC++第八课:手写BP

目录 手写BP前言1. 数据加载2. 前向传播3. 反向传播总结 手写BP 前言 手写AI推出的全新面向AI算法的C课程 Algo C&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考。 本次课程主要是手写 BP 代码 课程大纲可看下面的思维导图 1. 数据加载 我们首先来实现下MNIST…...

【Java笔试强训 27】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525; 不用加…...

java紫砂壶交易购物系统 mysql

网络紫砂壶可充通过色彩、图片、说明、设置动画加强了产品了宣传&#xff0c;大大达到了陶瓷业的“色型”要求。实现产品管理方便&#xff0c;起到立竿见影的效果&#xff0c;不用因为更改菜色而重新印刷。只要在后台鼠标轻轻一点&#xff0c;全线马上更新。采用B/S模式&#x…...

7-4 多态练习-计算面积

定义三个类&#xff0c;父类(抽象类)GeometricObject代表几何形状&#xff0c;子类Circle代表圆形&#xff0c;子类Rectangle代表矩形。具体属性和方法如下&#xff1a; 父类 &#xff08;抽象类&#xff09;GeometricObject 属性&#xff1a; private String color; private S…...

很佩服的一个Google大佬,离职了。。

这两天&#xff0c;科技圈又有一个突发的爆款新闻相信不少同学都已经看到了。 那就是75岁的计算机科学家Geoffrey Hinton从谷歌离职了&#xff0c;从而引起了科技界的广泛关注和讨论。 而Hinton自己也证实了这一消息。 提到Geoffrey Hinton这个名字&#xff0c;对于一些了解过…...

【Python习题集1】Python 语言基础知识

python习题 一、实验内容二、实验总结 一、实验内容 1、运用输入输出函数编写程序&#xff0c;将华氏温度转换成摄氏温度。换算公式&#xff1a;C(F-32)*5/9,其中C为摄氏温度&#xff0c;F为华氏温度。 &#xff08;1&#xff09;源代码&#xff1a; ffloat(input(输入华氏温…...

C语言进阶——数据在内存中的存储,你知道吗?

今天我们深度剖析数据在内存中的存储&#xff1a; 重点知识&#xff1a; 1、数据类型详细介绍 2、整形在内存中的存储&#xff1a;原码、反码、补码 3、大小端字节序介绍及判断 4、浮点型在内存中的存储解析 之前我们涉及关于这一部分的知识只是大致的进行讲解&#xff0…...

规则引擎----easy rules

一、规则引擎的作用 将复杂的if else判断剥离出来 二、使用 2.1、引入POM <!--easy rules核心库--><dependency><groupId>org.jeasy</groupId><artifactId>easy-rules-core</artifactId><version>3.3.0</version></depe…...

你手写过一把锁吗?你对轮询缓存怎么看?

当多个线程同时去操作一块内存的数据时如果不做一些限制&#xff0c;极其可能出现数据一致性问题。这时候&#xff0c;我们用一把锁锁住这块数据&#xff0c;持有钥匙者可以进入&#xff0c;不持有者等待钥匙用完再分配。所以在我看来啊&#xff0c;锁的本质就是一个标志位&…...

深入理解 spring-boot-starter-parent

目录 一、前言二、Maven继承三、分析spring-boot-starter-parent四、Maven单继承问题五、不继承spring-boot-starter-parent需要注意的 一、前言 在idea当中创建springboot项目的时候都会继承一个spring-boot-starter-parent作为父类&#xff0c;假如不继承我们的项目就不能使…...

基于SpringBoot的线上日志阅读器

软件特点 部署后能通过浏览器查看线上日志。支持Linux、Windows服务器。采用随机读取的方式&#xff0c;支持大文件的读取。支持实时打印新增的日志&#xff08;类终端&#xff09;。支持日志搜索。 使用手册 基本页面 配置路径 配置日志所在的目录&#xff0c;配置后按回车…...

【Leetcode -405.数字转换为十六进制数 - 409.最长回文串】

Leetcode Leetcode -405.数字转换为十六进制数Leetcode - 409.最长回文串 Leetcode -405.数字转换为十六进制数 题目&#xff1a;给定一个整数&#xff0c;编写一个算法将这个数转换为十六进制数。对于负整数&#xff0c;我们通常使用 补码运算 方法。 注意 : 十六进制中所有…...

剑指 Offer:003 前 n 个数字二进制中 1 的个数

题目&#xff1a; 给定一个非负整数 n&#xff0c;请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数&#xff0c;并输出一个数组 示例&#xff1a; 1、 输入: n 2 输出: [0,1,1] 解释: 0 --> 0 1 --> 1 2 --> 10 2、 输入: n 5 输出: [0,1,1,2,1,2] 解释: 0 …...

DDD系列:二、应用架构设计演变

作用: ​ 通过规定一个固定的架构设计&#xff0c;可以让团队内有一个统一的开发规范&#xff0c;降低沟通成本&#xff0c;提升效率和代码质量。 目标&#xff1a; ​ 在做架构设计时&#xff0c;一个好的架构应该需要实现以下几个目标&#xff1a; 独立于UI&#xff1a;前…...

Spring-IOC

IOC概念和原理 什么是IOC 控制反转&#xff0c;为了将系统的耦合度降低&#xff0c;把对象的创建和对象直接的调用过程权限交给Spring进行管理。 IOC底层原理 XML解析 ​ 通过Java代码解析XML配置文件或者注解得到对应的类的全路径&#xff0c;获取对应的Class类 Class clazz …...

基于Java语言开发B/S架构实现的云HIS

一、云HIS系统框架简介 1、技术框架 &#xff08;1&#xff09;总体框架&#xff1a; SaaS应用&#xff0c;全浏览器访问 前后端分离&#xff0c;多服务协同 服务可拆分&#xff0c;功能易扩展 &#xff08;2&#xff09;技术细节&#xff1a; 前端&#xff1a;AngularNg…...

清洁赛道新势力,米博凭“减法”突围?

在五四青年节这个特殊的日子&#xff0c;方太旗下的高端智能清洁品牌“米博”发布了新一代无滚布洗地机7系列。 5月4日晚&#xff0c;米博以“减法生活&#xff0c;净请7代”为主题&#xff0c;举办了新品发布会。在发布会上&#xff0c;从小红书翻红的董洁作为方太集团米博产…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...