MyBaitsPlus随笔

初识MyBaitsPlus

文章目录

    • 初识MyBaitsPlus
      • 1.介绍
        • 优势
      • 2 .简单使用
        • 1.添加依赖:
        • 2.配置数据源:
        • 3.编写实体类:
        • 4.编写Mapper接口:
        • 5.编写Service接口:
        • 6.编写Service实现类:
        • 7.使用Service进行操作:
        • 8.配置扫描:
          • 9.解释
      • 3.MyBatis-Plus中给我们提供的Mapper和Service封装的方法
        • 1.Mapper接口类(例如`UserMapper`):
        • 2.Service接口类(例如`UserService`):

1.介绍

MyBatis-Plus是一个基于MyBatis的增强工具,旨在简化MyBatis的开发,提高生产效率。它提供了一系列功能,包括CRUD操作的自动生成、复杂查询的简化配置、代码生成器、分页插件等。以下是MyBatis-Plus的一些主要特性:

  1. CRUD 操作:MyBatis-Plus通过注解或XML配置自动生成常见的增删改查操作,减少了大量的手写SQL代码。
  2. 代码生成器:支持根据数据库表结构生成对应的实体类、Mapper接口、Service和Controller等代码,大幅度提高开发速度。
  3. 分页插件:内置分页插件,可以方便地进行分页查询,并支持多种数据库。
  4. 条件构造器:提供了丰富的条件构造器,能够以链式调用的方式构建查询条件,简化复杂查询的编写。
  5. 插件扩展:支持自定义插件,可以根据需求进行功能扩展,如逻辑删除、多租户等。
  6. 性能分析:内置性能分析插件,可以输出每条SQL的执行时间,帮助优化SQL性能。
  7. 多数据源支持:方便集成和管理多数据源配置。
优势
  • 简单易用:减少了大量的配置和手写代码,使开发人员可以专注于业务逻辑。
  • 高效:自动化的代码生成和CRUD操作大幅度提高了开发效率。
  • 灵活扩展:提供了丰富的扩展机制,可以根据项目需求进行自定义功能的开发。

使用场景

MyBatis-Plus特别适用于需要快速开发、迭代频繁的项目,可以显著减少开发人员的工作量。同时,它也适合于对性能要求较高、需要频繁进行数据库操作的应用。

2 .简单使用

详细步骤:

1.添加依赖:

pom.xml文件中添加MyBatis-Plus的依赖。

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>latest_version</version>
</dependency>
2.配置数据源:

application.propertiesapplication.yml中配置数据库连接信息。

spring:datasource:url: jdbc:mysql://localhost:3306/mydatabaseusername: your_usernamepassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driver
3.编写实体类:

创建与数据库表对应的实体类,使用@TableName注解指定表名,使用@TableId注解指定主键。

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;@TableName("user")
public class User {@TableIdprivate Long id;private String username;private Integer age;// 省略getter和setter方法
}
4.编写Mapper接口:

创建继承自BaseMapper的Mapper接口,并使用@Mapper注解标记。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {
}
5.编写Service接口:

创建继承自IService的Service接口。

import com.baomidou.mybatisplus.extension.service.IService;public interface UserService extends IService<User> {
}
6.编写Service实现类:

创建继承自ServiceImpl的Service实现类,并实现Service接口。

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
7.使用Service进行操作:

在控制器或其他服务中自动注入UserService并使用它进行CRUD操作。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public User getById(@PathVariable Long id) {return userService.getById(id);}@PostMappingpublic boolean save(@RequestBody User user) {return userService.save(user);}@PutMappingpublic boolean update(@RequestBody User user) {return userService.updateById(user);}@DeleteMapping("/{id}")public boolean delete(@PathVariable Long id) {return userService.removeById(id);}
}
8.配置扫描:

确保MyBatis-Plus能够扫描到Mapper接口,通常在启动类上添加@MapperScan注解。

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
9.解释
  • 实体类(Entity):用于映射数据库表结构的Java类,每个属性对应表中的一个字段。
  • Mapper接口:用于执行数据库操作的方法接口,继承自BaseMapper,MyBatis-Plus会自动实现常见的CRUD方法。
  • Service接口:定义业务逻辑接口,继承自IService
  • Service实现类:实现业务逻辑接口,继承自ServiceImpl,可以使用MyBatis-Plus提供的CRUD方法。
  • 控制器(Controller):处理HTTP请求并调用Service层进行业务处理。

通过以上步骤,MyBatis-Plus可以显著减少开发中重复的CRUD代码,提高开发效率,并提供了丰富的功能来简化复杂查询和数据操作。

3.MyBatis-Plus中给我们提供的Mapper和Service封装的方法

1.Mapper接口类(例如UserMapper):
  1. 基本 CRUD 方法
    • T selectById(Serializable id):根据ID查询一条记录。
    • List<T> selectList(@Param("ew") Wrapper<T> wrapper):根据条件查询记录列表。
    • int insert(T entity):插入一条记录。
    • int updateById(T entity):根据ID更新记录。
    • int deleteById(Serializable id):根据ID删除记录。
  2. 扩展的查询方法
    • int selectCount(@Param("ew") Wrapper<T> wrapper):根据条件查询记录数量。
    • T selectOne(@Param("ew") Wrapper<T> wrapper):根据条件查询单条记录,如果查询结果超过一条会抛出异常。
    • List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList):根据ID列表查询记录列表。
    • List<T> selectPage(Page<?> page, @Param("ew") Wrapper<T> wrapper):根据条件分页查询记录列表。
2.Service接口类(例如UserService):
  1. 基本 CRUD 方法
    • boolean save(T entity):保存一条记录,根据ID是否存在自动判断插入还是更新。
    • boolean updateById(T entity):根据ID更新记录。
    • boolean removeById(Serializable id):根据ID删除记录。
    • T getById(Serializable id):根据ID查询记录。
    • List<T> list():查询所有记录列表。
  2. 扩展的查询方法
    • int count(Wrapper<T> wrapper):根据条件查询记录数量。
    • T getOne(Wrapper<T> wrapper, boolean throwEx):根据条件查询单条记录,如果查询结果超过一条根据throwEx参数决定是否抛出异常。
    • List<T> list(Wrapper<T> wrapper):根据条件查询记录列表。
    • IPage<T> page(Page<T> page, Wrapper<T> wrapper):根据条件分页查询记录列表。
  3. 其他方法
    • Map<String, Object> getMap(Wrapper<T> wrapper):根据条件查询记录并返回Map结果集。
    • Object getObj(Wrapper<T> wrapper):根据条件查询记录并返回Object结果集。

这些方法提供了丰富的功能,可以满足各种数据操作需求,从基本的增删改查到复杂的条件查询和分页查询,同时也支持返回不同类型的结果集,使得开发更加灵活和高效。

tring, Object> getMap(Wrapper wrapper)`:根据条件查询记录并返回Map结果集。

  • Object getObj(Wrapper<T> wrapper):根据条件查询记录并返回Object结果集。

这些方法提供了丰富的功能,可以满足各种数据操作需求,从基本的增删改查到复杂的条件查询和分页查询,同时也支持返回不同类型的结果集,使得开发更加灵活和高效。

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

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

相关文章

干货|图生代码实例整理,让你的代码更高效

前言 “图生代码”。这项新功能允许开发人员直接利用产品设计图一键生成相应的代码&#xff0c;极大地提高了编程效率和研发速度。甚至会未来软件开发可能迎来一场革命性的变革。但图生代码究竟能直到什么程度&#xff1f;本文结合一款图生代码的实例程序整理了一些有代表意义…

C语言 数组——排序算法的函数实现

目录 交换法排序 用交换法对成绩数组升序排序 选择法排序 冒泡法排序 归并法排序 交换法排序 用交换法对成绩数组升序排序 选择法排序 冒泡法排序 归并法排序

期望薪资30k字节java2面,A给B转账的同时B给A转账怎么并发量最高

一面 1、自我介绍 2、详细介绍一下自己的做的项目&#xff1f;根据项目提了一些问题 3、hashmap原理 4、B树原理&#xff1f; 5、final禁止重排序原理&#xff1f; 6、设计一个榨汁机类&#xff0c;面向对象怎么设计&#xff1f; 7、get、post区别&#xff0c;使用场景&…

已解决ModuleNotFoundError : No module named ‘pandas亲测有效!!!

已解决ModuleNotFoundError : No module named ‘pandas亲测有效&#xff01;&#xff01;&#xff01; 亲测有效 报错问题解决思路解决方法 报错问题 在运行Python代码时&#xff0c;你可能会遇到以下报错信息&#xff1a; ModuleNotFoundError: No module named pandas这个…

华为昇腾310B初体验,OrangePi AIpro开发板使用测评

0、写在前面 很高兴收到官方的OrangePi AIpro开发板测试邀请&#xff0c;在过去的几年中&#xff0c;我在自己的博客写了一系列有关搭载嵌入式Linux系统的SBC&#xff08;单板计算机&#xff09;的博文&#xff0c;包括树莓派4系列、2K1000龙芯教育派、Radxa Rock5B、BeagleBo…

攒粒是什么?怎么用攒粒赚钱?

攒粒简介 攒粒的前身是91问问&#xff0c;隶属于上海道道永泉市场调查有限公司&#xff0c;是一家专业的全球在线调研服务公司&#xff0c;也是是国内排名前列的社区调查之一&#xff0c;10年在线调研&#xff0c;600万会员亲身体验&#xff0c;提供网络调查、市场调查、问卷调…

KT6368A蓝牙芯片AT命令会被透传出去,指令对为什么会被透传出去

一、简介 KT6368A再被连接之后&#xff0c;AT命令会被透传出去。被透传的这组AT命令是符合文档要求&#xff0c;不应被透传&#xff0c;实际却经常被透传。并且可以每次都复现 详细描述 有问题部分的串口数据监控结果如下&#xff1a;其中41 54 2B 42 4D 46 30 41 46 42 43 3…

从零自制docker-15-【实现 mydocker run -d 支持后台运行容器】

文章目录 实现目的莫名奇妙的问题对之前upper层出现root补充对run某些命令出现找不到文件或目录的原因代码效果 实现目的 docker run -d时容器在后台运行&#xff0c;而不会进入命令行交互形式 首先是需要添加-d选项然后设置当添加-d选项时候主进程不会等待子进程&#xff0c…

生意人【变通 VS 正常 、先义后利、正确的反省法】

冷 VS 热 冷&#xff1a;慢慢吞吞 热&#xff1a;见面热络 有钱大家花&#xff0c;越花越多 对什么的人也要讲什么样的话 获取的两种方式&#xff1a;变通 VS 正常 变通有变通的方式正常有正常的轨道 不敢做而来骂他说你不做、话不说满&#xff0c;人不自夸 先义后利…

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版 Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导 请访问原文链接&#xff1a;Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处…

Keras深度学习框架第三十讲:在KerasTuner中处理失败的训练

1、绪论 KerasTuner程序可能会运行很长时间&#xff0c;因为每个模型的训练可能需要很长时间。我们不希望程序仅仅因为一些试验随机失败就停止运行。 本文将讨论在KerasTuner中如何处理失败的训练&#xff0c;包括&#xff1a; 如何在搜索过程中容忍失败的训练如何在构建和评…

GPT-4o: 未来的智能助手

GPT-4o: 未来的智能助手 在这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为我们生活中不可或缺的一部分。作为OpenAI最新推出的语言模型&#xff0c;GPT-4o不仅继承了前几代模型的优点&#xff0c;还在多个方面进行了显著的提升。本文将带你深入了解…

DreamerV3阅读笔记

DreamerV3 文章希望解决的一个挑战是用固定的hyperparameter来同时处理不同domain的任务。文章发现&#xff0c;通过结合KL balancing 和free bits可以使得world model learn without tuning&#xff08;是指上面这件事&#xff0c;即不需要对不同任务改变hyperparameter&#…

2024年电工杯高校数学建模竞赛(B题) 建模解析| 大学生平衡膳食食谱的优化设计

问题重述及方法概述 问题1&#xff1a;膳食食谱的营养分析评价及调整 数学方法&#xff1a;线性规划模型、营养素评价模型、比较分析 可视化数据图&#xff1a;营养素含量表、营养素摄入量对比图、营养素缺乏情况图 问题2&#xff1a;基于附件3的日平衡膳食食谱的优化设计 数…

KingbaseES数据库物理备份还原sys_rman

数据库版本&#xff1a;KingbaseES V008R006C008B0014 简介 sys_rman 是 KingbaseES 数据库中重要的物理备份还原工具&#xff0c;支持不同类型的全量备份、差异备份、增量备份&#xff0c;保证数据库在遇到故障时及时使用 sys_rman 来恢复到数据库先前状态。 文章目录如下 1.…

揭秘爬虫技术:从请求到存储的全方位解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、爬虫初探&#xff1a;请求与响应 二、数据解析&#xff1a;从混乱中提炼价值 三、数据…

Megatron-LM源码系列(八): Context Parallel并行

1. Context Parallel并行原理介绍 megatron中的context并行(简称CP)与sequence并行(简称SP)不同点在于&#xff0c;SP只针对Layernorm和Dropout输出的activation在sequence维度上进行切分&#xff0c;CP则是对所有的input输入和所有的输出activation在sequence维度上进行切分&…

M00238-固定翼无人机集群飞行仿真平台MATLAB完整代码含效果

一个小型无人机集群仿真演示平台&#xff0c;使用matlab和simulink搭建。 给出的例子是5架的&#xff0c;当然如果你愿意花时间&#xff0c;也可以把它扩展到10架&#xff0c;20架甚至更多。 输入&#xff1a;5架飞机的规划路径 输出&#xff1a;每架无人机每个时刻的13个状态量…

Docker环境安装并使用Elasticsearch

1、拉取es docker pull elasticsearch:7.10.12、查看镜像 docker images3、启动es docker run -d --name esearch -p 9200:9200 -p 9300:9300 elasticsearch:7.10.14、如果启动ES时出现一下问题 Unable to find image docker.elastic.co/elasticsearch/elasticsearch:7.10.…

python max_min标准化

python max_min标准化 max_min标准化sklearn实现max_min标准化手动实现max_min标准化 max_min标准化 Max-Min标准化&#xff08;也称为归一化或Min-Max Scaling&#xff09;是一种将数据缩放到特定范围&#xff08;通常是0到1&#xff09;的标准化方法。这种方法通过线性变换将…