MyBatisPlus简单入门

1、简单介绍MyBatisPlus

MyBatisPlus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,完全去SQL化,封装好了大量的CRUD操作。甚至吧CRUD操作封装到了Service层,可以直接在Controller调用现成的CRUD服务层,极度舒适省心。
局限:只支持简单的CRUD操作,不支持多表操作(join、union、子查询),不支持GroupBy和各种函数。

2 初步使用

2.1 引入依赖

新建SpringBoot工程。引入依赖

 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency>

2.2 增加符合MyBatisPlus规范的Mapper和Service

@Repository
public interface EmployeePlusMapper extends BaseMapper<Employee>
{
}
@Service
public class EmployeePlusServiceImpl extends ServiceImpl<EmployeePlusMapper, Employee>
{}

2.3 指定Bean的主键属性为自增

public class Employee
{@TableId(value = "id",type = IdType.AUTO)private Integer id;
}

2.4 修改Controller

@RestController
public class EmployeePlusController
{@Autowired private EmployeePlusServiceImpl employeeService;@RequestMapping(value = "/emp")public Object handle1(String op,Integer id,String lastname,String gender,String email){//封装数据模型Employee employee = new Employee(id, lastname, gender, email);switch (op){case "select": if (id == null){return "必须传入员工id!";}else {Employee e = employeeService.getById(id);return e == null ? "查无此人!" : e;}case "insert" : employeeService.save(employee);return "操作完成!";case "update": if (id == null){return "必须传入员工id!";}else {employeeService.updateById(employee);return  "操作完成!";}case "delete": if (id == null){return "必须传入员工id!";}else {employeeService.removeById(id);return  "操作完成!";}default: return "请正确操作";}}@RequestMapping(value = "/getAllEmp")public Object handle2(){List<Employee> all = employeeService.list();return all;}
}

3、按条件查询

现在希望对id>3的男性员工执行查询和更新删除操作如下:

@SpringBootTest
public class MyTest
{@AutowiredEmployeeService employeeService;@Testpublic void testQuery(){//指定查询条件: id>2的男性员工QueryWrapper<Employee> wrapper = new QueryWrapper<Employee>().eq("gender", "male").gt("id", 2);//根据条件查询List<Employee> list = employeeService.list(wrapper);//指定更新条件UpdateWrapper<Employee> updateWrapper = new UpdateWrapper<Employee>().eq("gender", "male").gt("id", 4).set("gender", "female");//根据条件更新性别为女性employeeService.update(updateWrapper);//根据条件删除employeeService.remove(wrapper);}
}

4、MyBatisPlus模板生成器

虽然MyBatisPlus已经节省了sql编写的大部分工作,但是当面对几十上百个的处理的时候,仍然有大量的类模块要写,其中最大的工作量就是实体类的编写,如果手工还容易出错。
所以MyBatis-Plus还推出了代码生成工具https://github.com/baomidou/generator。

4.1 添加依赖

在pom.xml文件中添加代码生成工具

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.3.1</version>
</dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

4.2 编写生成器

编写生成器代码

public class MyGenerator
{public static void main(String[] args) {//指定为哪些表生成String[] tables={ "activity_info","activity_sku"  };FastAutoGenerator.create("jdbc:mysql://hadoop102:3306/gmall","root","000000").globalConfig(builder -> {builder.author("atguigu")               //作者.outputDir("D:\\repo\\221109\\mybatisplusdemo\\src\\main\\java")    //输出路径(写到java目录).commentDate("yyyy-MM-dd").dateType(DateType.ONLY_DATE);  //选择实体类中的日期类型  ,Date or LocalDatetime}).packageConfig(builder -> {                 //各个package 名称builder.parent("com.atguigu.mybatisplus")//.moduleName("governance").entity("bean").service("service").serviceImpl("service.impl").controller("controller").mapper("mapper");}).strategyConfig(builder -> {builder.addInclude(tables).serviceBuilder().enableFileOverride()  //生成代码覆盖已有文件 谨慎开启.formatServiceFileName("%sService")  //类后缀.formatServiceImplFileName("%sServiceImpl")  //类后缀.entityBuilder().enableFileOverride().enableLombok()  //允许使用lombok.controllerBuilder().enableFileOverride().formatFileName("%sController")  //类后缀.enableRestStyle()   //生成@RestController 否则是@Controller.mapperBuilder().enableFileOverride()//生成通用的resultMap 的xml映射.enableBaseResultMap()  //生成xml映射.superClass(BaseMapper.class)  //标配.formatMapperFileName("%sMapper")  //类后缀.mapperAnnotation(Mapper.class) ; //生成代码Mapper上自带@Mapper}).templateConfig(builder -> {// 实体类使用我们自定义模板builder.entity("templates/myentity.java");}).templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板.execute();}}

4.3 自定义模块

以上生成代码主函数中有设计自定义模块。从idea中的jar包目录中找到jar包的模板。
在这里插入图片描述
拷贝到Resource/template目录下重命名为myentity.java.ftl,并吧第29,30行的修改
修改前:

<#if entityLombokModel>
@Getter
@Setter

修改后:

……
<#if entityLombokModel>
@Data
……

之后重新运行生成器的代码,就可以根据自己的模板生成Bean。
注意:可以重复生成,是覆盖操作。

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

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

相关文章

Ubuntu 启动出现grub rescue

​ 一&#xff0c;原因 原因&#xff1a;出现 “grub rescue” 错误通常表示您的计算机无法正常引导到操作系统&#xff0c;而是进入了 GRUB&#xff08;Grand Unified Bootloader&#xff09;紧急模式。这可能是由于引导加载程序配置错误、硬盘驱动器损坏或其他引导问题引起…

springboot1.5.12升级至2.6.15

首先&#xff0c;加入springboot升级大版本依赖&#xff0c;会在升级过程中打印出错日志提示&#xff08;升级完毕可去除&#xff09; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-properties-migrator</art…

数据结构day05(单链表)

今日任务&#xff1a; 思维导图&#xff1a; 实现 代码&#xff1a;&#xff08;多文件&#xff09; head.h #ifndef __HEAD_H__ #define __HEAD_H__#include <stdio.h> #include <string.h> #include <stdlib.h> typedef int datatype;typedef struct Lin…

在R中安装TensorFlow、TensorFlow_Probability、numpy(R与Python系列第二篇)

目录 前言&#xff1a; 1-安装tensorflow库 Step1: 下载R包tensorflow Step2&#xff1a;安装TensorFlow库 Step3&#xff1a;导入R中 2-安装tensorflow_probability库 Step1&#xff1a;下载R包&#xff1a;tfprobability Step2&#xff1a;安装TensorFlow Probability …

基于Kohonen网络的聚类算法

1.案例背景 1.1 Kohonen网络 Kohonen网络是自组织竞争型神经网络的一种,该网络为无监督学习网络,能够识别环境特征并自动聚类。Kohonen神经网络是芬兰赫尔辛基大学教授Teuvo Kohonen 提出的,该网络通过自组织特征映射调整网络权值,使神经网络收敛于一种表示形态。在这一形态中…

EG1164大功率同步整流升压模块开源,最高效率97%

EG1164大功率同步整流Boost升压电源模块&#xff0c;最高效率97%&#xff0c;输入电压8~50V&#xff0c;输出电压8~60V可调&#xff0c;最大功率300瓦以上&#xff0c;开关频率219kHz。 白嫖了张嘉立创的彩色丝印券就随便画了个板试试&#xff0c;第一次打彩色丝印。 因为我测…

如何飞速成为开源贡献者(Contributor)

如何飞速成为开源贡献者Contributor 一、环境信息1.1 硬件信息1.2 软件信息 二、Git安装2.1 Git介绍2.2 Git下载安装 三、开源项目选定四、GitHub参与开源流程4.1 Fork项目4.2 SSH配置4.2.1 为什么要配置SSH4.2.2 如何配置SSH 4.3 Clone项目4.4 IDEA关联4.5 PR生成4.6 PR提交 一…

Navicat16安装教程

注&#xff1a;因版权原因&#xff0c;本文已去除破解相关的文件和内容 1、在本站下载解压后即可获得Navicat16安装包和破解补丁&#xff0c;如图所示 2、双击“navicat160_premium_cs_x64.exe”程序&#xff0c;即可进入安装界面&#xff0c; 3、点击下一步 4、如图所示勾选“…

Java 中数据结构HashMap的用法

Java HashMap HashMap 是一个散列表&#xff0c;它存储的内容是键值对(key-value)映射。 HashMap 实现了 Map 接口&#xff0c;根据键的 HashCode 值存储数据&#xff0c;具有很快的访问速度&#xff0c;最多允许一条记录的键为 null&#xff0c;不支持线程同步。 HashMap 是…

防雷接地+防雷检测综合应用解决方案

防雷接地和防雷检测是防雷工程中的重要内容&#xff0c;它们旨在保护建筑物和设备免受雷电的危害。地凯科技将介绍防雷接地和防雷检测的基本原理、施工案例方案和国标措施。 防雷接地是指将建筑物的金属结构、防雷装置和电气设备与地面连接&#xff0c;形成一个接地系统&#…

安装Ubuntu系统,将U盘当作启动盘后写保护怎么回复?

下载ChipGenius 插入写保护的U盘&#xff0c;打开ChipGenius.exe后可以扫描到U盘&#xff0c;如下图中的E:盘就是我插入的U盘&#xff08;我的PC上只有C、D两个分区&#xff09;&#xff1b; ChipGenius的作用 下载ChipGenius是为了获取U盘的设备信息&#xff1a;重点是主控…

数据集学习笔记(七):不同任务数据集的标签介绍(包含目标检测、图像分割、行为分析)

文章目录 一、目标检测1.1 TXT1.2 COCO1.3 XML 二、图像分割2.1 json2.1 TXT2.1.1 json转txt 三、行为分析3.1 TXT3.2 JSON 一、目标检测 1.1 TXT 每行表示&#xff08;类别&#xff0c;中心x相对坐标&#xff0c;中心y相对坐标&#xff0c;相对宽度、相对高度&#xff09; 1…

LeetCode494. 目标和

494. 目标和 文章目录 [494. 目标和](https://leetcode.cn/problems/target-sum/)一、题目二、题解方法一&#xff1a;目标和路径计数算法方法二&#xff1a;01背包方法三&#xff1a;01背包一维数组 一、题目 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个…

面试官:说一下 MyBatis 的一级缓存和二级缓存 ?

目录 1. MyBatis 的缓存机制 2. 为什么不默认开启 MyBatis 的二级缓存 3. MyBatis 如何开启二级缓存 4. MyBatis 有哪些缓存清除策略 1. MyBatis 的缓存机制 MyBayis 中包含两级缓存&#xff1a;一级缓存和二级缓存 1. 一级缓存是 SqlSession 级别的&#xff0c;是 MyBati…

jmeter 常数吞吐量定时器

模拟固定吞吐量的定时器。它可以控制测试计划中各个请求之间的时间间隔&#xff0c;以达到预期的吞吐量。 参数包括&#xff1a; Target Throughput&#xff1a;目标吞吐量&#xff08;每分钟请求数&#xff09;Calculate Throughput based on&#xff1a;吞吐量计算基准&…

stm32---用外部中断实现红外接收器

一、红外遥控的原理 红外遥控是一种无线、非接触控制技术&#xff0c;具有抗干扰能力强&#xff0c;信息传 输可靠&#xff0c;功耗低&#xff0c;成本低&#xff0c;易实现等显著优点&#xff0c;被诸多电子设备特别是 家用电器广泛采用&#xff0c;并越来越多的应用到计算机系…

2022年09月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程&#xff08;1~8级&#xff09;全部真题・点这里 第1题&#xff1a;stack or queue 栈和队列都是常用的线性结构&#xff0c;它们都提供两个操作&#xff1a; Push&#xff1a;加入一个元素。 Pop&#xff1a;弹出一个元素。 不同的是&#xff0c;栈是”先进后出”&…

leetcode236. 二叉树的最近公共祖先(java)

二叉树的最近公共祖先 题目描述递归法代码演示 上期经典 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q …

Ae 效果:CC Light Rays

生成/CC Light Rays Generate/CC Light Rays CC Light Rays&#xff08;CC 光线&#xff09;可以创建从光源发出并能穿过图层内容的光线效果。常用于制作光线透过门窗或云层的场景&#xff0c;或者用于创建神奇或梦幻的氛围感。 本效果会被限制在源图层的大小范围之内。 ◆ ◆…

每日一题 98验证二叉搜索树(中序遍历)

题目 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a…