MyBatis-Plus入门案例

news2024/11/18 9:36:47

MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提供效率。

  • 开发方式
    • 基于MyBatis使用MyBatisPlus
    • 基于Spring使用MyBatisPlus
    • 基于SpringBoot使用MyBatisPlus

SpringBoot它能快速构建Spring开发环境用以整合其他技术,使用起来是非常简单,对于MP也基于SpringBoot来构建的。

回顾下,SpringBoot整合Mybatis的开发过程:

  • 创建SpringBoot工程

    在这里插入图片描述

    在这里插入图片描述

  • 勾选配置使用的技术,能够实现自动添加起步依赖包

    在这里插入图片描述

  • 设置dataSource相关属性(JDBC参数)

    在这里插入图片描述

  • 定义数据层接口映射配置

    在这里插入图片描述

我们可以参考着上面的这个实现步骤把SpringBoot整合MyBatisPlus来快速实现下,具体的实现步骤为:

步骤1:创建数据库及表

CREATE TABLE `platform_user` (
  `user_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(60) NOT NULL DEFAULT '',
  `user_name` varchar(60) NOT NULL DEFAULT '',
  `branch_name` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`user_id`) USING BTREE,
  KEY `idx_platform_user_id_name` (`user_name`) USING BTREE,
  KEY `idx_platform_user_email` (`email`) USING BTREE
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

步骤2:创建SpringBoot工程

在这里插入图片描述

步骤3:勾选配置使用技术

在这里插入图片描述

说明:

  • 由于MP并未被收录到idea的系统内置配置,无法直接选择加入,需要手动在pom.xml中配置添加

步骤4:pom.xml补全依赖

		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.5.2</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.2.11</version>
		</dependency>

说明:

  • druid数据源可以加也可以不加,SpringBoot有内置的数据源,可以配置成使用Druid数据源

  • 从MP的依赖关系可以看出,通过依赖传递已经将MyBatis与MyBatis整合Spring的jar包导入,我们不需要额外在添加MyBatis的相关jar包

    在这里插入图片描述

步骤5:添加MP的相关配置信息

resources默认生成的是properties配置文件,可以将其替换成yml文件,并在文件中配置数据库连接的相关信息:application.yml

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource

说明:serverTimezone是用来设置时区,UTC是标准时区,和咱们的时间差8小时,所以可以将其修改为Asia/Shanghai

步骤6:根据数据库表创建实体类

@TableName(value = "platform_user")
public class User {
    @TableId(value = "user_id",type = IdType.AUTO)
    private  Integer userId;
    private  String email;
    private  String userName;
    private  String branchName;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getBranchName() {
        return branchName;
    }

    public void setBranchName(String branchName) {
        this.branchName = branchName;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", email='" + email + '\'' +
                ", userName='" + userName + '\'' +
                ", branchName='" + branchName + '\'' +
                '}';
    }
}

说明:Mybatis plus实体类属性与表字段不一致问题。

  • @TableName(value = "platform_user"),当数据库名与实体类名不一致或不符合驼峰命名 时,需要在此注解指定表名
  • @TableId(type = IdType.AUTO),指定实体类的属性为对应的主键
  • @TableField注解,主要用来解决实体类的字段名与数据库中的字段名不匹配的问题(数据库user_addr,字段useraddr未驼峰,mp默认开启驼峰 ),或者实体类中的属性字段在表中不存在的问题

步骤7:创建Dao接口

@Mapper
public interface UserDao extends BaseMapper<User> {
}

步骤8:编写引导类

@SpringBootApplication
//@MapperScan("com.dcxuexi.dao")
public class SpringbootMp01FristApplication {

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

}

说明: Dao接口要想被容器扫描到,有两种解决方案:

  • 方案一:在Dao接口上添加@Mapper注解,并且确保Dao处在引导类所在包或其子包中
    • 该方案的缺点是需要在每一Dao接口中添加注解
  • 方案二:在引导类上添加@MapperScan注解,其属性为所要扫描的Dao所在包
    • 该方案的好处是只需要写一次,则指定包下的所有Dao接口都能被扫描到,@Mapper就可以不写。

步骤9:编写测试类

@SpringBootTest
class MpDemoApplicationTests {

	@Autowired
	private UserDao userDao;
	@Test
	public void testGetAll() {
		List<User> userList = userDao.selectList(null);
		System.out.println(userList);
	}
}

说明:

userDao注入的时候下面有红线提示的原因是什么?

  • UserDao是一个接口,不能实例化对象

  • 只有在服务器启动IOC容器初始化后,由框架创建DAO接口的代理对象来注入

  • 现在服务器并未启动,所以代理对象也未创建,IDEA查找不到对应的对象注入,所以提示报红

  • 一旦服务启动,就能注入其代理对象,所以该错误提示不影响正常运行。

查看运行结果:

在这里插入图片描述

跟之前整合MyBatis相比,你会发现我们不需要在DAO接口中编写方法和SQL语句了,只需要继承BaseMapper接口即可。整体来说简化很多。


项目代码

  • gitee 代码下载

  • github 代码下载

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

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

相关文章

设计模式之美——看似面向对象,实则面向过程

常见的编程范式或者说编程风格有三种&#xff0c;面向过程编程、面向对象编程、函数式编程&#xff0c;而面向对象编程又是这其中最主流的编程范式。现如今&#xff0c;大部分编程语言都是面向对象编程语言&#xff0c;大部分软件都是基于面向对象编程这种编程范式来开发的。 …

《Redis设计与实现》笔记

第二章&#xff1a;简单动态字符串 1.Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串( simple dynamic string,SDS)的抽象类型,并将SDS用作 Redis的默认字符串表示。 Redis里面,C字符串只会作为字符串…

操作系统第三章习题及答案(汤子瀛第四版)

第三章 1&#xff0e;高级调度与低级调度的主要任务是什么&#xff1f;为什么要引入中级调度&#xff1f; 答&#xff1a;高级调度的主要任务是根据某种算法&#xff0c;把外存上处于后备队列中的那些作业调入内存。低级调度是保存处理机的现场信息&#xff0c;按某种算法先取…

【UE4】打包失败 Failed to build UATTempProj.proj

我抄我自己之 https://zhuanlan.zhihu.com/p/586117443 前两天编 UE4.27 源码内存和CPU直接全是100%爆满&#xff0c;甚至还报错&#xff1a;c1060, the compiler is out of heap&#xff0c;设置虚拟内存也不不好使&#xff0c;发现16GB内存不配编 UE&#xff0c;火速换了64G之…

Kotlin或将超越Go?

知名软件行业分析公司 RedMonk 发布了 2022 年 6 月&#xff08;第三季度&#xff09;编程语言排行榜。 RedMonk 编程语言排行榜通过追踪编程语言在 GitHub 和 Stack Overflow 上的代码使用情况与讨论数量&#xff0c;统计分析后进行排序&#xff0c;其旨在深入了解潜在的语言…

你真的知道Spring Security安全框架吗?

1、什么是安全管理框架&#xff1f; 解决系统安全问题的框架。如果没有安全框架&#xff0c;我们需要手动处理每个资源的访问控制&#xff0c;非常麻烦。使 用安全框架&#xff0c;我们可以通过配置的方式实现对资源的访问限制。 安全框架&#xff0c;简单说是对访问权限进行控…

Android Material Design之MaterialButton(一)

按规矩先上效果图 资源引入 implementation com.google.android.material:material:1.4.0关键属性 属性描述app:backgroundTint背景着色app:backgroundTintMode着色模式app:strokeColor描边颜色app:strokeWidth描边宽度app:cornerRadius圆角大小app:rippleColor按压水波纹颜色…

【Java八股文总结】之计算机网络

文章目录计算机网络一、基础1、网络体系结构2、HTTP协议、TCP协议、UDP协议比较3、网络协议4、WebSocket和Socket的区别&#xff1f;5、常见的端口及其对应的服务&#xff1f;6、从浏览器输入URL到页面展示发生了什么&#xff1f;&#xff08;★★★★★&#xff09;1、DNS域名…

MySQL纯代码复习(下)

前言 本文章的语言描述会比上篇多一些 数据库的创建修改与删除 标识符命名规则 数据库名、表名不得超过30个字符&#xff0c;变量限制为29个必须只能包含A-Z&#xff0c;a-z&#xff0c;0-9&#xff0c;_等63个字符数据库名、表名、字段名等对象名中间不要包含空格同一个My…

Twitter引流如何开发客户

要想在twitter平台上取得效果&#xff0c;你需要先了解twitter的算法规则&#xff0c;去迎合平台&#xff0c;推特群推王给出以下5条建议&#xff0c;让你发布的帖子更容易被推荐。 这里Twitter群推王可以给大家讲一下&#xff0c;关于推特平台的算法排名&#xff1a; Twitter…

nginx降权+安装php

nginx降权 使用普通用户启动Nginx 为什么要让nginx服务使用普通用户 默认情况下&#xff0c;nginx的master进程使用的是root用户&#xff0c;worker进程使用的是nginx指定的普通用户&#xff0c;使用root用户跑nginx的master进程有两个大问题&#xff1a; &#xff08;1&#x…

课程设计-天天象棋作弊软件判别

目录 1.作弊开挂可能迹象 2.设计作弊检测系统灵感 3.设计作弊检测系统思路 3.1反作弊系统应对策略框架 4.感想体悟 1.作弊开挂可能迹象 1.非实名认证&#xff1b; 2.头像&#xff1a;美女&#xff1b; 3.名称&#xff1a; (1)一串英文字母&#xff1b; (2)非正常中文名…

【深度分解网络:显著性分析:IVIF】

Infrared and Visible Image Fusion Based on Deep Decomposition Network and Saliency Analysis &#xff08;基于深度分解网络和显著性分析的红外与可见光图像融合&#xff09; 传统的图像融合侧重于选择一种有效的分解方法从源图像中提取代表性特征&#xff0c;并试图找到…

2022年海运行业研究报告

第一章 行业概况 海洋运输又称“国际海洋运输”&#xff0c;提供海上客运或者货运服务的行业。是国际物流中最主要的运输方式。它是指使用船舶通过海上航道在不同国家和地区的港口之间运送货物的一种方式&#xff0c;在国际货物运输中使用最广泛。国际贸易总运量中的2/3以上&a…

功率放大器和电压放大器的区别是什么意思

很多人经常会在后台咨询小编功率放大器和电压放大器的区别有哪些&#xff1f;今天就来为大家科普一下功率放大器和电压放大器的知识内容&#xff0c;希望大家下次能够区分&#xff0c;并且可以正常地选择和使用功率放大器。 图&#xff1a;功率放大电路与电压放大电路对比 功率…

Opengl ES之YUV数据渲染

YUV回顾 记得在音视频基础知识介绍中&#xff0c;笔者专门介绍过YUV的相关知识&#xff0c;可以参考&#xff1a; 《音视频基础知识-YUV图像》 YUV数据量相比RGB较小&#xff0c;因此YUV适用于传输&#xff0c;但是YUV图不能直接用于显示&#xff0c;需要转换为RGB格式才能显…

简单的股票行情演示(一) - 实时标的数据

一、概述二、效果展示三、实现代码 1、行情数据中心2、数据拉取模块3、基础服务模块4、UI展示四、相关文章原文链接&#xff1a;简单的股票行情演示&#xff08;一&#xff09; - 实时标的数据 一、概述 很长一段时间都有一个想法&#xff0c;使用QCP去做一个行情展示小事例&…

TiDB Cloud

TiDB Cloud 为什么选择TiDB 分布式数据库-多租户混合工作负载-在同一个数据库中 事务型&#xff1a;基于行的数据分析型&#xff1a;基于列的数据 弹性比例&#xff1a; 缩小-减少节点横向扩展-添加节点 基于“RAFT”的高可用性 每个数据段的3个可用区进行复制 多租户 什么…

DataGridXL 2.0 for JavaScript Crack

你的web开发好了&#xff0c;客户说我习惯用excel这样的表格&#xff0c;你们是否能开发像电子表格一样的功能&#xff1f; Web 应用程序的类似 Excel 的体验---DataGridXL 2.0 for JavaScript Crack 你已经构建了一个 Web 应用程序&#xff0c;但你的用户坚持使用 Excel。 类似…

一、ROS2简介

ros2相关简介 ROS2的前身是ROS&#xff0c;ROS即机器人操作系统&#xff08;Robot Operating System&#xff09;。但是ROS本身并不是一个操作系统&#xff0c;而是一个软件库和工具集。 Ros的出现解决了机器人各个组件的通信问题&#xff0c;后来越来越多的机器人算法也集成到…