尚医通MyBatis-Plus入门、添加、主键策略(二)

news2024/11/15 4:52:28

目录:

(1)MyBatis-Plus入门案例

(2)MyBatis-Plus-添加和主键生成策略


(1)MyBatis-Plus入门案例

 简介:

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

润物无声 

只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。

效率至上

只需简单配置,即可快速进行 CRUD 操作,从而节省大量时间。

丰富功能

热加载、代码生成、分页、性能分析等功能一应俱全。

MyBatis案例:

 

首先创建表:

 创建springboot项目:

springboot用2.1.1版本:

 

修改版本: 

 

在pom中引入依赖MyBatis-Plus的相关依赖:

<dependencies>
<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>
  <exclusions>
  <exclusion>
  <groupId>org.junit.vintage</groupId>
  <artifactId>junit-vintage-engine</artifactId>
  </exclusion>
  </exclusions>
</dependency>

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

<!--mysql依赖-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok用来简化实体类-->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
  </dependency>
</dependencies>

 配置文件的配置:

在 application.properties 配置文件中添加 MySQL 数据库的相关配置:

spring boot 2.0(内置jdbc5驱动)

#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

 

spring boot 2.1及以上(内置jdbc8驱动)

注意:driver和url的变化

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root

注意:

1、这里的 url 使用了 ?serverTimezone=GMT%2B8 后缀,因为8.0版本的jdbc驱动需要添加这个后缀,否则运行测试用例报告如下错误:

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more

2、这里的 driver-class-name 使用了  com.mysql.cj.jdbc.Driver ,在 jdbc 8 中 建议使用这个驱动,否则运行测试用例的时候会有 WARN 信息

 

创建包 entity 编写实体类 User.java(此处使用了 Lombok 简化代码)@Data会帮助我们生成get set方法

@Data
public class User {
   
private Long id;
   
private String name;
   
private Integer age;
   
private String email;
}

 

创建包 mapper 编写Mapper 接口: UserMapper.java

@Repository
public interface UserMapper extends BaseMapper<User> {
}

 

 

BaseMapper:封装了对数据库基本的增删改查:

 

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹

@SpringBootApplication
@MapperScan
("com.atguigu.demomptest.mapper")
public class DemomptestApplication {

   
public static void main(String[] args) {
        SpringApplication.run(DemomptestApplication.
class, args);
    }

}

测试类:

运行test 

 

 (2)MyBatis-Plus-添加和主键生成策略

可以配置sql的日志:

在配置文件中配置:

#mybatis日志

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

 

添加操作:

 

发现我们没有设置id,数据库的表也没有设置自动增长,但是它自动加了id,它是MyBatisPlus帮助我们生成的id 值 

 

 

MyBatis-Plus默认的主键策略是:ASSIGN_ID (使用了雪花算法)

@TableId(type = IdType.ASSIGN_ID)
private String id;

雪花算法:分布式ID生成器

雪花算法是由Twitter公布的分布式主键生成算法,它能够保证不同表的主键的不重复性,以及相同表的主键的有序性。

核心思想:

长度共64bit(一个long型)。

首先是一个符号位,1bit标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0。

41bit时间截(毫秒级),存储的是时间截的差值(当前时间截 - 开始时间截),结果约等于69.73年。

10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID,可以部署在1024个节点)。

12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID)。

 

优点:整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞,并且效率较高。

 

可以通过注解设置主键策略:不写默认是ASSIGN_ID

 

需要在创建数据表的时候设置主键自增

实体字段中配置 @TableId(type = IdType.AUTO)

@TableId(type = IdType.AUTO)
private Long id;

要想影响所有实体的配置,可以在配置文件中设置全局主键配置

#全局设置主键生成策略
mybatis-plus.global-config.db-config.id-type=auto

 

 

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

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

相关文章

c51单片机烧录程序 控制台显示正在检测目标单片机

问题 c51单片机烧录程序 控制台显示正在检测目标单片机 详细问题 笔者使用单片机型号STC89C52&#xff0c; 进行程序烧录。控制台显示正在检测目标单片机 解决方案 将单片机型号由STC89C52更改为STC89C52RC 即 原因 STC89C52与STC89C52RC属于不同型号&#xff0c;STC89C…

NoSQL数据库原理与应用综合项目——起始篇

NoSQL数据库原理与应用综合项目——起始篇 文章目录NoSQL数据库原理与应用综合项目——起始篇0、 写在前面1、项目说明1.1 项目背景1.2 项目功能2、数据集和数据预处理2.1 数据集2.2 数据预处理2.2.1 图书出版日期字段的处理2.2.2 添加id字段2.2.3 价格字段的处理2.2.4 打折字段…

chatgpt接入微信

背景 chatgpt是一个有趣的、聪明的AI机器人。很多人希望可以把这个机器人接入微信群聊里面。 介绍 本项目&#xff0c;使用python制作了一个微信群聊机器人。 微信群聊机器人群聊里面&#xff0c;被艾特后&#xff0c;会基于被艾特的内容&#xff0c;发送对应的文本。可以使…

CVE-2019-15107 webmin RCE漏洞复现

今天继续给大家介绍渗透测试相关知识&#xff0c;本文主要内容是CVE-2019-15107 webadmin RCE漏洞复现。 免责声明&#xff1a; 本文所介绍的内容仅做学习交流使用&#xff0c;严禁利用文中技术进行非法行为&#xff0c;否则造成一切严重后果自负&#xff01; 再次强调&#xf…

【测绘程序设计】——椭球面弧长计算

椭球面弧长计算主要指——①根据纬度计算子午线弧长(B→X);②由子午线弧长求大地纬度(X→B)。它们主要用在高斯投影之中。本文分享了测绘程序设计——椭球面弧长计算(C#版与Python版),相关源代码(绝对完整,直接运行)及使用示例如下。 目录 Part.Ⅰ 使用示例Chap.Ⅰ …

redis基础

redis是一个基于内存的Key-Value数据库 1.基于内存存储&#xff0c;读写性能高 2.适合存储热点数据&#xff08;热点商品、咨询、新闻&#xff09; 3.NoSQL&#xff0c;不仅仅是SQL&#xff0c;泛指关系数据库 关系型数据库 Mysql Oracle DB2 SQLServer 非关系型数据…

参数化集成测试

我们在开发项目的过程中遇到了复杂的业务需求&#xff0c;测试同学没有办法帮我们覆盖每一个场景&#xff1b;或者是我们自己在做代码功能升级、技改&#xff0c;而不是业务需求的时候&#xff0c;可能没有测试资源帮我们做测试&#xff0c;那这个时候就需要依靠自己的单元测试…

数据结构之树相关概念的知识铺垫

文章目录前言1.树的相关介绍2. 树的表示3.二叉树概念及结构4.二叉树的性质5.二叉树相关概念练习6.总结前言 之前对数组结构中线性结构进行了相关的介绍&#xff0c;本文将开始对非线性结构进行相关的介绍&#xff0c;首先介绍的是树&#xff0c;会围绕树的相关概念进行初步的简…

记住这三个方法,让你的钱越花越多

小狗钱钱 关于作者 本书作者博多•舍费尔&#xff0c;是德国著名的投资 家、企业家、演说家以及畅销书作家。他 人生中曾出现过严重的财务危机&#xff0c;但他凭 着自己的努力&#xff0c;重新获得了财务自甶。这 段经历让他产生了和更多人分享理财知识 的想法&#xff0c;《…

玩以太坊链上项目的必备技能(类型-映射类型-Solidity之旅四)

映射&#xff08;Mapping&#xff09; 说到映射&#xff08;Mapping&#xff09;&#xff0c;有过其它编程语言经验的您&#xff0c;对这是再熟悉不过了。Solidity 中的映射&#xff08;Mapping&#xff09; 与Java的Map、Go里的Map以及javascript的JSON等众多编程语言中的Map…

考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【大数据入门核心技术-ElasticSearch】(一)ElasticSearch介绍

目录 一、什么是Elasticsearch? 二、核心概念 1.倒排索引&#xff08;Inverted Index&#xff09; 2.节点 & 集群&#xff08;Node & Cluster&#xff09; 3.索引&#xff08;Index&#xff09; 4.文档&#xff08;Document&#xff09; 5.类型&#xff08;type…

游戏开发50课 性能优化8

4.2 渲染状态优化 4.2.1 状态缓存 在引擎侧&#xff0c;可以使用状态缓存减少渲染管线的切换。伪代码&#xff1a; class RenderStateCache { public:void InitRenderStates();{for (RenderStateType tRenderStateType.begin; t<RenderStateType.end; i){_renderStateCac…

[附源码]计算机毕业设计基于微信小程序的网络办公系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

微服务框架 SpringCloud微服务架构 微服务保护 31 限流规则 31.3 流控模式【链路】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 微服务保护 文章目录微服务框架微服务保护31 限流规则31.3 流控模式【链路】31.3.1 流控模式 - 链路31.3.2 举个栗子31.3.3 总结31 限流规则…

Vite + Vue3 + Electron 创建打包桌面程序、实现进程通信

目录 1. Electron 介绍 2. 使用 Vite 构建 Electron 项目 2.1 创建 Vite 应用&#xff0c;安装 Electron 依赖 2.2 在 vite.config.ts 中&#xff0c;配置 Electron 入口文件 2.3 编写 electron / index.ts 2.3.1 app、BrowserWindow 2.3.2 使用 win.loadURL 加载窗口 /…

Autosar MCAL-GTM之TOM

文章目录前言定时器输出模块&#xff08;TOM&#xff09;TOM产生PWM的原理TOM中断中断使能中断模式中断映射CFG中TOM通道配置TOM Channel EnableTomChDisableOnTgcTriggerTOM Channel EnableTOM Channel OutputTomChOutputDisableOnTgcTrigTomChannelOutputControlTomChannelOu…

【项目_05】tabcontrol的搭建及回显、使用keep-alive缓存页面、移动端适配 | 基于Vue3全家桶

&#x1f4ad;&#x1f4ad; ✨&#xff1a;tabcontrol的搭建及回显、使用keep-alive缓存页面   &#x1f49f;&#xff1a;东非不开森的主页   &#x1f49c;: 总不能还没努力就向生活妥协吧&#x1f49c;&#x1f49c;   &#x1f338;: 如有错误或不足之处&#xff0c;希…

【双向ConvLSTM Network:遥感融合】

D2TNet: A ConvLSTM Network With Dual-Direction Transfer for Pan-Sharpening &#xff08;D2TNet: 双向传输的卷积长短期记忆递归神经网络用于泛锐化&#xff09; 本文提出了一种高效的具有双向传输的卷积长短期记忆递归神经网络&#xff08;convolutional long short-ter…

Java Agent 探针技术

Java 中的 Agent 技术可以让我们无侵入性的去进行代理&#xff0c;最常用于程序调试、热部署、性能诊断分析等场景&#xff0c;现如今比较火热的分布式链路追踪项目Skywalking&#xff0c;就是通过探针技术去捕获日志&#xff0c;将数据上报OAP观察分析平台。 Java Agent 技术简…