【Java】MybatisPlus

MybatisPlus

MybatisPlus是在mybatis基础上的一个增强型工具。它对mybatis的一些操作进行了简化,能够提高开发的效率。

springboot整合了mybatis之后,其实已经非常方便了,只需要导入mybatis的包后,在配置文件中编写数据源信息,然后在数据层接口上添加@Mapper注解。

但是,现在还有一个不完美的地方:数据层接口需要自己写方法,并且需要写注解写sql语句。这些都是增删改查的sql,其实重复性很大,如果能够让框架负责这部分代码的生成就完美了。

MybatisPlus正是这样的一门技术。

1、MybatisPlus快速入门

去除mybatis的依赖,转而导入MybatisPlus的依赖。

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

然后将dao接口继承BaseMapper<实体类>。dao层接口不再需要写任何查询方法,已经具有了增删改查的方法。

mp具有动态sql的功能。比方说updateById方法是传入一个实体类,这个实体类中要有id信息,会根据id去修改对应的记录。但是,如果除了id以外其他属性不置任何值,那么修改的记录不会有任何改变。如果除了id以外还有一个属性被set了(假设总共有10个属性),其他九个属性都是空的,那么修改的记录只会修改被修改的那个值而不会改变其他属性。

2、标准数据层开发

  • 标准分页功能制作

    mp有一个分页拦截器专门用来做分页,没有配置这个拦截器就没有分页功能,配上了才有分页功能。

    在这里插入图片描述

//当前页第1页,每页条数2条
IPage<Brand> iPage=new Page<>(1,2);
brandDao.selectPage(iPage,null);
System.out.println("当前页:"+iPage.getCurrent());
System.out.println("一页条数:"+iPage.getSize());
System.out.println("一共多少页:"+iPage.getPages());
System.out.println("一共多少条数据:"+iPage.getTotal());
System.out.println("具体数据:"+iPage.getRecords());
  • 条件查询

需要创建一个容器,并填入查询条件然后交给数据层接口的方法进行查询。

QueryWrapper<Emp> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(Emp::getId, empId).eq(Emp::getEmpStatus, "1");
Emp emp = empMapper.getOne(wrapper);
  • 动态条件查询

在条件中设置不为空或者不为null才能添加条件即可。

LambdaQueryWrapper<Emp> wrapper = new LambdaQueryWrapper<Emp>().eq(!"".equals(vo.getEmpEmail()), Emp::getEMail, vo.getEmpEmail()).eq(!"".equals(vo.getEmpName()), Emp::getName, vo.getEmpName()).eq(!"".equals(vo.getEmpPhone()), Emp::getMobilePhone, vo.getEmpPhone()).eq(!"".equals(vo.getEmpPosition()), Emp::getPosition, vo.getEmpPosition()).eq(!"".equals(vo.getStoreId()), Emp::getStoreId, vo.getStoreId()).eq(Emp::getUserId, userId);
  • 逻辑删除

逻辑删除并不是真的删除,而是添加了一个表示删除的字段,如果这个字段被标记为1,就表示被删除,如果这个字段被标记为0,就表示不被删除。之后进行查询也是通过这个删除字段确定查询内容。

在这里插入图片描述

设置完逻辑删除字段以及加上注解之后,接下来使用deleteById方法,不会将记录删除,只会将逻辑删除字段的值置为1。查询时也会默认自动加上逻辑删除字段的条件,只会查询逻辑删除为1的内容。

如果有太多实体,也可以在springboot的配置文件中添加全局配置,将所有实体中的对应字段都设置为逻辑删除字段。实体中就不用加上注解了。

在这里插入图片描述

  • 复杂逻辑查询

虽然mp主要是为了简化sql语句,但是对于复杂的逻辑,还是要写sql语句的。

所以仍然可以使用在接口中定义方法进行注解的方式查询,仍然可以使用sql映射文件编写复杂的逻辑。

3、字段映射以及表名映射

这一部分主要是应用于实体类中的。

  • 表名映射

在实体类名上方使用@TableName(“数据库中的表名称”)来进行映射。

  • 字段映射

在实体类的属性(非主键)上方使用@TableField(字段名,被查询时是否展示,在表中是否存在)

在实体类的属性(主键)上方使用@TableId(字段名,type=id生成方式)

id生成方式可以自己指定。具体有以下类型:

在这里插入图片描述

注意选择雪花算法生成id类型要是long。不然存不下。

除了在注解中指定使用id生成策略以外,可以使用在springboot的配置文件中设置全局配置:

在这里插入图片描述

3、代码生成器
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;/*** @author* @since*/
public class CodeGenerator {@Testpublic void run() {// 1、创建代码生成器AutoGenerator mpg = new AutoGenerator();// 2、全局配置GlobalConfig gc = new GlobalConfig();
//        String projectPath = System.getProperty("user.dir");//生成代码的位置gc.setOutputDir("目录");//gc.setOutputDir("D:\\IDEA2020\\Project\\2023fuchuang\\system\\intelligent_schedule_system-master\\service\\schedule_service" + "/src/main/java");gc.setAuthor("作者名");gc.setOpen(false); //生成后是否打开资源管理器gc.setFileOverride(false); //重新生成时文件是否覆盖gc.setServiceName("%sService");	//去掉Service接口的首字母Igc.setIdType(IdType.ID_WORKER_STR); //主键策略gc.setDateType(DateType.ONLY_DATE); //定义生成的实体类中日期类型gc.setSwagger2(true);//开启Swagger2模式mpg.setGlobalConfig(gc);// 3、数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://localHost/iss_schedule?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf8");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("123456");dsc.setDbType(DbType.MYSQL);mpg.setDataSource(dsc);// 4、包配置PackageConfig pc = new PackageConfig();pc.setParent("com.iss");//包名pc.setModuleName("schedule"); //包名pc.setController("controller");pc.setEntity("entity");pc.setService("service");pc.setMapper("mapper");mpg.setPackageInfo(pc);// 5、策略配置StrategyConfig strategy = new StrategyConfig();//要生成的表strategy.setInclude("schedule_search");strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作strategy.setRestControllerStyle(true); //restful api风格控制器strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符mpg.setStrategy(strategy);// 6、执行mpg.execute();}
}

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

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

相关文章

10个得心应手的数据网站,助你完成数据科学项目

本文将介绍10个获取所需数据的网站&#xff0c;助力数据科学项目。 当你的数据对你来说很枯燥或毫无意义时&#xff0c;要激励自己学习数据科学&#xff0c;或做数据科学项目真的很困难。 本文将介绍10个得心应手的网站&#xff0c;在这些网站上你可以为数据科学项目获取一些非…

计算机视觉基础(12)——图像恢复

前言 我们将学习图像恢复相关知识。主要有图像恢复的定义、评价标准和实现图像恢复的方法。图像恢复任务包括图像去噪、去模糊、图像超分辨率、图像修复等&#xff1b;评价标准有峰值信噪比和结构相似性&#xff1b;图像超分辨的方法有传统方法和基于深度学习的方法&#xff1a…

[Ray Tracing: The Next Week] 笔记

前言 本篇博客参照自《Ray Tracing: The Next Week》教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingTheNextWeek.html 该教程在ray tracing in one weekend的基础上&#xff0c;增加了运动模糊、BVH树、Texture映射、柏林噪声、光照、体积…

做外贸其实也并没有那么容易

最近无意中看到一个视频&#xff0c;视频的内容是外贸博主和一个连线人的对话&#xff0c;连线人的诉求是如何做外贸&#xff1f;怎么能把外贸做好&#xff0c; 通过博主和这个人的沟通来看&#xff0c;这个连线的人他从来没有接触过外贸&#xff0c;也不愿意去别的外贸公司上…

【Vulnhub 靶场】【Funbox: Under Construction!】【简单】【20210719】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/funbox-under-construction,715/ 靶场下载&#xff1a;https://download.vulnhub.com/funbox/Funbox10.ova 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年07月19日 文件大小&#xff1a;1.3 GB 靶场作…

宋仕强论道之华强北山寨手机(三十)

要研究透彻深圳华强北&#xff0c;华强北的“山寨手机”是绕不过去的话题。它来的轰轰烈烈&#xff0c;造就华强北几十个亿万富翁&#xff0c;去的鼠头蛇尾留下一地鸡毛。其兴也勃焉&#xff0c;其亡也忽焉&#xff01;在华强北留下了财富的传奇故事&#xff0c;和失意者发疯跳…

ClickHouse 入门与实战教程

目录 1. ClickHouse 简介 什么是 ClickHouse&#xff1f; ClickHouse 的优势和特点 适用场景 2. 安装 ClickHouse 3. ClickHouse 的基本概念 4. ClickHouse 的基本操作 创建数据库和表、插入和查询数据 使用 MergeTree 引擎处理时序数据 管理分区 创建带有分区的 Mer…

RPA数据统计与展示

随着企业RPA机器人部署规模越来越庞大&#xff0c;更需要完善精细的管理与规划。这些进行自动化工作的数字员工&#xff0c;就像是传统的真实员工一样&#xff0c;也需要对日常的工作做好管理&#xff0c;对未来的发展做好规划&#xff0c;要实现这点&#xff0c;首先需要对RPA…

高精度电流源原理是什么

高精度电流源是一种能够提供准确、稳定的电流输出的设备。它被广泛应用于工业自动化、科学研究和仪器仪表等领域&#xff0c;用于检测、校准和驱动其他设备。 高精度电流源的原理是基于反馈控制和精密电路设计。下面西安安泰电子将详细介绍高精度电流源的原理。 高精度电流源包…

智能优化算法应用:基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于金豺算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.金豺算法4.实验参数设定5.算法结果6.参考文献7.MA…

云卷云舒:面向业务的智能运维(中)

接着聊&#xff1a;云卷云舒&#xff1a;面向业务的智能运维&#xff08;上&#xff09; 4、业务智能运维体系架构 4.1 智能运维核心要素 智能运维体系架构的建设应该考虑如下因素&#xff1a; 数据 我们要搭建智能运维平台&#xff0c;首先要数据驱动&#xff0c;数据驱动…

hashCode()方法如何理解?

大家好&#xff0c;我是"Java继父"伯约&#xff0c;假如这篇对大家有帮助的话求一个赞&#xff0c;另外文章末尾放了我从小白到架构师多年的学习资料。 hashCode() 返回散列值&#xff0c;而 equals() 是用来判断两个对象是否等价。等价的两个对象散列值一定相同&…