MybatisPlus(一)

目录

入门:

使用MybatisPlus的基本步骤:

常见注解

常见配置

总结

核心功能

条件构造器

自定义SQL

Service接口

IService接口基本用法

 IService的Lambda查询

 IService的Lambda更新

IService批量新增


入门:

使用MybatisPlus的基本步骤

1.引入MybatisPlus的起步依赖

MyBatisPlus官方提供了starter,其中集成了MybatisMybatisPlus的所有功能,并且实现了自动装配效果。

因此我们可以用MybatisPlusstarter代替Mybatisstarter

<!--MybatisPlus-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>   <version>3.5.3.1</version>
</dependency>

2.定义Mapper

自定义的Mapper继承MybatisPlus提供的BaseMapper接口:

public interface UserMapper extends BaseMapper<User> {
}

常见注解

MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。

MybatisPlus中比较常用的几个注解如下:

@TableName :用来指定表名
@TableName("tb_user")
public class User {
}
@TableId :用来指定表中的主键字段信息
@TableId(value = "id", type = IdType.AUTO)
private Long uid;

        IdType枚举:

•AUTO:数据库自增长
•INPUT:通过set方法自行输入
•ASSIGN_ID:分配 ID,接口IdentifierGenerator的方法nextId来生成id,默认实现类为DefaultIdentifierGenerator雪花算法
@TableField :用来指定表中的普通字段信息
@TableField("username")
private String name;
@TableField("is_married")
private Boolean isMarried;
@TableField("`order`")
private Integer order;
@TableField(exist = false)
private String address;

使用@TableField的常见场景:

•成员变量名与数据库字段名不一致
•成员变量名以is开头,且是布尔值
•成员变量名与数据库关键字冲突
•成员变量是数据库字段

常见配置

MyBatisPlus的配置项继承了MyBatis原生配置和一些自己特有的配置。例如:

mybatis-plus:type-aliases-package: com.itheima.mp.domain.po #别名扫描包mapper-locations: classpath*:/mapper/**/*.xml #Mapper.xml文件地址,默认值configuration:map-underscore-to-camel-case: true #是否开启下划线和驼峰的映射cache-enabled: false #是否开启二级缓存global-config:db-config:id-type: auto #id为雪花算法生成update-strategy: not_null #更新策略:只更新非空字段

总结

MyBatisPlus使用的基本流程是

引入起步依赖
自定义 Mapper 基础 BaseMapper
在实体类上添加注解声明 表信息
application.yml 中根据需要添加配置

核心功能

条件构造器

MyBatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求。

条件构造器的用法:

QueryWrapper LambdaQueryWrapper 通常用来构建 select delete update where 条件部分
    @Testvoid testQueryWrapper(){//1.构建条件查询QueryWrapper<User> wrapper = new QueryWrapper<User>().select("id", "username", "info", "balance").like("username", "l").ge("balance", 100);//2.查询List<User> users = userMapper.selectList(wrapper);users.forEach(System.out::println);}@Testvoid testLambdaQueryWrapper(){//1.构建条件查询LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>().select(User::getId, User::getUsername, User::getInfo, User::getBalance).like(User::getUsername, "l").ge(User::getBalance, 100);//2.查询List<User> users = userMapper.selectList(wrapper);users.forEach(System.out::println);}
UpdateWrapper LambdaUpdateWrapper 通常只有在 set 语句比较特殊才使用
    @Testvoid testUpdateByQueryWrapper(){//1.要更新的数据User user = new User();user.setBalance(2000);//2.更新的条件QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username", "jack");//3.执行更新userMapper.update(user, wrapper);}@Testvoid testUpdateWrapper(){List<Long> ids = List.of(1L,2L,4L);UpdateWrapper<User> wrapper = new UpdateWrapper<User>().setSql("balance = balance - 100").in("id", ids);userMapper.update(null, wrapper);}
尽量使用 LambdaQueryWrapper LambdaUpdateWrapper ,避免硬编码

自定义SQL

我们可以利用MyBatisPlusWrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。

基于 Wrapper 构建 where 条件

 

    @Testvoid testCustomSqlUpdate(){//1.更新数据条件List<Long> ids = List.of(1L,2L,4L);int amount = 200;//2.定义条件QueryWrapper<User> wrapper = new QueryWrapper<User>().in("id", ids);userMapper.updateBalanceByIds(wrapper, amount);}
mapper 方法参数中用 Param 注解声明 wrapper 变量名称,必须是 ew

 

void updateBalanceByIds(@Param("ew") QueryWrapper<User> wrapper, @Param("amount") int amount);
自定义 SQL ,并使用 Wrapper 条件
<update id="updateBalanceByIds">update tb_user set balance = balance - #{amount} ${ew.customSqlSegment}
</update>

Service接口

IService接口基本用法

MPService接口使用流程:

自定义 Service 接口继承 IService 接口

 

public interface IUserService extends IService<User> {}
自定义Service实现类,实现自定义接口并继承ServiceImpl
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {...}
 IServiceLambda查询
        lambdaQuery().like(name != null,User::getUsername,name).eq(status != null,User::getStatus,status).ge(minBalance != null,User::getBalance,minBalance).le(maxBalance != null,User::getBalance,maxBalance).list();
 IServiceLambda更新
        lambdaUpdate().set(User::getBalance, remainBalance).set(remainBalance == 0,User::getStatus, 2).eq(User::getId, id).eq(User::getBalance , user.getBalance()).update();
IService批量新增
普通 for 循环插入
普通for循环逐条插入速度极差,不推荐
IService 的批量插入
MP的批量新增,基于预编译的批处理,性能不错
• 开启rewriteBatchedStatements=true参数
配置jdbc参数,开rewriteBatchedStatements,性能最好

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

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

相关文章

WebSocket程序设计

协议说明 WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。Websocket主要用在B/S架构的应用程序中&#xff0c;在 WebSocket API 中&#xff0c;浏览器和服务器只…

2024全面解析:从零基础到精通的大模型学习路线,非常详细零基础入门到精通,收藏我这一篇就够了

大模型学习路线规划 第一阶段&#xff1a;基础理论入门 目标&#xff1a;了解大模型的基本概念和背景。 内容&#xff1a; 人工智能演进与大模型兴起。 大模型定义及通用人工智能定义。 GPT模型的发展历程。 第二阶段&#xff1a;核心技术解析 目标&#xff1a;深入学习大模…

python 图片转文字、语音转文字、文字转语音保存音频并朗读

一、python图片转文字 1、引言 pytesseract是基于Python的OCR工具&#xff0c; 底层使用的是Google的Tesseract-OCR 引擎&#xff0c;支持识别图片中的文字&#xff0c;支持jpeg, png, gif, bmp, tiff等图片格式 2、环境配置 python3.6PIL库安装Google Tesseract OCR 3、安…

mac下通过brew安装mysql的环境调试

mac安装mysql 打开终端&#xff0c;运行命令&#xff08;必须已经装过homebrew哦&#xff09;&#xff1a; 安装brewbin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"已安装brew直接运行&#xff1a;brew install mysql8.0报…

洛科威岩棉板在生产生活中广泛应用,以优秀表现实现隔热性能最大化

无论是在住宅领域还是工业生产领域&#xff0c;隔热保温都扮演着极其重要的角色&#xff0c;选用的材料是否足够出色&#xff0c;决定了大家居家生活的舒适度&#xff0c;以及生产过程中能耗的高低。近些年来&#xff0c;洛科威岩棉优秀的隔热性能逐渐得到了各行各业的青睐&…

HomeDepot commercedesk 平台EDI自测流程

Home Depot Canada 是一家全球知名的家居建材零售公司&#xff0c;在加拿大拥有多家分店。它是美国的家居建材零售巨头 Home Depot 在加拿大的子公司。Home Depot 主要销售各种家庭装修和建筑材料&#xff0c;包括工具、家具、装饰品、电器等。公司提供广泛的产品选择和专业的顾…

机器学习(二十四):信息增益、独热编码和回归树

一、纯度测量方式——熵 第一步&#xff0c;定义&#xff1a;一个子集里&#xff0c;某一类别的数据在子集中的占比 例如&#xff0c;下图这组输入数据&#xff0c;根据耳朵形状划分为两个子集&#xff0c;尖耳朵子集里&#xff0c;有四只猫&#xff0c;1只狗。则是4/5 第二步…

NVIDIA正偷偷复活卡皇泰坦,性能秒杀5090Ti

PC 硬件圈的瓜年年有&#xff0c;但最近似乎格外的多噢&#xff01; 首先针对 13、14 代酷睿 CPU 不稳定问题&#xff0c;Intel 终于做出了正式回应&#xff1a; 他们在对退回的 CPU 进行大量分析后得出&#xff0c;确认是过高的运行电压和微代码算法错误导致了不稳定情况。 …

2-48 基于matlab的EM算法聚类可视化程序

基于matlab的EM算法聚类可视化程序&#xff0c;通过期望最大化算法&#xff08;EM&#xff09;优化类别间距&#xff0c;使得类别间距最大、类内间距最小。输出聚类前后结果及收敛曲线。程序已调通&#xff0c;可直接运行。 2-48 期望最大化算法&#xff08;EM&#xff09; 聚类…

微信小程序教程002:代码结构介绍和新建小程序页面

文章目录 代码介绍1、小程序代码构成2、小程序页面组成部分3、JSON配置文件的作用3.1 app.json文件3.2 project.config.json文件3.3 sitemap.json文件3.4 页面的.json文件 新建小程序页面WXML和WXSS介绍1、什么是WXML2、什么是WXSS 小程序的JS文件1、JS文件2、小程序中JS文件分…

使用abpcli创建项目时提示数据库迁移失败

问题描述 使用abpcli创建项目时提示数据库迁移失败&#xff01; 解决方案&#xff1a; 1、检查数据库连接字符串 {"ConnectionStrings": {"Default": "serverlocalhost;port3306;databaseAcmeBookStore;userroot;passwordyour_password;"} }2、…

MySQL数据库的DQL的高级数据查询语句

目录 非等值联查&#xff1a; 等值联查&#xff1a; eg&#xff1a;5张表联查 连接查询——left/right/inner join on eg: 连接查询——union Eg&#xff1a; 不去重的并集——union all 子查询&#xff08;内部查询&#xff09; 1、where型子查询 2、from型子查询&a…

微信小程序之用户登录

用户登录是小程序的一个常用功能&#xff0c;当用户在浏览文章想要收藏时&#xff0c;在线上购买商品时&#xff0c;只有用户登录自己账号以后&#xff0c;才可以进一步使用这些功能。此文论述了小程序用户登录功能的设计流程 一、设计思路 1、界面 小程序界面效果如下所示&…

web后端--Spring事务管理

事务也要日志配置 !!!!debug前面记得加空格 logging:level:org.springframework.jdbc.support.JdbcTransactionManager: debugrollbackFor 默认情况下&#xff0c;只有出现RunTimeException才会回滚事务&#xff0c;rollbackfor属性用于控制出现何种异常类型&#xff0c;回滚…

Linux shell编程笔记0

一、shell概述 shell是一个命令行解释器&#xff0c;它接收应用程序/用户命令&#xff0c;然后调用操作系统内核。 shell还是一个功能强大的编程语言&#xff0c;易编写、易调试、灵活性强。 二、shell脚本入门 1.进入编辑模式进入到目录下 vi 文件名称如果是system下的文件…

电子水尺的工作原理

TH-SC24电子水尺&#xff0c;也被称为感应式防汛水尺或水位在线监测仪&#xff0c;是一种专门用于监测河流水域水位变化的高科技设备。它在防汛工作中发挥着至关重要的作用&#xff0c;能够实时、准确地提供水位数据&#xff0c;为防汛决策和应急响应提供有力支持。   工作原…

连续两年入选!得帆信息强势上榜2024 Gartner ICT技术成熟度曲线

近日&#xff0c;国际权威咨询机构Gartner发布了《Hype Cycle for ICT in China, 2024》&#xff08;2024年中国ICT技术成熟度曲线&#xff09;报告。得帆信息连续两年入选低代码应用平台&#xff08;LCAP&#xff09;标杆供应商&#xff08;Sample Vendor&#xff09;。 每年&…

ABAP 无意义的FORM 规范

发现一个极为奇怪的现象&#xff0c;大多数ABAP程序员会在FORM名称前加前缀frm_。 请问这是规范吗&#xff0c;整齐好看吗&#xff0c;又好看在哪里呢。这是哪个师傅教的&#xff0c;意义是什么&#xff1f;而且大多数人就来个frm_get_data与frm_del_data&#xff0c;然后这两…

基于springboot+vue+uniapp的居民健康监测小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

(CVPR-2024)通过多阶段框架和定制的多解码器架构提高扩散模型的训练效率

通过多阶段框架和定制的多解码器架构提高扩散模型的训练效率 Paper Title:Improving Training Efficiency of Diffusion Models via Multi-Stage Framework and Tailored Multi-Decoder Architecture Paper是密歇根大学发表在CVPR 2024的工作 Paper地址 Code地址 Abstract 扩散…