Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring Boot 2.X(十九):集成 mybatis-plus 高效开发

Spring Boot 2.X(十九):集成 mybatis-plus 高效开发

作者头像
朝雾轻寒
发布于 2020-02-19 05:57:57
发布于 2020-02-19 05:57:57
82500
代码可运行
举报
运行总次数:0
代码可运行

前言

之前介绍了 SpringBoot 整合 Mybatis 实现数据库的增删改查操作,分别给出了 xml 和注解两种实现 mapper 接口的方式;虽然注解方式干掉了 xml 文件,但是使用起来并不优雅,本文将介绍 mybats-plus 的常用实例,简化常规的 CRUD 操作。

mybatis-plus

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

学习 mybatis-plus:https://mp.baomidou.com/guide

常用实例

1. 项目搭建

1.1 pom.xml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 热部署模块 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.0</version>
        </dependency>
    </dependencies>
1.2 application.yaml
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# spring setting
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: zwqh@0258
1.3 实体类 UserEntity
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@TableName(value="t_user")
public class UserEntity {

    @TableId(value="id",type=IdType.AUTO)
    private Long id;
    private String userName;
    private String userSex;
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUserSex() {
        return userSex;
    }
    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

}

@TableName 指定数据库表名,否则默认查询表会指向 user_entity ;@TableId(value=”id”,type=IdType.AUTO) 指定数据库主键,否则会报错。

1.4 Dao层 UserDao

继承 BaseMapper,T表示对应实体类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface UserDao extends BaseMapper<UserEntity>{

}
1.5 启动类

在启动类添加 @MapperScan 就不用再 UserDao 上用 @Mapper 注解。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@MapperScan("cn.zwqh.springboot.dao")
public class SpringBootMybatisPlusApplication {

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

}
1.6 分页插件配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Configuration
public class MybatisPlusConfig {
     /**
     *   mybatis-plus分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor page = new PaginationInterceptor();
        page.setDialectType("mysql");
        return page;
    }

}

2.示例

2.1 新增
新增用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UserEntity user=new UserEntity();
user.setUserName("朝雾轻寒");
user.setUserSex("男");
userDao.insert(user);
2.2 修改
根据id修改用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UserEntity user=new UserEntity();
user.setUserName("朝雾轻晓");
user.setUserSex("男");
user.setId(25L);
userDao.updateById(user);
根据entity条件修改用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UserEntity user=new UserEntity();
user.setUserSex("女");
userDao.update(user,new QueryWrapper<UserEntity>().eq("user_name", "朝雾轻寒"));
2.3 查询
根据id查询用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UserEntity user = userDao.selectById(id);
根据entity条件查询总记录数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int count = userDao.selectCount(new QueryWrapper<UserEntity>().eq("user_sex", "男"));
根据 entity 条件,查询一条记录,返回的是实体
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QueryWrapper<UserEntity> queryWrapper=new QueryWrapper<UserEntity>();
        UserEntity user=new UserEntity();
        user.setUserName("朝雾轻寒");
        user.setUserSex("男");
        queryWrapper.setEntity(user);
user = userDao.selectOne(queryWrapper);

如果表内有两条或以上的相同数据则会报错,可以用来判断某类数据是否已存在 根据entity条件查询返回第一个字段的值(返回id列表)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
QueryWrapper<UserEntity> queryWrapper=new QueryWrapper<UserEntity>();
        UserEntity user=new UserEntity();
        user.setUserSex("男");
        queryWrapper.setEntity(user);
List<Object> objs= userDao.selectObjs(queryWrapper);
根据map条件查询返回多条数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, Object> map=new HashMap<String, Object>();
        map.put("user_name", username);
        map.put("user_sex",sex);
List<UserEntity> list = userDao.selectByMap(map);
根据entity条件查询返回多条数据(List)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, Object> map=new HashMap<String, Object>();
        map.put("user_sex","男");
List<UserEntity> list = userDao.selectList(new QueryWrapper<UserEntity>().allEq(map));
根据entity条件查询返回多条数据(List<map> )</map
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, Object> map=new HashMap<String, Object>();
        map.put("user_sex","男");
List<Map<String, Object>> list = userDao.selectMaps(new QueryWrapper<UserEntity>().allEq(map));
根据ID批量查询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Long> ids=new ArrayList<Long>();
        ids.add(1L);
        ids.add(2L);
        ids.add(3L);
List<UserEntity> list = userDao.selectBatchIds(ids);

主键ID列表(不能为 null 以及 empty)

分页查询
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page<UserEntity> page=userDao.selectPage(new Page<>(1,5), new QueryWrapper<UserEntity>().eq("user_sex", "男"));
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Page<Map<String, Object>> page=userDao.selectMapsPage(new Page<>(1,5), new QueryWrapper<UserEntity>().eq("user_sex", "男"));

需先配置分页插件bean,否则分页无效。如有pagehelper需先去除,以免冲突。 new Page<>(1,5),1表示当前页,5表示页面大小。

2.4 删除
根据id删除用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
userDao.deleteById(1);
根据entity条件删除用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
userDao.delete(new QueryWrapper<UserEntity>().eq("id", 1));
根据map条件删除用户
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, Object> map=new HashMap<String, Object>();
        map.put("user_name", "zwqh");
        map.put("user_sex","男");
        userDao.deleteByMap(map);
根据ID批量删除
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<Long> ids=new ArrayList<Long>();
        ids.add(1L);
        ids.add(2L);
        ids.add(3L);
        userDao.deleteBatchIds(ids);

主键ID列表(不能为 null 以及 empty)

小结

本文介绍了 mybatis-plus 相关的 Mapper层 CRUD 接口实现,其还提供了 Service层 CRUD 的相关接口,有兴趣的小伙伴可以去使用下。mybatis-plus 真正地提升了撸码效率。

其他学习要点:

  1. mybatis-plus 条件构造器
  2. lamda 表达式
  3. 常用注解

学习地址:https://mp.baomidou.com/guide/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 朝雾轻寒的博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Security的认证和授权
Spring Security是为基于Spring的应用程序提供声明式安全保护的安全性框架。Spring Security提供了完整的安全性解决方案,它能够在Web请求级别和方法调用级别处理身份认证和授权。因为基于Spring框架,所以Spring Security充分利用了依赖注入(dependency injection,DI)和面向切面(AOP)的技术。
兜兜转转
2023/03/29
2.4K0
Spring Security的认证和授权
【Spring Security】003-Spring Security web权限方案(1):用户认证
在resources目录下创建static目录,并创建login.html,name必须是username和password;
訾博ZiBo
2025/01/06
1000
【Spring Security】003-Spring Security web权限方案(1):用户认证
SpringBoot-Security 具体案例、 实现安全框架、权限控制、aop切入
​ 安全是一个不断变化的目标,追求一个全面的、系统范围的方法很重要。在安全领域,我们鼓励您采用“安全层”,这样每个层都可以尽可能地保证自身的安全性,并且连续的层提供额外的安全性。每一层的安全性越“严格”,您的应用程序就越健壮和安全。在底层,为了减少中间人攻击,你需要处理诸如传输安全和系统辨识等问题。接下来,您将通常使用防火墙,也许是通过 vpn 或 IP 安全性来确保只有经过授权的系统才能尝试连接。在公司环境中,您可以部署 DMZ 来将面向公共的服务器与后端数据库和应用程序服务器分开。您的操作系统也将发挥关键作用,解决诸如作为非特权用户运行进程和最大化文件系统安全性等问题。操作系统通常也会配置自己的防火墙。希望在某个地方,你可以尝试阻止针对系统的分布式拒绝服务攻击攻击和暴力破解。入侵预防系统安全协议对于监控和响应攻击也特别有用,这样的系统能够采取保护措施,比如实时阻止违规的 TCP/IP 地址。转移到较高的层,您的 Java 虚拟机有望被配置为最小化授予不同 Java 类型的权限,然后您的应用程序将添加自己的问题域特定的安全配置。Spring Security 使后一个领域——应用程序安全性——更加容易。
宁在春
2022/10/31
1K0
SpringBoot-Security 具体案例、 实现安全框架、权限控制、aop切入
让Spring Security 来保护你的Spring Boot项目吧
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
100000860378
2018/09/13
1.2K0
让Spring Security 来保护你的Spring Boot项目吧
Spring Boot 3 集成 Spring Security + JWT
这里主要用到了Mybatis-plus、hutool 、knife4j ,其他依赖可以直接勾选
Harry技术
2025/01/13
3471
Spring Boot 3 集成 Spring Security + JWT
Spring Boot 3 集成 Spring Security + JWT
概述: 在本文中,我们将一步步学习如何使用 Spring Boot 3 和 Spring Security 来保护我们的应用程序。我们将从简单的入门开始,然后逐渐引入数据库,并最终使用 JWT 实现前后端分离。
Harry技术
2025/01/12
4450
Spring Boot 3 集成 Spring Security + JWT
Spring Boot:整合Spring Security
Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的安全框架。除了常规的认证(Authentication)和授权(Authorization)之外,Spring Security还提供了诸如ACLs,LDAP,JAAS,CAS等高级特性以满足复杂场景下的安全需求。另外,就目前而言,Spring Security和Shiro也是当前广大应用使用比较广泛的两个安全框架。
朝雨忆轻尘
2019/07/01
3.4K0
Spring Boot:整合Spring Security
在Spring Boot中使用Spring Security实现权限控制
https://gitee.com/a247292980/spring-security
ydymz
2018/09/10
9410
在Spring Boot中使用Spring Security实现权限控制
SpringBoot集成Spring Security(1)——入门程序
因为项目需要,第一次接触 Spring Security,早就听闻 Spring Security 功能强大但上手困难,学习了几天出入门道,特整理这篇文章希望能让后来者少踩一点坑(本文附带实例程序,请放心食用)
全栈程序员站长
2022/09/09
8400
SpringBoot集成Spring Security(1)——入门程序
Spring Boot 3 集成 Spring Security(3)数据访问权限
在前面的文章中我们介绍了《Spring Boot 3 集成 Spring Security(1)认证》和《Spring Boot 3 集成 Spring Security(2)授权》,这篇博客将介绍如何在 Spring Boot 3 项目中,整合 Spring Security 和 MyBatis-Plus ,轻松实现基于数据库的用户访问控制、权限管理。
Harry技术
2025/01/11
1750
Spring Boot 3 集成 Spring Security(3)数据访问权限
分布式--Spring Security入门
Spring Security是Spring推出的一个安全框架,说白了就是争对用户登录和权限的框架,所以主要功能为两块:“认证”和“授权”,对应用户登录和是否有权限去访问一些功能
aruba
2022/09/19
7350
分布式--Spring Security入门
8.6 Spring Boot集成Spring Security小结
开发Web应用,对页面的安全控制通常是必须的。比如:对于没有访问权限的用户需要转到登录表单页面。要实现访问控制的方法多种多样,可以通过Aop、拦截器实现,也可以通过框架实现,例如:Apache Shiro、Spring Security。
一个会写诗的程序员
2018/08/20
1.2K0
8.6 Spring Boot集成Spring Security小结
Spring Security 授权详解
所有的微服务的请求都经过网关,网关从认证中心读取微服务的地址,将请求转发至微服务,注册中心采用Eureka。
ruochen
2021/12/16
2.7K0
Spring Boot 3 集成 Spring Security(3)数据管理
在前面的文章中我们介绍了《Spring Boot 3 集成 Spring Security(1)认证》和《Spring Boot 3 集成 Spring Security(2)授权》,这篇博客将介绍如何在 Spring Boot 3 项目中,整合 Spring Security 和MyBatis-Plus ,轻松实现基于数据库的用户访问控制、权限管理。
Harry技术
2025/01/13
1460
Spring Boot 3 集成 Spring Security(3)数据管理
Spring Boot 2 + Spring Security 5 + JWT 的 Restful简易教程!
本项目中 JWT 密钥是使用用户自己的登入密码,这样每一个 token 的密钥都不同,相对比较安全。
Java小咖秀
2021/05/07
2.4K0
权限框架 | 学会Spring Security权限框架,就是这么简单
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架(简单说是对访问权限进行控制 )。
码神联盟
2019/07/31
4.5K0
权限框架 | 学会Spring Security权限框架,就是这么简单
Spring Security 简单使用教程
Spring Security 是一个强大的、安全性框架,用于保护 Spring 应用程序。本文将详细介绍如何在一个 Spring Boot 项目中使用 Spring Security,从基础配置到自定义安全需求。
繁依Fanyi
2024/08/07
2710
基于Spring Cloud Oauth2 JWT搭建微服务的安全认证中心
Oauth协议为用户资源的授权提供了一个安全的、开放而又建议的标准。oauth的授权不会是第三方初级到用户的账号信息(如用户名与密码),及第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此oauth是安全的。oauth是Open Authorization的简写
小东啊
2019/06/26
15.7K1
基于Spring Cloud Oauth2 JWT搭建微服务的安全认证中心
Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十五):Spring Security 版本
到目前为止,我们使用的权限认证框架是 Shiro,虽然 Shiro 也足够好用并且简单,但对于 Spring 官方主推的安全框架 Spring Security,用户群也是甚大的,所以我们这里把当前的代码切分出一个 shiro-cloud 分支,作为 Shiro + Spring Cloud 技术的分支代码,dev 和 master 分支将替换为 Spring Security + Spring Cloud 的技术栈,并在后续计划中集成 Spring Security OAuth2 实现单点登录功能。
朝雨忆轻尘
2019/06/19
1.5K0
Spring boot+Spring security+JJWT 实现restful风格的权限验证
https://github.com/MarkGao11520/spring-boot-security-restful
Meet相识
2018/09/12
3.7K2
推荐阅读
相关推荐
Spring Security的认证和授权
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验