SpringBoot整合Mybatis-plus实现增删查改

今天给大家分享一下SpringBoot整合Mybatis-plus的增删查改案例。

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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>mybatis-plus-samples</artifactId><groupId>com.baomidou.mybaitsplus</groupId><version>0.0.1-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>mybatis-plus-sample-crud</artifactId><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><scope>provided</scope></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>3.8.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

MybatisPlusConfig.java

package com.baomidou.mybatisplus.samples.crud.config;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;/*** @author miemie* @since 2018-08-10*/
@Configuration
@MapperScan("com.baomidou.mybatisplus.samples.crud.mapper")
public class MybatisPlusConfig {}

User.java

package com.baomidou.mybatisplus.samples.crud.entity;import lombok.Data;
import lombok.experimental.Accessors;/*** <p>* 用户实体对应表 user* </p>** @author hubin* @since 2018-08-11*/
@Data
@Accessors(chain = true)
public class User {private Long id;private String name;private Integer age;private String email;
}

UserMapper.java

package com.baomidou.mybatisplus.samples.crud.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.samples.crud.entity.User;/*** <p>* MP 支持不需要 UserMapper.xml 这个模块演示内置 CRUD 咱们就不要 XML 部分了* </p>** @author hubin* @since 2018-08-11*/
public interface UserMapper extends BaseMapper<User> {}

CrudApplication.java

package com.baomidou.mybatisplus.samples.crud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class CrudApplication {public static void main(String[] args) {SpringApplication.run(CrudApplication.class, args);}
}

resources/db/data-h2.sql

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');

resources/db/schema-h2.sql

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

application.yaml

# DataSource Config
spring:datasource:driver-class-name: com.p6spy.engine.spy.P6SpyDriverschema: classpath:db/schema-h2.sqldata: classpath:db/data-h2.sqlurl: jdbc:p6spy:h2:mem:testusername: rootpassword: test# Logger Config
logging:level:com.baomidou.mybatisplus.samples: debug
# MyBatis-Plus 配置该演示无

spy.properties

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,batch,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

SimpleTest.java

package com.baomidou.mybatisplus.samples.crud;import static org.assertj.core.api.Assertions.assertThat;import java.util.List;
import java.util.Map;import javax.annotation.Resource;import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.samples.crud.entity.User;
import com.baomidou.mybatisplus.samples.crud.mapper.UserMapper;/*** <p>* 内置 CRUD 演示* </p>** @author hubin* @since 2018-08-11*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class SampleTest {@Resourceprivate UserMapper mapper;@Testpublic void aInsert() {User user = new User();user.setName("小羊");user.setAge(3);user.setEmail("abc@mp.com");assertThat(mapper.insert(user)).isGreaterThan(0);// 成功直接拿会写的 IDassertThat(user.getId()).isNotNull();}@Testpublic void bDelete() {assertThat(mapper.deleteById(3L)).isGreaterThan(0);assertThat(mapper.delete(new QueryWrapper<User>().lambda().eq(User::getName, "Sandy"))).isGreaterThan(0);}@Testpublic void cUpdate() {assertThat(mapper.updateById(new User().setId(1L).setEmail("ab@c.c"))).isGreaterThan(0);assertThat(mapper.update(new User().setName("mp"),Wrappers.<User>lambdaUpdate().set(User::getAge, 3).eq(User::getId, 2))).isGreaterThan(0);User user = mapper.selectById(2);assertThat(user.getAge()).isEqualTo(3);assertThat(user.getName()).isEqualTo("mp");mapper.update(null,Wrappers.<User>lambdaUpdate().set(User::getEmail, null).eq(User::getId, 2));assertThat(mapper.selectById(1).getEmail()).isEqualTo("ab@c.c");user = mapper.selectById(2);assertThat(user.getEmail()).isNull();assertThat(user.getName()).isEqualTo("mp");mapper.update(new User().setEmail("miemie@baomidou.com"),new QueryWrapper<User>().lambda().eq(User::getId, 2));user = mapper.selectById(2);assertThat(user.getEmail()).isEqualTo("miemie@baomidou.com");mapper.update(new User().setEmail("miemie2@baomidou.com"),Wrappers.<User>lambdaUpdate().set(User::getAge, null).eq(User::getId, 2));user = mapper.selectById(2);assertThat(user.getEmail()).isEqualTo("miemie2@baomidou.com");assertThat(user.getAge()).isNull();}@Testpublic void dSelect() {mapper.insert(new User().setId(10086L).setName("miemie").setEmail("miemie@baomidou.com").setAge(3));assertThat(mapper.selectById(10086L).getEmail()).isEqualTo("miemie@baomidou.com");User user = mapper.selectOne(new QueryWrapper<User>().lambda().eq(User::getId, 10086));assertThat(user.getName()).isEqualTo("miemie");assertThat(user.getAge()).isEqualTo(3);mapper.selectList(Wrappers.<User>lambdaQuery().select(User::getId)).forEach(x -> {assertThat(x.getId()).isNotNull();assertThat(x.getEmail()).isNull();assertThat(x.getName()).isNull();assertThat(x.getAge()).isNull();});mapper.selectList(new QueryWrapper<User>().select("id","name")).forEach(x -> {assertThat(x.getId()).isNotNull();assertThat(x.getEmail()).isNull();assertThat(x.getName()).isNotNull();assertThat(x.getAge()).isNull();});}@Testpublic void orderBy() {List<User> users = mapper.selectList(Wrappers.<User>query().orderByAsc("age"));assertThat(users).isNotEmpty();}@Testpublic void selectMaps() {List<Map<String, Object>> mapList = mapper.selectMaps(Wrappers.<User>query().orderByAsc("age"));assertThat(mapList).isNotEmpty();assertThat(mapList.get(0)).isNotEmpty();System.out.println(mapList.get(0));}@Testpublic void selectMapsPage() {IPage<Map<String, Object>> page = mapper.selectMapsPage(new Page<>(1, 5), Wrappers.<User>query().orderByAsc("age"));assertThat(page).isNotNull();assertThat(page.getRecords()).isNotEmpty();assertThat(page.getRecords().get(0)).isNotEmpty();System.out.println(page.getRecords().get(0));}@Testpublic void orderByLambda() {List<User> users = mapper.selectList(Wrappers.<User>lambdaQuery().orderByAsc(User::getAge));assertThat(users).isNotEmpty();}@Testpublic void testSelectMaxId() {QueryWrapper<User> wrapper = new QueryWrapper<>();wrapper.select("max(id) as id");User user = mapper.selectOne(wrapper);System.out.println("maxId=" + user.getId());List<User> users = mapper.selectList(Wrappers.<User>lambdaQuery().orderByDesc(User::getId));Assert.assertEquals(user.getId().longValue(), users.get(0).getId().longValue());}
}

以上就是Mybatis-Plus的简单的增删查改。

部分内容来自网络,有问题可以在下面评论,技术问题可以私聊我。

QQ技术交流群:213365178

转载于:https://www.cnblogs.com/c1024/p/11012019.html

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

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

相关文章

Web Service security UserNameToken 使用

一: Web Service security UserNameToken 概念 原理&#xff1a;用户在发送请求的时候&#xff0c;在Soap head中加入自己的用户名以及密码&#xff0c;接受请求的Service通过之前与Client建立的共享密码来验证密码的合法性从而实现鉴别用户的功能。 <wsse:UsernameToken>…

使用Mule ESB与Groovy编排RESTful服务【转】很适合我们当前的架构

http://www.infoq.com/cn/articles/restful-services-mule 在过去几年中&#xff0c;REST风格的软件架构获得了越来越多的认可&#xff0c;这主要是因为它减少了系统对动件的需求、同时使系统耦合性更低&#xff0c;弹性更好。 目前越来越多的REST资源出现在企业应用中&#xf…

《领域驱动设计》第二部分:模型驱动设计的构造块 第四章:分离领域 阅读笔记...

内容概述 将领域对象与系统中的其他功能分离 第一小节 介绍了分离领域的技术&#xff1a;Layered Architecture。 第二小节 指出大部分软件系统都会采用分层的架构&#xff0c;但是分层方案有很多种。领域驱动设计只要求领域层存在即可&#xff0c;并且领域模型在领域层中表现不…

Starling框架帮助手册中文版(PDF下载)

什么是Statling&#xff1f;Starling 是一个基于Stage3D&#xff08;这是Flash Player11及Adobe AIR 3中新增的为3D加速功能所提供的API&#xff09;所开发的一个能够使用GPU来加速的2D Flash应用程序的ActionScript3框架。Starling主要是为游戏开发而设计的, 但是它的用途不仅…

在X32与X64下,每种数据类型占用的字节数

在X32与X64下&#xff0c;每种数据类型占用的字节数分别如下&#xff1a; X32 X64 指针 4Byte 8Byte char 1Byte …

一个Setup Factory的Lua脚本

需求是把安装路径中的反斜杠转义成斜杠并写入到配置文件特定的地方去。 读取配置文件 由于配置文件不大 一次性的读入到内存中 local f io.input(SessionVar.Expand("%AppFolder%\\Common\\conf.xml"), "r");local r f:read("*all");io.close()…

20190501-编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串...

题目描述 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1: 输入: ["flower","flow","flight"] 输出: "fl" 示例 2: 输入: ["dog","racecar"…

MySQL幻读及解决方法

这是一篇数据库隔离级别的科普文章&#xff0c;旨在了解数据库中著名的幻读现象&#xff0c;为了专注&#xff0c;对脏读、不可重复读不作讨论。 事务隔离级别 MySQL有四级事务隔离级别: 读未提交 READ-UNCOMMITTED&#xff1a; 存在脏读&#xff0c;不可重复读&#xff0c;幻…

SVN trunk branches tags 的用法 - 摘自网络

Subversion有一个很标准的目录结构&#xff0c;是这样的。比如项目是proj&#xff0c;svn地址为svn://proj/&#xff0c;那么标准的svn布局是svn://proj/|-trunk-branches-tags这是一个标准的布局&#xff0c;trunk为主开发目录&#xff0c;branches为分支开发目录&#xff0c;…

数据结构学习方法

在网上搜集到的数据结构学习方法&#xff0c;请同学们参考。 谈数据结构学习方法&#xff08;转帖&#xff09;我在这里只是谈谈自己的学习体会现在咱们学的的数据结构是C版本的 所以C的一些基础知识应该先看会 尤其是指针那一部分 很多人对指针只是一知半解 由于一直对指针概念…

UIPickerView基本使用

UIPickerView是很常用的一个UI控件&#xff0c;在各种购物平台选择地址时候都是必备的&#xff0c;下面我们来说一下具体的使用 首先UIPickerView的创建&#xff0c;与多数控件一样&#xff0c;分配内存并设置位置尺寸。 重要的的是代理与数据源&#xff0c;设置代理和数据源后…

幻读和不可重复读

MySQL MySQL默认的隔离级别为RR&#xff0c;因此只会出现幻读的情况。 不会出现不可重复读的问题。 幻读 事务在插入已经检查过不存在的记录时&#xff0c;惊奇的发现这些数据已经存在了&#xff0c;之前的检测获取到的数据如同鬼影一般。 例子&#xff1a; 在事务1中&…

优化php效率,提高php性能的一些方法

1、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下&#xff0c;尽量用 file_get_contents&#xff0c;因为他的效率高得多&#xff01;但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题&#xff1b; 2、尽量的少进行文件操作&#x…

园区网VLAN应用实例

园区环境&#xff1a;一台核心路由器&#xff0c;一台核心交换机&#xff1b;四台汇聚层交换机&#xff1b;四台接入层交换机&#xff08;可根据实际需求和带宽的大小增加接入层的数量&#xff09;——接入层下接入大量的PC机。技术要求&#xff1a;通过VLAN的划分及VTP的设置实…

java 检查进程是否存在

以nginx进程为例子 private final static String NAME_STRING "nginx.exe";//传入进程名称processNamepublic static boolean findProcess() {BufferedReader bufferedReader null;try {Process proc Runtime.getRuntime().exec("tasklist -fi " "…

2021年简单总结

2021年的余额还有不到6小时就要结束了&#xff0c;在这辞旧迎新的时刻&#xff0c;心情是十分复杂的。2021年还是比较艰辛的&#xff0c;不管在工作、生活、家庭、养育小孩或亲戚往来方面&#xff0c;遇到的困难远远地超过了我的预期&#xff0c;但是也收获了很多&#xff0c;包…

3450

/* KMP来做532ms */// include file #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <cctype> #include <ctime>#include <iostream> #include <sstream> #include <fstream> #in…

GMF 教程 Mindmap 5

2019独角兽企业重金招聘Python工程师标准>>> 这一部分主要实现的是&#xff1a; 使用扩展的Plug-in为我们的Diagram添加一个自定义动作 Creating a Customization Plug-in 尽管可以给生成的代码添加备注generated NOT来避免下次重新生成代码时覆盖我们修改的代码…

invalid use of incomplete type struct 或者是class的解决办法

在写完代码之后进行编译时&#xff0c;提示"invalid use of incomplete type struct" 或者 "invalid use of incomplete type class" 的解决办法&#xff1a; 1、对应的头文件要包含&#xff0c;这个是必须的。 当时因为没有包含头文件&#xff0c;也汇报…

ASP.NETLinkButton的Click事件中获取CommandArgument的值

/// <summary> /// LinkButton的onClick事件 /// </summary> /// <param name"sender"></param> /// <param name"e"></param> protected void linkBtnName_Click(object sender, EventArgs e) { …