Mybatis-plus(上)

news2024/11/23 17:07:24

1.什么是mybatis-plus

升级版的mybatis,目的是让mybatis更易于使用, 用官方的话说“为简化而生”
官网: https://baomidou.com/
    • 初体验

按照官网中的快速开始即可

1.准备数据库脚本

数据库 Schema 脚本如下:

DROP TABLE IF EXISTS user;
CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主键ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年龄',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (id)
);

其对应的数据库 Data 脚本如下:

DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
  1. 初始化工程

pom.xml

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

application.yml

spring:
  #配置数据源信息系
  datasource:
    #配置数据源类型
    driver-class-name: com.mysql.cj.jdbc.Driver
    #配置连接数据库的个人信息
    url: jdbc:mysql://localhost:3306/oapro?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456

启动类,指定mapper接口的位置

package com.ljj.mp0111.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ljj.mp0111.model.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<User> {

}

3.编码

编写实体类 User.java

import lombok.Data;

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

编写 Mapper 包下的 UserMapper接口

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ljj.mptest01.model.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<User> {

}

4.开始使用

添加测试类,进行功能测试:

package com.ljj.mp0111;

import com.ljj.mp0111.mapper.UserMapper;
import com.ljj.mp0111.model.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class SampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        System.out.println(("----- selectAll method test ------"));
        List<User> userList = userMapper.selectList(null);
        userList.forEach(System.out::println);
    }

}

3.日志

application.properties

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

在开发中将sql语句打印到控制台,以便于调试

4.主键生成策略

雪花算法

默认的主键生策略,如果需要保存的实体对象中没有指定的主键值,则默认使用雪花算法来生成
雪花优点:
1.全局唯一
2.可以排序
uuid:全局唯一,不可以排序
自动增长:做不到全局唯一 可以排序

自增ID

数据库的字段必须是配置了自增
对应的实体的主键字段加入自增注解: @TableId(type = IdType.AUTO)

其他类型:

public enum IdType {
AUTO(0), //自动增长
NONE(1), //未设置主键
INPUT(2), //手动输入
ASSIGN_ID(3), //雪花算法
ASSIGN_UUID(4); //排除到下划线的UUID,32位长度
private final int key;

private IdType(int key) {
this.key = key;
}

public int getKey() {
return this.key;
}
}

测试代码

package com.ljj.mptest01.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

@Data
public class User {
// @TableId(type = IdType.AUTO) 数据库自增
// @TableId(type = IdType.ASSIGN_ID) 默认雪花算法
@TableId(type = IdType.INPUT) // 程序员自己控制
private Long id;
private String name;
private Integer age;
private String email;
}

SampleTest.java

@Test
public void testInsert() {
User user = new User();
user.setAge(18);
user.setEmail(" javaxl@qq.com");
user.setName("javaxl");
// user.setId(66L); // 程序员自己控制
userMapper.insert(user);
}

不更改最原始的model层 测试方法默认就会

使用雪花算法

测试结果如下:

数据库自增

同时数据库中的对应表也开启自增 否则会报错

执行结果:+1

自定义

执行结果:

5.更新

通过主键更新

SampleTest.java

@Test
    public void testUpdate() {
        User user = new User();
        user.setId(66L);
        //ID用于定位sql,其他的列段设置几个就修改几个,没有设置的则保留原来的值
        user.setName("小刘");
        user.setAge(24);
        int i = userMapper.updateById(user);
        System.out.println(i);
    }

6.自动填充

在数据表的设计中,经常需要加一些字段,如:创建时间,最后修改时间等,此时可以使用mybatis-plus来帮我们进行自动维护

在自动填充有两种方式:

一: 通过数据库完成自动填充

注意:CURRENT_TIMESTAMP

生成时间:不需要根据当前时间戳更新
最后修改时间:需要根据当前时间戳更新

测试代码如下

@Test
    public void testInsert() {
        User user = new User();
        user.setAge(18);
        user.setEmail("javaxl@qq.com");
        user.setName("javaxl");
        userMapper.insert(user);
    }
@Data
public class User {
//    @TableId(type = IdType.AUTO)  数据库自增
//    @TableId(type = IdType.ASSIGN_ID) 默认雪花算法
//    @TableId(type = IdType.INPUT)   // 程序员自己控制
    private Long id;
    private String name;
    private Integer age;
    private String email;
    //在代码中同步加入创建时间和最后修改时间的维护
    private Date createTime;
    private Date lastModifiedTime;
}

结果如下:

首次新增效果

完成后可以通过新增或更新

更新:

二:使用程序完成自动填充

将数据库中的自动维护功能取消:

第一步:实体类中加入注解

package com.ljj.mp0111.model;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;

import java.util.Date;

@Data
public class User {
    //    @TableId(type = IdType.ASSIGN_ID) 默认雪花算法
//    @TableId(type = IdType.AUTO)  //数据库自增
//        @TableId(type = IdType.INPUT)   // 程序员自己控制
    private Long id;
    private String name;
    private Integer age;
    private String email;
    //在代码中同步加入创建时间和最后修改时间的维护
//    private Date createTime;
//    private Date lastModifiedTime;

    //表明在插入时自动维护字段
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    //表明在插入和更新时自动维护字段
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date lastModifyTime;
}

第二步:编写处理类

package com.ljj.mp0111.component;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

// 不要忘了处理器是spring的组件
@Component
public class AutoFillHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("lastModifyTime", new Date(), metaObject);

    }

    @Override
    public void updateFill(MetaObject metaObject) {
    //this.setFieldValByName("createTime",new Date(), metaObject);
        this.setFieldValByName("lastModifyTime", new Date(), metaObject);
    }
}

测试代码如下

@Test
    public void testInsert() {
//        1613094385287696385
        User user = new User();
        user.setAge(18);
        user.setEmail("javaxl@qq.com");
        user.setName("javaxl");
//        user.setId(66L); // 程序员自己控制
        int insert = userMapper.insert(user);
        System.out.println(insert);
    }

    @Test
    public void testUpdate() {
        User user = new User();
        user.setId(1613454651141697538L);
        //ID用于定位sql,其他的列段设置几个就修改几个,没有设置的则保留原来的值
        user.setName("小刘3");
        user.setAge(247);
        int i = userMapper.updateById(user);
        System.out.println(i);
    }

执行效果:

新增

更新

一般公司里都是选用程序来操作维护我们的这种数据 而不会选择去更改表的设计

ok 本期内容到此结束啦 Mybatis-plus第二期将介绍它的乐观锁以及条件查询和分页查询,逻辑删除,使用xml配置等...

我们下期见!

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

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

相关文章

javaWeb RequestResponse

Request Request 继承体系 Tomcat解析请求数据&#xff0c;封装为request对象&#xff0c;并且创建request对象传递到service方法中 。Java提供了接口&#xff0c;tomcat的RequestFacade提供了实现。 Request 获取请求数据 请求数据分为3部分&#xff1a; 请求行&#xff…

一台手机即可完成 3D 建模,功能有多强大? #Luma AI

AIGC 的出现拓展了内容生产的诸多可能&#xff0c;借助 AI 技术来进行 3D 建模&#xff0c;可以节省不少的时间&#xff0c;市面上也出现了许多功能强大的 3D 建模工具。1 月 9 日&#xff0c;AppStore 上架了一款名为“Luma AI”的软件&#xff0c;能够将现实中的 2D 照片快速…

通过Terraform创建GCP Pubsub

1 简介 Terraform是管理许多平台的基础设施的工具&#xff0c;如AWS、GCP和Azure。这篇文章将讲解如何通过Terraform来管理GCP Pub/Sub。 创建GCP项目请参考&#xff1a;初始化一个GCP项目并用gcloud访问操作 2 Terraform创建Pub/Sub 2.1 下载Terraform插件 我们需要安装G…

【Blende UV映射01】创建UV 使用UV贴图处理纹理

写在前面 这是进行云渲染的最后一步&#xff0c;实践&#xff01;&#xff01; 会跟着这个Blender 2.8 UV Mapping教程快速学习一边UV映射的东西&#xff0c;已经是最最最最基础的了。 本文是教程的P1-P7的过程记录。 1 UV映射 拿一个3D物体&#xff0c;怎么去切割它&…

1301. C 循环(扩展欧几里得算法)

题目如下&#xff1a; 思路 or 题解: 抽象出数学公式&#xff1a; ak∗c≡b(mod1<<k)a k * c \equiv b (mod\ 1 << k)ak∗c≡b(mod 1<<k) 等价&#xff1a; x∗c−y∗(1<<k)b−ax * c - y * (1 << k) b - ax∗c−y∗(1<<k)b−a 用扩展欧…

[Python逆向] 逆向Pyinstaller打包的exe文件源码及保护

Python逆向Pyinstaller打包的exe文件源码及保护 写在前面 我们都知道可以使用Pyinstaller库可将.py文件编译成.exe文件运行&#xff0c;这篇文章我们就从将脚本编译成.exe并将.exe的源码内容反编译出源文件&#xff0c;再顺便谈谈如何防止被逆向。 环境工具 Python 3.6&#x…

(一)MicroPython——WIFI点灯

目录 学习目标 成果展示 硬件知识 代码 总结 学习目标 成果展示 预备知识 代码 总结 学习目标 我们今天来学习有关MicroPython的知识点&#xff0c;相比于用C语言来开发&#xff0c;MicroPython有许多的优点&#xff0c;比如可以交互&#xff0c;有大量的库可以调…

Allegro如何把快速BUS组高亮成不同颜色操作指导

Allegro如何把快速BUS组高亮成不同颜色操作指导 在做PCB设计的时候,会需要把BUS组高亮成不同颜色,方便评估与布线,Allegro支持快速把BUS高亮成不同的颜色,如下图 具体操作如下 打开颜色管理器出现颜色管理器

1576_AURIX_TC275_MTU控制与状态寄存器

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 在这一页之前&#xff0c;连续有好几个寄存器都是预留的&#xff0c;因此可以直接跳过。访问使能寄存器的功能&#xff0c;从描述看其实是非常熟悉的&#xff0c;因为这个描述的模板可以从…

Java多线程:线程通信:生产者 和 消费者 || 顺序打印

Java多线程&#xff1a;线程通信&#xff1a;生产者 和 消费者 || 顺序打印 每博一文案 靠谱&#xff0c;是最高级的聪明&#xff1a;师父说&#xff1a;人生一回&#xff0c;道义一场。你对人对事的态度&#xff0c;藏着你一生的福报。 千金难买好人缘&#xff0c;人活的就是…

Android编译Skia库

Android编译Skia库 本文档提供两种方法编译Skia库 使用aosp源码进行编译使用skia源码进行编译 两种编译方法都可以编译,并且都可以使用在多个平台中,且可以使用在不同Android版本中 使用aosp源码编译 第一步是拿到aosp的源码.因为写这篇教程,使用的是msm8996的源码,因此,我…

Armitage图形化前端

开源免费图形前端 ● 作者自称是众多不会使用metasploit的安全专家之一&#xff08;命令行&#xff09; ● MSF基于命令行&#xff0c;缺少直观的GUI图形用户接口 Armitage只是调用MSF的漏洞利用能力 ● Armitage的每一个GUI操作都可以对应MSF中的一条命令 红队团队合作模拟…

OSCP vulhub LORD OF THE ROOT: 1.0.1

vulhub LORD OF THE ROOT: 1.0.1靶场信息&安装Description一、信息收集第一种ssh爆破第二种猜二、漏洞探测三、漏洞利用四、提权第二种方法&#xff1a;udf提权第三种缓冲区溢出提权靶场信息&安装 地址&#xff1a;https://www.vulnhub.com/entry/lord-of-the-root-10…

APSIM练习:向管理组件添加额外规则

“标准”作物管理组件没有提供很多选项来决定何时播种作物——很可能应该考虑一系列额外的种植规则&#xff08;例如&#xff0c;土壤是否足够干燥以驱动拖拉机过去&#xff1f;&#xff09;&#xff0c;并且在播种时应采取额外措施&#xff08;例如添加一些肥料&#xff09;。…

Tofu目标识别跟踪模块介绍

1.简介Tofu3 是多波段视频物体识别跟踪模块&#xff0c;支持可见光视频与红外视频的输入&#xff0c;支持激光补光变焦自适应控制&#xff0c;支持视频下的多类型物体检测、识别、跟踪等功能。产品支持视频编码、设备管理、目标检测、深度学习识别、跟踪等功能&#xff0c;提供…

服务器防勒索病毒场景分析经验分享

服务器防勒索病毒 l 场景描述 互联网飞速发展&#xff0c;各企业均搭建了自己的服务器。包括文件服务器、代码服务器、业务系统服务器、数据库服务器等。目前大多数企业使用的服务器系统以Windows Server和Linux&#xff08;Centos&#xff09;居多&#xff0c;但随着国产操作…

python从入门到实践————图形界面(上)

系列文章目录 文章目录系列文章目录前言窗体组件窗体显示显示窗体文本显示项目实践总结前言 图形用户接口&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;是人机交互的重要技术手段&#xff0c;在Python中利用tkinter模块就可以方便地实现图形界面。 在你p…

每日一题:Leetcode203 移除链表元素

文章目录 系列&#xff1a;链表专练 语言&#xff1a;java & go 题目来源&#xff1a;Leetcode203 移除链表元素 难度&#xff1a;简单 考点&#xff1a;头结点 && 虚拟头结点 思路和参考答案文章目录题目描述思路java参考代码go参考代码&#xff1a;题目描述 给…

xcelium——重要特性——提高编译仿真性能

以下图片来自于CadenceTECHTALK研讨会 解决编译仿真的瓶颈问题&#xff0c;提高整体性能 影响performance的因素 xcelium版本access rwccoverage收集snapshot过大&#xff0c;加载时间过长&#xff0c;可通过Zlib加快加快snapshot加载 编译/仿真添加选项&#xff1a; -new…

如何检查自己电脑是否被攻击了?

数据来源 本文仅用于信息安全的学习&#xff0c;请遵守相关法律法规&#xff0c;严禁用于非法途径。若观众因此作出任何危害网络安全的行为&#xff0c;后果自负&#xff0c;与本人无关。 通过系统命令排查账户安全 query user # 查看当前登录账户 lo…