mybatis-plus1(前言技术)

news2024/11/28 15:45:44

目录

一、Mybatis-plus入门

1.什么是mybatis-plus

2.初体验 

① 准备数据库脚本 

② 初始化工程

③ 编码 

④ 开始使用

3.日志

二、Mybatis-plus主键生成策略

1.更新 

三、Mybatis-plus自动填充

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

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


一、Mybatis-plus入门

1.什么是mybatis-plus

升级版的mybatis,目的是让mybatis更易于使用,用官方的话说"为简化而生"

官网: MyBatis-PlusMyBatis-Plus 官方文档https://baomidou.com/

2.初体验 

① 准备数据库脚本 

数据库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');

如下图所示:

② 初始化工程

创建一个空的 Spring Boot 工程(工程将以 H2 作为默认数据库进行演示)

提示:可以使用 Spring Initializer (opens new window)快速初始化一个 Spring Boot 工程

pom.xml 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.jwj</groupId>
    <artifactId>mplus</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mplus</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <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>
        </dependency>

        <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>
            <version>1.18.16</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置类,application.yml

server.port=8080
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/oapro?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

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

package com.jwj.mplus;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.jwj.mplus.mapper")
@SpringBootApplication
public class MplusApplication {

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

}

③ 编码 

编写实体类User.java

package com.jwj.mplus.model;

import lombok.Data;

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

编写Mapper包下的UserMapper接口

package com.jwj.mplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jwj.mplus.model.User;

public interface UserMapper extends BaseMapper<User> {

}

④ 开始使用

把原有的测试类删除,添加下面的测试类,进行功能测试:

package com.jwj.mplus;

import com.jwj.mplus.mapper.UserMapper;
import com.jwj.mplus.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语句打印到控制台,以便于调式

二、Mybatis-plus主键生成策略

雪花算法

默认的主键生成策略,如果需要保存的实体对象中没有指定的主键值,则默认使用雪花算法来生成

雪花算法的优点:

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.jwj.mplus.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() {
//        1618560817744076802   long数字
        User user = new User();
        user.setAge(19);
        user.setEmail("jwj@qq.com");
        user.setName("jwj");
        user.setId(66L);    //程序员自己控制
       int insert = userMapper.insert(user);
        System.out.println(insert);
    }

测试结果如下:

1.更新 

通过主键更新

SampleTest.java

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

效果如下图所示:

三、Mybatis-plus自动填充

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

在自动填充有两种方式:

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

注意:

生成时间:不需要根据当前时间戳更新

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

测试代码如下:

 @Test
    public void testInsert() {
//        1618560817744076802   long数字
        User user = new User();
        user.setAge(19);
        user.setEmail("jwj@qq.com");
        user.setName("jwj");
//        user.setId(66L);    //程序员自己控制
       int insert = userMapper.insert(user);
        System.out.println(insert);
    }
package com.jwj.mplus.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;
}

 效果如下图所示:

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

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

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

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

package com.jwj.mplus.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;

@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;

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

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

第二步:编写处理类

package com.jwj.mplus.component;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
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 {
//    @TableField(fill = FieldFill.INSERT)
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("lastModifyTime", new Date(), metaObject);

    }

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

测试代码如下

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

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

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

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

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

相关文章

gensim中的word2vec使用

介绍 一句话&#xff0c;GensimGensimGensim中的word2vec类就是用来训练词向量的&#xff0c;这个类实现了词向量训练的两种基本模型skip−gramskip-gramskip−gram和CBOWCBOWCBOW,可以通过后面的参数设置来选择&#xff0c;。但是&#xff0c;在Gensim这个模块中训练词向量的…

什么是盒子模型?

什么是盒子模型&#xff1f; 盒子模型组成有 4 部分,分别为:内容 内边距 外边距(一般不计入盒子实际宽度) 边框 盒子模型有 2 种:标准盒子模型与怪异盒子模型 标准盒子模型content(内容)border(边框)padding(内边距) 怪异盒子模型content(内容)(已经包含了 padding 和 border) …

随手查——Lumerical

Lumerical小白学习的一些记录&#xff0c;以防自己忘记&#xff0c;持续更。。。 快速导航1、如何设置网格2、关于窗口的一些操作&#xff08;1&#xff09;窗口的最大化与复原&#xff08;2&#xff09;窗口的关闭与开启1、如何设置网格 【View】→【Drawing grid】→【Edit …

ctfshow代码审计篇

文章目录web301-SQL注入web302- sql写shellweb303- insertweb304- 报错注入web305- 反序列化蚁剑连接数据库web306- 反序列化web307- shell_exce()web308- ssrf打mysqlweb309- ssrf打fastcgiweb310- ssrffastcfgi写shellweb301-SQL注入 check.php $username$_POST[userid]; $u…

php实现短链接系统

依据第二种算法&#xff0c;URL长连接转短连接实现方法如下&#xff1a; 语言&#xff1a;PHP5.6 服务器环境&#xff1a;LNMP 假设&#xff1a;长连接地址&#xff1a;http://www.test.com/index.php 短连接地址&#xff1a;http://t.test.com/六位code码 第一步&#xff…

Ubuntu18上安装搜狗输入法

一、说明 在ubuntu上安装中文输入法会经常遇到问题。本文是作者经过历次艰苦卓绝的努力后&#xff0c;安装成功的总结。这里稍作记录&#xff0c;以便日后安装时查询。 二、版本选择 注意&#xff1a;目前的搜狗和ubuntu版本是有个配套问题&#xff0c;如下表所列&#xff1a; …

【Typescript学习】使用 React 和 TypeScript 构建web应用(一)预览成品、初始化react项目、常见类型

教程来自freecodeCamp&#xff1a;【英字】使用 React 和 TypeScript 构建应用程序 跟做&#xff0c;仅记录用 其他资料&#xff1a;https://www.freecodecamp.org/chinese/news/learn-typescript-beginners-guide/ 第一天 1 学习目标&#xff08;我个人的&#xff09; 入门 …

开启前端CSS学习之路-css001

&#x1f60a;博主页面&#xff1a;鱿年年 &#x1f449;博主推荐专栏&#xff1a;《WEB前端》&#x1f448; ​&#x1f493;博主格言&#xff1a;追风赶月莫停留&#xff0c;平芜尽处是春山❤️ 目录 前言 一、CSS简介 1.HTML的局限性 2.CSS-网页美容师 3.CSS语法规范…

ccflow 代码

java 工作流的开发框架目录概述需求&#xff1a;设计思路实现思路分析1.工作流参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge S…

十大常见排序算法(java编写)

日升时奋斗&#xff0c;日落时自省 目录 1、插入排序 2、希尔排序 3、选择排序 4、堆排序 5、冒泡排序 6、快速排序 6.1、Hoare法找基准值 6.2、挖坑法找基准值 6.3、快慢指针找中间值 6.4、优化 6.5、非递归排序 7、归并排序 7.1、递归实现 7.2、非递归实现 7.…

车载通信协议-列车实时数据协议(TRDP)

TCNOPEN是一个铁路行业相关的合作伙伴创建的开源的倡议&#xff0c;其目的是建立一些新的或即将出台的铁路标准的关键部分&#xff0c;通常以TCN命名。TCN&#xff08;列车通信网络&#xff09;是IEC&#xff08;国际电工委员会&#xff09;第43工作组制定的一系列国际标准&…

C++学习/温习:新型源码学编程(一)

写在前面 本文约15页&#xff0c;如觉得文章过长请通过左侧边栏或知识点概览目录浏览食用面向初学者撰写专栏&#xff0c;个人原创的学习C/C笔记&#xff08;干货&#xff09;编程练习所作源代码输出内容为中文&#xff0c;便于理解如有错误之处请各位读者指正请读者评论回复、…

Go语言基础突破(一)——基础语法快速上手

文章目录一、本次学习重点内容&#xff1a;二、详细知识点介绍&#xff1a;1、什么是Go语言特点&#xff1a;2、为什么字节跳动全面使用go语言:3、开发环境——安装Golang&#xff1a;4、推荐编辑器&#xff1a;VScode、Goland5、基础语法1、HolleWorld2、基础语法——变量声明…

Ubuntu 玩机笔记

键盘Fn无法切换功能键与多媒体键 终端输入&#xff1a; echo 2 | sudo tee /sys/module/hid_apple/parameters/fnmode然后再长按 FnXL 约四秒即可成功使用Fn切换功能键与多媒体键。 永久生效 以上方法只是输入命令后生效&#xff0c;想要永久生效&#xff0c;可以进行如下操…

深度学习-吴恩达(C5)训练词向量

2.1 词汇表征 上周我们学习了RNN、GRU单元和LSTM单元。本周你会看到我们如何把这些知识用到NLP上&#xff0c;用于自然语言处理&#xff0c;深度学习已经给这一领域带来了革命性的变革。其中一个很关键的概念就是词嵌入&#xff08;word embeddings&#xff09;&#xff0c;这…

手机提供GMS支持(适用安卓和鸿蒙系统)

手机提供GMS支持 - 适用安卓和鸿蒙系统前言方式1&#xff1a;安装GMS套件&#xff08;不推荐&#xff09;方式2&#xff1a;安装OurPlay&#xff08;推荐&#xff09;方式3&#xff1a;安装Gspace&#xff08;推荐&#xff09;前言 本文提供多种为手机&#xff08;安卓和鸿蒙系…

数据库系统概论①——数据库系统基本概念

文章目录1、数据库的相关术语1.1 数据(Data)1.2 数据库(Database,简称DB)1.2.1 数据库的定义&#xff1a;数据库是长期储存在计算机内、有组织的、可共享的数据集合。1.2.2 数据库的特征1.3 数据库管理系统&#xff08;DBMS&#xff09;1.3.1 DBMS的主要功能1.4 数据库系统&…

自己动手写一个操作系统——MBR(4)_调试_elf_bin

文章目录前言elf 文件指定代码入口地址添加调试信息代码检验调试小结前言 通过 GDB 我们可以跟踪程序的执行&#xff0c; 并且能够看到寄存器的状态&#xff0c; 但是&#xff0c;上面这种调试方式&#xff0c;没有和代码对应起来&#xff0c;以致于我们无法直观地知道 CP…

CodeSYS之一EtherNET驱动禾川电机

硬件:HCFA Q0-1100系列CPU X3EB 驱动器, SV-X2MHO40A伺服电机,24V开关电源。 硬件连接: 电机三相线和编码器线接X3EB驱动器,24V电源接X3EB驱动器,驱动器IN网口接 CPUPort2,CPU接24V电源,Port1 接电脑。 这部分有问题可以直接进禾川官网 一、驱动器调试 接好先后,按驱动…

边缘检测、Padding、stride、三维卷积

目录1.边缘检测(edge detection)当我们做物体识别的时候&#xff0c;一般神经网络的前几层会进行边缘检测&#xff0c;然后检测到物体的一部分&#xff0c;最后检测到整个物体。边缘检测例子&#xff1a;垂直边缘检测器&#xff1a;中间的一个3x3的矩阵&#xff0c;我们称之为过…