文章目录

  • 下载地址
    • 1.创建springboot项目(Spring Initializer快速创建)
    • 2.配置文件,数据库等
    • 3.配置,策略,实体类
    • 4.增删改查
      • 查询
        • 查询全部
        • 查询-根据id批量查询
        • 查询-根据map查询
        • 查询-分页查询
        • 查询-wrapper查询
          • 查询name不为空的,并且邮箱不为空的用户,年龄大于21的。(isNotNull--非空 ,ge---大于)
          • 查询 eq(等于)
          • 查询 between and
          • 模糊查询 notLike--not like %x% like--%x% likeRight--x% likeLeft--%x
          • 连接查询
          • 查询排序
      • 新增
        • 主键自增,创建时间修改时间自动插入
      • 修改
        • 修改--乐观锁(修改成功)
        • 修改--乐观锁(修改失败)
      • 删除
        • 删除-map删除
        • 删除-根据idList批量删除
        • 删除-根据id删除

下载地址

天翼云盘下载链接
天翼云盘下载上传不限速,真的特别好用。不知道是不是只有电信用户能用。
百度网盘下载链接
提取码:84pi

1.创建springboot项目(Spring Initializer快速创建)

添加依赖
引入 Spring Boot Starter 父工程

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.0</version><relativePath/>
</parent>

引入 spring-boot-starter、spring-boot-starter-test、mybatis-plus-boot-starter、lombok、mysql、druid,junit

<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>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.6</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>
</dependencies>

2.配置文件,数据库等

这里我使用的是application.yml,数据库的名字叫mybatisplus

server:port: 8080
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8username: rootpassword: 123456# 配置日志
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

创建数据库

创建表和数据

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',`age` int(11) NULL DEFAULT NULL COMMENT '年龄',`email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',`update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间',`version` int(10) NULL DEFAULT 1 COMMENT '乐观锁',`deleted` int(1) NULL DEFAULT 0 COMMENT '是否被删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;INSERT INTO `user` VALUES (1, 'Jone', 18, 'test1@baomidou.com', '2020-11-10 16:23:57', '2020-11-10 16:23:57', 1, 1);
INSERT INTO `user` VALUES (2, 'Jack', 20, 'test2@baomidou.com', '2020-11-10 16:23:57', '2020-11-10 16:23:57', 1, 0);
INSERT INTO `user` VALUES (3, 'Tom', 28, 'test3@baomidou.com', '2020-11-10 16:23:57', '2020-11-10 16:23:57', 1, 0);
INSERT INTO `user` VALUES (4, 'Sandy', 21, 'test4@baomidou.com', '2020-11-10 16:23:57', '2020-11-10 16:23:57', 1, 0);
INSERT INTO `user` VALUES (5, 'Billie', 24, 'test5@baomidou.com', '2020-11-10 16:23:57', '2020-11-10 16:23:57', 1, 0);SET FOREIGN_KEY_CHECKS = 1;

3.配置,策略,实体类

如果有注解不认识的地方,可以百度一下,lombok这个插件很方便的。
(1).创建实体类

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Date;@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {@TableId(type = IdType.AUTO)//主键自增private Long id;//对应数据库中的主键private String name;private Integer age;private String email;@TableLogicprivate Integer deleted;//逻辑删除@Versionprivate Integer version;//乐观锁@TableField(fill = FieldFill.INSERT)private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)private Date updateTime;
}

@AllArgsConstructor------全参构造
@NoArgsConstructor-----无参构造
@Data-----get、set、equals、hashCode、canEqual、toString方法
点击查看注解官方解释
@TableLogic-----表字段逻辑处理注解(逻辑删除)
@Version-----乐观锁注解
@TableId(type = IdType.AUTO)
@TableField-----字段注解
这个注解的idType点进去查看源码,可以发现是一个枚举类,视情况选择。


(2).创建mapper(继承baseMapper,泛型填写对应的实体类)

public interface UserMapper extends BaseMapper<User> {}

(3).创建填充策略
为@tableField创建填充策略

原理:
(1).实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
(2).注解填充字段 @TableField(… fill = FieldFill.INSERT) 生成器策略部分也可以配置

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {//插入时的填充策略@Overridepublic void insertFill(MetaObject metaObject) {log.info("start insert fill....");this.setFieldValByName("createTime",new Date(),metaObject);this.setFieldValByName("updateTime",new Date(),metaObject);}//更新时的填充策略@Overridepublic void updateFill(MetaObject metaObject) {log.info("start update fill....");this.setFieldValByName("updateTime",new Date(),metaObject);}
}

注意事项:
填充原理是直接给entity的属性设置值!!! 注解则是指定该属性在对应情况下必有值,如果无值则入库会是null。
MetaObjectHandler提供的默认方法的策略均为:如果属性有值则不覆盖,如果填充值为null则不填充。
字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段。
填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入。
要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者strictUpdateFill方法。
不需要根据任何来区分可以使用父类的fillStrategy方法。

public enum FieldFill {/*** 默认不处理*/DEFAULT,/*** 插入填充字段*/INSERT,/*** 更新填充字段*/UPDATE,/*** 插入和更新填充字段*/INSERT_UPDATE
}

(4).配置类

import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;@EnableTransactionManagement//事务
@MapperScan("com.qwl.mybatisplus.mapper")//扫描包
@Configuration//配置类
public class MybatisPlusConfig {//注册乐观锁插件@Bean public OptimisticLockerInterceptor optimisticLockerInterceptor() { return new OptimisticLockerInterceptor(); }//分页插件@Beanpublic PaginationInnerInterceptor paginationInnerInterceptor(){return new PaginationInnerInterceptor();}
}

@MapperScan(“com.qwl.mybatisplus.mapper”)----扫描mapper
@EnableTransactionManagement-----添加事务

4.增删改查

使用springboot的测试类进行增删改查

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;@SpringBootTest
class MybatisplusApplicationTests {@Resourceprivate UserMapper userMapper;}

查询

查询全部

    /*** 查询全部*/@Testvoid queryAll() {List<User> list = userMapper.selectList(null);System.out.println(list);}

查询-根据id批量查询

    /***id批量查询*/@Testpublic void testSelectBacthIds(){List<User> list = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));list.forEach(System.out::println);}

查询-根据map查询

    /*** map查询*/@Testpublic void testSelectByMap(){HashMap<String, Object> map = new HashMap<>();map.put("name","jack");List<User> list = userMapper.selectByMap(map);list.forEach(System.out::println);}

查询-分页查询

    /***分页查询*/@Testpublic void testSelectPage(){Page<User> page = new Page<>(2,2);//(pageNumber,pageSize)userMapper.selectPage(page, null);page.getRecords().forEach(System.out::println);}

查询-wrapper查询

查询name不为空的,并且邮箱不为空的用户,年龄大于21的。(isNotNull–非空 ,ge—大于)
    /*** 查询 isNotNull--非空 ge---大于*/@Testvoid queryIsNotNull() {//查询name不为空的,并且邮箱不为空的用户,年龄大于21的QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.isNotNull("name").isNotNull("email").ge("age",21);userMapper.selectList(wrapper).forEach(System.out::println);}

查询 eq(等于)
    /*** 查询 eq*/@Testvoid queryEq() {//查询name为tom的QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.eq("name","Tom");User user = userMapper.selectOne(wrapper);System.out.println(user);}

查询 between and
    /*** 查询 between and*/@Testvoid queryBetweenAnd() {//查询年纪为21~30的QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.between("age",21,30);Integer count = userMapper.selectCount(wrapper);System.out.println(count);}

模糊查询 notLike–not like %x% like–%x% likeRight–x% likeLeft–%x
    /*** 模糊查询 notLike--not like %x%  like--%x% likeRight--x% likeLeft--%x*/@Testvoid queryLike() {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.notLike("name","m").likeRight("email","t");userMapper.selectMaps(wrapper).forEach(System.out::println);}

连接查询
    /*** 连接查询*/@Testvoid queryQueryConnect() {//id在子查询中查出QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.inSql("id","select id from user where id<4");List<Object> list = userMapper.selectObjs(wrapper);list.forEach(System.out::println);}

查询排序
    /*** 查询排序*/@Testvoid queryOrderBy() {//通过id进行排序QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.orderByDesc("id");List<User> list = userMapper.selectList(wrapper);list.forEach(System.out::println);}

新增

主键自增,创建时间修改时间自动插入

    /***插入*/@Testpublic void testInsert(){User user = new User();user.setName("qwl");user.setAge(18);user.setEmail("291532919@qq.com");userMapper.insert(user); //自动生成idSystem.out.println(user.getId());}


修改

修改–乐观锁(修改成功)

    /***修改---乐观锁*/@Testpublic void testUpdate(){User user = userMapper.selectById(8L);user.setName("鹿小葵加油222");user.setAge(88);userMapper.updateById(user);}


修改–乐观锁(修改失败)

    /***修改--乐观锁(修改失败)*/@Testpublic void testOptimisticLocker(){//线程1User u1 = userMapper.selectById(8L);u1.setName("鹿小葵加92号油");u1.setAge(666);//线程2User u2 = userMapper.selectById(8L);u2.setName("鹿小葵加95号油");u2.setAge(666);userMapper.updateById(u2);userMapper.updateById(u1);//更改失败,乐观锁}


删除

数据库有"deleted"字段,采用的是逻辑删除。(0代表未删除,1代表已删除)

删除-map删除

    /*** map删除*/@Testpublic void testDeleteByMap(){HashMap<String, Object> map = new HashMap<>();map.put("id",8L);userMapper.deleteByMap(map);}


删除-根据idList批量删除

    /*** 根据idList批量删除*/@Testpublic void testDeleteBatchIds(){userMapper.deleteBatchIds(Arrays.asList(5L,4L));}


删除-根据id删除

    /*** 根据id删除*/@Testpublic void testDeleteById(){userMapper.deleteById(1);}


springboot(测试类)整合mybatisplus增删改查相关推荐

  1. Spring Boot整合Mybatis-Plus 增删改查+ 分页基本使用完整示例

    写在前面 MyBatis的增强方案确实有不少,甚至有种感觉是现在如果只用 "裸MyBatis",不来点增强插件都不好意思了.这不,在上一篇文章<Spring Boot项目利用 ...

  2. Hibernate 编写测试类,进行增删改查 自动生成表

    1.添加数据 package com.hlg.whd;import org.hibernate.Session; import org.hibernate.SessionFactory; import ...

  3. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  4. 超全流程-idea对springboot+ssm的部署实现增删改查

    由于前段时间完成期末项目,在期末学科里也学到很多,但这里不书写接近2个月没有更新博客, 因为之前有过较为成熟的ssh框架运用以及理解的经验,我打算在寒假学习一下ssm,联合springboot, 学习 ...

  5. springboot+springm vc+mybatis实现增删改查案例!

    大家好,我是雄雄,欢迎关注微信公众号[雄雄的小课堂]. 前言 最近这几天都在看关于springboot的内容,每天新会获得点新收获,并且都总结发在公众号中:最后经过不懈努力,不断查找相关网页,解决各种 ...

  6. ssm整合的增删改查

    maven+ssm+bootstrap实现简单的增删改查 学习完ssm框架以后 做的第一个完整的增删改查 是在博客园找到的一个小demo,我自己稍微修改了一下,加入了bootstrap和mybatis ...

  7. c#利用反射+特性实现简单的实体映射数据库操作类实现自动增删改查(一)

    ///对字段特性的映射类 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

  8. SSHE框架整合(增删改查)

    1.前期准备:jar包(c3p0.jdbc ,各个框架) web.xml文件:spring的   转码的,和Struts2的过滤器 <?xml version="1.0" e ...

  9. java 对增删该查进行测试_java连接mysql增删改查测试通过

    把数据库连接作为一种方法调用实现增删改查 源码参考: import java.sql.*; public class JDBC_Test { // 创建静态全局变量 static Connection ...

最新文章

  1. Codeforces Round #265 (Div. 2) E. Substitutes in Number
  2. ScrollView中嵌套ListView
  3. 【JETSON-NANO】SD卡系统备份克隆
  4. 玩转 VS Code 专栏
  5. 【029】获取选择要素的属性
  6. python数据结构和算法讲解_【学习】python数据结构和算法
  7. Netty之四种常用 IO 模型
  8. java应用商店,API for Java 8
  9. oracle vm virtualbox安装xp,如何在VirtualBox虚拟机中安装XP系统?
  10. 【软件测试】使用C++ Test 进行静态测试
  11. 最新xcode打包IPA(完整详细图文)
  12. 应用matlab快速实现实验对象随机分组,应用MATLAB快速实现实验对象随机分组
  13. centos7搭建单机kafka,开启SASL/PLAIN加密,并使用kafka tool 登录
  14. 窄带高清赋能体育赛事,世界杯高清直播背后的技术变革
  15. 计算机的传播速度和传播速率一样吗,U盘传输速度和什么有关?
  16. Ubuntu Kylin V10安装python3.10.4
  17. 新手看spdlog源码做笔记以及附上简单使用手册
  18. 圆柱体积怎么算立方公式_圆柱体积怎么算 求圆柱体积的公式
  19. Oracle APEX 系列文章3:在阿里云上打造属于你自己的APEX完整开发环境 (安装CentOS, Tomcat, Nginx)
  20. 电子台账:教程目录及软件下载

热门文章

  1. Au 音频效果参考:降噪/修复
  2. namp 渗透测试-安装篇
  3. 老大易主,汽车互联网行业格局变了
  4. Sound Event Detection: A Tutorial 学习笔记
  5. shell命令:tr替换命令
  6. linux 动态库构造函数,Linux动态库函数的详解
  7. chrome断网小游戏实现
  8. 四点建议助您轻松搞定OA系统选型
  9. Mac Python3.9 星际争霸
  10. 改进灰狼优化算法在WSN节点部署中的应用