springboot(测试类)整合mybatisplus增删改查
文章目录
- 下载地址
- 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增删改查相关推荐
- Spring Boot整合Mybatis-Plus 增删改查+ 分页基本使用完整示例
写在前面 MyBatis的增强方案确实有不少,甚至有种感觉是现在如果只用 "裸MyBatis",不来点增强插件都不好意思了.这不,在上一篇文章<Spring Boot项目利用 ...
- Hibernate 编写测试类,进行增删改查 自动生成表
1.添加数据 package com.hlg.whd;import org.hibernate.Session; import org.hibernate.SessionFactory; import ...
- spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...
- 超全流程-idea对springboot+ssm的部署实现增删改查
由于前段时间完成期末项目,在期末学科里也学到很多,但这里不书写接近2个月没有更新博客, 因为之前有过较为成熟的ssh框架运用以及理解的经验,我打算在寒假学习一下ssm,联合springboot, 学习 ...
- springboot+springm vc+mybatis实现增删改查案例!
大家好,我是雄雄,欢迎关注微信公众号[雄雄的小课堂]. 前言 最近这几天都在看关于springboot的内容,每天新会获得点新收获,并且都总结发在公众号中:最后经过不懈努力,不断查找相关网页,解决各种 ...
- ssm整合的增删改查
maven+ssm+bootstrap实现简单的增删改查 学习完ssm框架以后 做的第一个完整的增删改查 是在博客园找到的一个小demo,我自己稍微修改了一下,加入了bootstrap和mybatis ...
- c#利用反射+特性实现简单的实体映射数据库操作类实现自动增删改查(一)
///对字段特性的映射类 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...
- SSHE框架整合(增删改查)
1.前期准备:jar包(c3p0.jdbc ,各个框架) web.xml文件:spring的 转码的,和Struts2的过滤器 <?xml version="1.0" e ...
- java 对增删该查进行测试_java连接mysql增删改查测试通过
把数据库连接作为一种方法调用实现增删改查 源码参考: import java.sql.*; public class JDBC_Test { // 创建静态全局变量 static Connection ...
最新文章
- Codeforces Round #265 (Div. 2) E. Substitutes in Number
- ScrollView中嵌套ListView
- 【JETSON-NANO】SD卡系统备份克隆
- 玩转 VS Code 专栏
- 【029】获取选择要素的属性
- python数据结构和算法讲解_【学习】python数据结构和算法
- Netty之四种常用 IO 模型
- java应用商店,API for Java 8
- oracle vm virtualbox安装xp,如何在VirtualBox虚拟机中安装XP系统?
- 【软件测试】使用C++ Test 进行静态测试
- 最新xcode打包IPA(完整详细图文)
- 应用matlab快速实现实验对象随机分组,应用MATLAB快速实现实验对象随机分组
- centos7搭建单机kafka,开启SASL/PLAIN加密,并使用kafka tool 登录
- 窄带高清赋能体育赛事,世界杯高清直播背后的技术变革
- 计算机的传播速度和传播速率一样吗,U盘传输速度和什么有关?
- Ubuntu Kylin V10安装python3.10.4
- 新手看spdlog源码做笔记以及附上简单使用手册
- 圆柱体积怎么算立方公式_圆柱体积怎么算 求圆柱体积的公式
- Oracle APEX 系列文章3:在阿里云上打造属于你自己的APEX完整开发环境 (安装CentOS, Tomcat, Nginx)
- 电子台账:教程目录及软件下载