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

[学习笔记]-MyBatis-Plus简介

简介

Mybatis-Plus(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

简言之就是对单表的增删改查有了很好的封装。基本不用再单独写sql语句了。目前此类基于mybats的增强工具有很多,但是目前MP可以算是国内最主流的了。而且它的功能也是最全的。

github地址:https://github.com/baomidou/mybatis-plus

gitee地址:https://gitee.com/baomidou/mybatis-plus

MP初体验

这里我们创建一个测试项目MPDemo来初步体验下如何使用MP。省略创建项目步骤和数据库表创建过程。

1.测试表结构【user】

!(https://img-blog.csdnimg.cn/direct/3ea41e6c315d48bea6ab8b5c2aa41a68.png)

2.springboot三板斧之引入依赖

<dependencies><!-- springboot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- MP最新版本 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!-- mysql 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
</dependencies>

3.springboot三板斧之添加配置

# 数据源配置
spring:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://yourip:3306/yourdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=trueusername: rootpassword: 123456# Mybatis Plus配置
mybatis-plus:configuration:#打印日志log-impl: org.apache.ibatis.logging.stdout.StdOutImpl#下划线转驼峰map-underscore-to-camel-case: true

4.创建user表的实体映射类

@Data
@TableName("user")
public class User implements Serializable {/*** 自增id*/private Long id;/*** 姓名*/private String name;/*** 年龄*/private Integer age;/*** 邮件*/private String email;/*** 地址*/private String address;/*** 创建日期*/private Date createtime;/*** 更新日期*/private Date updatetime;}

5.创建user表的mapper类

//这里仅仅集成MP的BaseMapper即可
public interface UserMapper extends BaseMapper<User> {}

6.springboot三板斧之启动类注释

@SpringBootApplication
@MapperScan("com.mayuanfei.mpdemo.dao.mapper")
public class MpDemoApplication {public static void main(String[] args) {SpringApplication.run(MpDemoApplication.class, args);}
}

这里通过@MapperScan来指定扫描所有mapper的基础包路径。

其实如果Mapper类中如果有@Mapper注解的话,其实在启动类上是不需要增加@MapperScan的。

7.添加测试类

@SpringBootTest
public class MapperTest {@Autowiredprivate UserMapper userMapper;@Testpublic void testInsert() {User user = new User();user.setName("张三");user.setAge(2);user.setEmail("zhangsan@163.com");user.setAddress("北京朝阳");int result = this.userMapper.insert(user);System.out.println("打印插入结果===>" + result);System.out.println("打印插入后user的id值===>" + user.getId());}
}

输出结果:

==>  Preparing: INSERT INTO user ( id, name, age, email, address ) VALUES ( ?, ?, ?, ?, ? )
==> Parameters: 1546670400971255809(Long), 张三(String), 2(Integer), zhangsan@163.com(String), 北京朝阳(String)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7397c6]
打印插入结果===>1
打印插入后user的id值===>1546670400971255809

可能遇到的问题

1.@Autowired标识红色

在这里插入图片描述

原因是:我们通过在启动类添加注释@MapperScan(“com.mayuanfei.mpdemo.dao.mapper”)来扫描所有的mapper类的

但是idea没有发现有具体的注释标识被spring容器所管理,所以这里给出警告。

解决方式有两种:

  • 启动类注释不变,把@Autowired修改为@Resource注解。
  • 启动类去掉@MapperScan(“com.mayuanfei.mpdemo.dao.mapper”),在UserMaper类上加上@Mapper注解。

2.user表中的id值不符合我们的预期

例子中,我们打印出来的user的id值为:1546670400971255809。本来想着应该是1。这是因为MP默认生成id的算法是通过雪花算法来生成的。如果要按照数据库中的自增来生成id需要在实体类增加一个注解:

相关文章:

[学习笔记]-MyBatis-Plus简介

简介 Mybatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 简言之就是对单表的增删改查有了很好的封装。基本不用再单独写sql语句了。目前此类…...

2024.6.23 刷题总结

2024.6.23 **每日一题** 520.检测大写字母&#xff0c;本题是简单模拟题&#xff0c;考察了ASCLL码相关的知识&#xff0c;根据题意&#xff0c;本题对于字符串有三种正确的用法&#xff0c;所以我们分三类来讨论&#xff0c;先根据首字母的大小写来分类&#xff0c;如果首字母…...

mysql查询不同用户(操作记录)的最新一条记录

先用MAX(time) 和 group by item_id 查询出不同的item_id对应的最大时间&#xff0c;然后再在外面连表查询&#xff0c;查询 表中 item_id 和login_time 时间 相等于刚才的查询记录的记录 具体语句如下 select a.* from reyo a join (select item_id,max(login_time) as ti…...

Java中如何使用设计模式来解决编程问题?

Java中使用设计模式来解决编程问题&#xff0c;可以显著提高代码的可复用性、可维护性和可读性。设计模式是一套被广泛应用于软件工程的解决方案&#xff0c;描述了在特定上下文中面对具体问题时的可复用解决方案。以下是几种常用的设计模式及其应用场景&#xff1a; 单例模式…...

单机、集群和分布式

目录 1.概述 2.单机服务器 单机版的服务器的性能&#xff0c;设计上的瓶颈&#xff1f; 3.集群 解决瓶颈1&#xff1a; 没有解决瓶颈2&#xff1a; 没有解决瓶颈3&#xff1a; 集群的优点&#xff1f; 集群的缺点&#xff1f; 4.分布式 分布式的优点&#xff1f; 分…...

qt开发-10_LineEdit

QLineEdit 小部件是一个单行文本编辑器。行编辑允许用户使用一组有用的编辑函数输入和 编辑一行纯文本。包括撤消和重做、剪切和粘贴以及拖放。通过更改行编辑的 echoMode()&#xff0c;它 还可以用作“只写”字段&#xff0c;用于输入如密码等. 创建好项目后&#xff0c;进入 …...

福昕PDF编辑器快速去除PDF水印方法

在福昕PDF编辑器软件中打开一个带有水印的PDF文件&#xff0c;点击如图下所示的页面管理->水印&#xff0c;点击全部移除 点击 是 水印消除&#xff08;注&#xff1a;部分类型的水印可以消除&#xff0c;但是有些类型的水印无法通过此方法消除&#xff09;...

Cloudflare 常用操作

一、域名托管到cloudflare 登录cloudflare->添加站点->填写域名(例如阿里云)->继续选择free套餐->继续->保存cloudflare分配的DNS地址->进入阿里云域名管理->进入DNS管理/DNS修改把DNS地址修改为cloudflare分配的两个DNS->保存->回到cloudflare->…...

elementUI的table使用展开功能( type=“expand“ ),展开时合起上一次展开的内容,始终保持展开内容为一个,并且再次点击合起自身

直接上代码了没什么可讲的,主要是用到 row-key"id" :expand-row-keys"expands row-click"handleRowClick" <template><div class"ele-body"><el-card shadow"never"><!-- 数据表格 --><ele-pro-t…...

【金】?Y? python网页前端streamlit

1、如何从 Google Colab Notebook 启动 streamit参考-How to Launch Streamlit App from Google Colab Notebook !streamlit run web.py & npx localtunnel --port 8501 & curl ipv4.icanhazip.com...

数据仓库之Lambda架构

Lambda架构是一种设计大规模数据处理系统的架构模式&#xff0c;它结合了批处理和实时处理的优点&#xff0c;以应对大数据的多样性、速度和规模问题。该架构主要由三个层次组成&#xff1a;批处理层&#xff08;Batch Layer&#xff09;、速度层&#xff08;Speed Layer&#…...

Apriori 处理ALLElectronics事务数据

通过Apriori算法挖掘以下事务集合的频繁项集&#xff1a; 流程图 代码 # 导入必要的库 from itertools import combinations# 定义Apriori算法函数 def apriori(transactions, min_support, min_confidence):# 遍历数据&#xff0c;统计每个项的支持度 item_support {}for tr…...

Content Provider:深入解析Android数据共享的核心组件

在Android开发中&#xff0c;Content Provider是一个重要的组件&#xff0c;它允许应用程序之间共享数据。它扮演着“数据访问中间层”的角色&#xff0c;为不同应用程序提供了一个统一的数据访问接口。以下将从技术难点、面试官关注点、回答吸引力以及代码举例四个方面&#x…...

069、Python 函数的递归调用

函数可以自己调用自己吗&#xff1f;&#xff1f;&#xff1f; 这就涉及函数的递归的用法了。 递归的概念&#xff1a; 函数递归是指函数在其定义中直接或间接调用自身的过程。 递归是一种强有力的编程技术&#xff0c;通常用于解决可以被分解为相同问题的子问题的情况&…...

数仓开发那些事_番外

一位神州的正式员工&#xff08;没错&#xff0c;就是之前文章中出现的实习生&#xff09;&#xff1a;一闪&#xff0c;你今年涨工资了吗&#xff1f; 一闪&#xff1a;mad&#xff0c;一年辛苦到头只涨了500米 神州员工&#xff1a;你去年绩效不是优秀吗&#xff0c;怎么就涨…...

Vue3+TypeScript项目实战——打造雨雪交加的智慧城市

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…...

经典游戏案例:植物大战僵尸

学习目标&#xff1a;植物大战僵尸核心玩法实现 游戏画面 项目结构目录 部分核心代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using Random UnityEngine.Random;public enum Z…...

Go 与 Java 字符编码选择:UTF-8 与 UTF-16 的较量

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

vscode+picgo+gitee实现Markdown图床

vscode中编辑Markdown文件&#xff0c;复制的图片默认是保存在本地的。当文档上传csdn时&#xff0c;会提示图片无法识别 可以在gitee上创建图床仓库&#xff0c;使用picgo工具上传图片&#xff0c;在Markdown中插入gitee链接的方式来解决该问题。 一、 安装picgo工具 1.1 v…...

【thinkphp问题栏】tp5.0分页技巧

一、调用内置方法paginate thinkphp内置了一个paginate方法支持分页功能 该方法位于library\think\db\Query.php内 /*** 分页查询* param int|array $listRows 每页数量 数组表示配置参数* param int|bool $simple 是否简洁模式或者总记录数* param array $config 配…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...