Mybatis Plus使用技巧和实践(Mybatis-plus官方文档的补充)

lambdaQueryWrapper常用方法 apply(“date_format(dateColumn,‘%Y-%m-%d’)={0}”,“2022-02-08”)------>date_format(dateColum,‘%Y-%m-%d’)=‘2022-02-08’and(i->i.eq(“name”,“张三”).ne(“age”,20)------>and(name=‘张三’andage20)notLike(“name”,“张三”)------>namenotlike‘%张三%’... 阅读详情

概述

上一篇介绍了Mybatis-Plus(简称MP)的使用介绍,包括了代码生成器、CRUD接口,分页插件、逻辑删除、乐观锁等。此篇是上一篇的衔接,如果没有看过请先看Mybatis Plus的使用(Mybatis增强工具)。今天不讲MP的API、CRUD接口,主要介绍下实践技巧和官方文档的扩展说明,相信熟悉了这篇文章后,你将对MP的使用将会更熟练。理解有限,有错误请指正。

一、注解的使用

@TableName-数据库表名称和实体关系配置注解 -- 放在类上

属性类型必须指定默认值描述
valueString否""数据库的表名
schemaString否""schema(@since 3.1.1)数据库库名
keepGlobalPrefixboolean否false是否保持使用全局的 tablePrefix 的值(如果设置了全局 tablePrefix 且自行设置了 value 的值)(@since 3.1.1)-一般不用
resultMapString否""xml 中 resultMap 的 id
autoResultMapboolean否false是否自动构建 resultMap 并使用(如果设置 resultMap 则不会进行 resultMap 的自动构建并注入)(@since 3.1.2)

@TableId-数据库主键字段 -- 放在成员变量上,使用在数据库主键值不是"id"的情况,比如主键是“user_id”,可以@TableId("user_id")

属性类型必须指定默认值描述
valueString否""主键字段名
typeEnum否IdType.NONE主键类型

 

@TableField -(此注解不能和@TableId同时使用)- 处理数据库字段和实体不对应情况,及如果字段是数据库关键字如‘level’,‘status’等,可以改成这样@TableField(value = "`level`")

属性类型必须指定默认值描述
valueString否""字段名
elString否""映射为原生 #{ ... } 逻辑,相当于写在 xml 里的 #{ ... }部分
existboolean否true是否为数据库表字段,如果为false则为:排除非表字段,实体向数据库插入或更新时不会拼接此字段。
conditionString否""字段 where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 %s=#{%s},默认条件是根据参数做“等值”查询,一般都是等值查询,如果不是请参考
updateString否""字段 update set 部分注入, 例如:update="%s+1":表示更新时会set version=version+1(该属性优先级高于 el 属性)
strategyEnum否FieldStrategy.DEFAULT字段验证策略 3.1.2+使用下面3个替代
insertStrategyEnumNDEFAULT(因为DEFAULE是默认参考全局配置,全局配置默认是NOT_NULl),说明:就是在插入时是否对null字段添加到insert to table 的字段中去。举例:NOT_NULL: insert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#{columnProperty}</if>) (since v_3.1.2)
updateStrategyEnumNDEFAULT举例:IGNORED: update table_a set column=#{columnProperty} (since v_3.1.2)
whereStrategyEnumNDEFAULT举例:NOT_EMPTY: where <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if> (since v_3.1.2)
fillEnum否FieldFill.DEFAULT字段自动填充策略
selectboolean否true是否进行 select 查询
keepGlobalFormatboolean否false是否保持使用全局的 format 进行处理(@since 3.1.1)

这里着重说明一下fill属性的使用(自动填充-默认不填充) 。自动填充就是对字段在insert或update中不用自己设置值,MP自动设置其默认值,不过默认值需要自己设置,常常用在createTime和updateTime的字段上,createTime一般使用INSERT策略,updateTime一般使用INSERT_UPDATE策略。使用分两步。

第一步:在实体字段上添加@TableFiedl(fill = FiedlFill.填充策略),填充策略有4种如下:

值描述
DEFAULT默认不处理
INSERT插入时填充字段
UPDATE更新时填充字段
INSERT_UPDATE插入和更新时填充字段
@TableField(fill = FieldFill.INSERT) // 创建时间只在添加是填充
private Date createTime;

@TableField(fill = FieldFill.INSERT_UPDATE) // 更新时间在添加和更新时都填充
private Date updateTime;

第二步:自定义类实现MetaObjectHandler类即可,重写填充策略的两个方法用于insert和update,关键的是setFieldValByName()方法,第一个参数是实体的属性,第二个参数是设置的默认值。

@Component
public class MetaObjectHandlerConfig implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        setFieldValByName("createTime", new Date(), metaObject);
        setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime",new Date(), metaObject);
    }
}

这样在实体插入或更新的时候就不用每次都设置像createTime这种字段的值,委托给MP来自动填充了,是不是很厉害。

二、使用实践

2.1 强大的条件构造器

2.1.1 条件构造器中condition的使用

条件构造器所有条件有个重载的方法,第一个入参boolean condition(表示该条件是否加入最后生成的sql中,默认true)。

场景:Controller中由前端传递过来的查询条件,比如查询所有列表信息,如果前端传递过来个name值,表示通过name进行筛选,当name传非空值时才添加查询条件,正常情况下我们可能会这样使用:

@GetMapping("/list")
public Object index(@RequestParam(value = "name", required = false) String name){
    QueryWrapper<Customer> qw = new QueryWrapper<>();
    if (StringUtils.isNoneBlank(name)) {
        qw.eq("name", name);
    }
    return customerService.list(qw);
}

如果筛选的条件比较多,那代码就不好看了。MP提供了查询时根据条件来判断,决定是否加入查询条件语句的方法,就说是condition为true则加入后面的条件,false则不会加入条件:

public Object index(@RequestParam(value = "name", required = false) String name){
    QueryWrapper<Customer> qw = new QueryWrapper<>();
    qw.eq(StringUtils.isNoneBlank(name), "name", name);
    return customerService.list(qw);
}

2.1.2 仅查询数据库部分字段

当我们使用条件构造器查询数据库时,默认查询所有实体字段,如果只需要id和name两个字段的值,使用select(String column...)方法可以完成,执行查询的sql如(select id, name from user where xxxx)。
注意:返回的值依然是实体对象,只是除了id和name其他都是null。

QueryWrapper<Customer> qw = new QueryWrapper<>();
qw.select("id", "name");
List<Customer> list = customerService.list(qw);

一般条件构造器添加了select字段后,使用普通的list()方法查询出实体就没有必要了,因为带着一堆null的值很不爽,实践是查询方法使用listMap()来查询,这样会根据查询语句中select的具体字段来赋值给map,如下示例中map只有id和name两个key了。

QueryWrapper<Customer> qw = new QueryWrapper<>();
qw.select("id", "name");
List<Map<String, Object>> list = customerService.listMaps(qw);
return list;

2.1.3 告别“条件构造器”使用"Lambda条件构造器"

使用LambdaQueryWrapper条件构造器和QueryWrapper构造器相比方法几乎相同,唯一不同的就是传递条件的表字段不是通过手敲的方式而是使用lambda的形式来完成获取表字段。这样就不用担心将 “name”写成“nema”了,例子中使用方法引用来获取name的字段。

三种创建LambdaQueryWrapper方式,个人推荐第二种,只在普通QueryWrapper构造器前面加上Lambda即可完成构造:

LambdaQueryWrapper<Customer> lambda = new QueryWrapper<Customer>().lambda();
LambdaQueryWrapper<Customer> lambda2 = new LambdaQueryWrapper<>();
LambdaQueryWrapper<Customer> lambda3 = Wrappers.lambdaQuery();
LambdaQueryWrapper<Customer> lqw = new LambdaQueryWrapper<>();
lqw.eq(Customer::getName, "Tom"); // 表字段使用lambda的方法引用来获取
List<Map<String, Object>> list = customerService.listMaps(lqw);

当然LambdaQueryWrapper的select()中的查询字段也需要使用lambda来获取字段名称。

2.2 万剑归宗的查询LambdaQueryChainWrapper(链式条件构造器查询)

前面的查询都是创建一个条件构造器,再通过mapper或service以条件构造器为参数进行查询。LambdaQueryChainWrapper将前面的两句合二为一,一句来完成带条件的查询。使用起来就是:MP简直想起飞。

@Autowired
private CustomerMapper customerMapper;

@Test
public void contextLoads() {
    List<Customer> list = new LambdaQueryChainWrapper<Customer>(customerMapper)
            .select(Customer::getId, Customer::getName)
            .like(Customer::getName, "王").list();
    System.out.println(list);
}

创建LambdaQueryChainWrapper对象需要传递mapper对象,虽然酒好不能贪杯,请酌情使用链式查询。还有个缺点链式查询只有list()和one()两个方法获取数据,返回的都是实体对象或实体对象的集合,没有对应的Map()查询方法。

2.3 自定义SQL

项目中自己写sql也是在所难免的,可这么强大的条件构造器我们也想使用怎么办呢,别着急MP也帮我们想到了。两处注意事项:

第一处:在自己的mapper接口文件中添加自己的查询方法,只需要传递@Param(Constants.WRAPPER) Wrapper wrapper条件构造器参数即可,MP会自动赋值给wrapper。

List<MysqlData> getMyself(@Param(Constants.WRAPPER) Wrapper wrapper);

第二处:在xml文件中,使用(固定格式)${ew.customSqlSegment}作为参数放在表名的后面就可以了。

<select id="getMyself" resultType="MysqlData">
	SELECT * FROM mysql_data ${ew.customSqlSegment}
</select>

三、两款用于开发环境的sql打印、分析功能的插件

3.1 执行 SQL 分析打印插件(第三方插件)

该功能依赖 p6spy 组件,完美的输出打印 SQL 及执行时长,对于开发时研究sql语句很有用途。

3.1.1 添加依赖

<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.8.1</version>
</dependency>

3.1.2 修改数据库连接配置为p6spy的配置

只需要改动driver和url即可,如下配置

spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
spring.datasource.url=jdbc:p6spy:mysql://127.0.0.1:3306/database?useUnicode=true&characterEncoding=utf-8

3.1.3 添加p6spy的配置文件spy.properties

module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,batch,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

3.1.4 运行sql语句,控制台查看,则会有sql运行语句、消耗时间信息,如下图:sql消耗了37ms

3.2 MP自带sql性能分析插件

MP自带了sql性能分析拦截器,用于输出每条 SQL 语句及其执行时间,只需要定义一个bean就可以用来做性能分析。如果对 SQL 的打印效果要求较高,请使用上面提到的第三方扩展 执行 SQL 分析打印 功能。

3.2.1 配置性能分析

  • spring boot方式配置(推荐)
  • @Bean
    @Profile({"dev","test"})// 设置 dev test 环境开启
    public PerformanceInterceptor performanceInterceptor() {
       return new PerformanceInterceptor();
    }
  • spring mvc方式配置
<plugins>
    <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor">
        <property name="maxTime" value="100" />
        <!--SQL是否格式化 默认false-->
        <property name="format" value="true" />
    </plugin>
</plugins>

3.2.1 运行sql语句,控制台查看,则会有sql运行语句、消耗时间信息,如下图:sql消耗了82ms

四、总结

通过这两篇文章,已经将MP的大部分功能都说明的差不多了,真的感谢MP的开发者们,写出这么好的东西,核心功能和各种插件都将DAO层的东西写尽了,再结合Spring Boot的强大,真的是开箱就开枪,让我们开发者可以开开心心的写业务。学会了MP后,感觉对后台业务操作的简化程度有了质的提高。

花了一天的时间边测试,边写文章,如果有错误的地方,请指正。希望对你理解Mybatis-Plus有更深的认识。

(完) 

mybatis 和 mybatis-plus 配置文件: 用于配置数据库连接和 MyBatis 运行时所需的各种特性,包含了设置和影响 MyBatis 行为的属性、映射文件的位置。mapper接口和mapper.xml之间需要遵循一定规则,才能成功的让mybatis将mapper接口和mapper.xml绑定起来。创建IUserMapper接口: 用于操作数据库CURD的方法。文件:用于mybatis配置文件读取数据库信息。resources 目录下 创建。resources 目录下 创建。resources 目录下 的。类:用于跟数据库字段做映射。 阅读详情

相关推荐

MyBatis与MyBatis-Plus核心对比与混合使用实践

在Java持久层开发中,ORM框架是连接应用与数据库的关键技术。MyBatis作为半自动化的持久层框架,通过XML或注解配置SQL语句,提供了高度的灵活性。而MyBatis-Plus在其基础上进行了增强,通过自动生成CRUD操作显著提升开发效率。理解两者的核心差异和适用场景,对于构建高性能数据访问层至关重要。在实际企业级应用中,混合使用模式能兼顾开发效率和灵活性,特别是在处理复杂动态SQL、多租户架构和逻辑删除等场景时。掌握Lambda表达式构造器和分页插件等特性,可以优化80%的常规数据库操作,同时保留原

weixin_33701564的博客 463

lambda的应用

1.配合mybatis-plus使用 1.1 数据的操作 lambdaQuery.select(UserCarBinding::getRegistrationId) //select值 .eq(UserCarBinding::getRegistrationId, userId) .eq(UserCarBinding::ge...

waitu88的博客 2216

使用循环神经网络预测温度

简介 本文以天气时间序列数据集为例,讨论如何使用深度学习模型预测未来天气温度。 使用的是由德国耶拿马克思普朗克生物地球化学研究所的气象站记录。 数据每10分钟记录一次,共记录14种不同的量,如气温、气压、湿度、风向等,原始数据可追溯到2003年,本例只使用2009-2016年的数据。 数据 下载并解压数据略。 加载数据: data_dir = r'E:\practice\tf2\temperature' fname = os.path.join(data_dir, 'jena_climate_2009_

guotianqing的博客 5281

Mybatis-Plus【吐血详解 一篇掌握】

😹 作者: 爱摸鱼的小凯 😻爱摸鱼的小凯的博客 😽 觉得博主文章写的不错的话,希望大家三连(✌关注,✌点赞,✌评论),多多支持一下!!!

只有登上山顶,才能看到那边的风光 2701

从零到一:构建嵌入式Arm-Linux的Qt MQTT通信框架全指南

本文详细指导如何在嵌入式Arm-Linux平台上从零构建Qt MQTT通信框架,涵盖交叉编译、环境配置、依赖库管理及性能优化。重点针对32位Arm架构,提供完整的工具链配置、编译步骤和实战部署方案,适用于物联网和工业控制等场景。

w8x9y0z1的博客 1000

从亚稳态到流片失败:SpyGlass CDC在5G芯片设计中的避坑指南

本文深入探讨了在复杂5G芯片设计中,如何利用SpyGlass CDC工具构建高效的时钟域交叉验证流程,以避免因亚稳态问题导致的流片失败。文章结合实战经验,详细解析了从约束编写、时钟复位完整性检查到层次化验证和特殊场景处理的全过程,并强调了精准的检查约束是确保验证有效性的基石,旨在帮助设计团队安全跨越异步时钟域的雷区。

weixin_29168153的博客 444

mybatis plus 查询的几种方式

select 指定SQL查询字段 SQL SET 字段 Wrapper方法 mybatis in

m0_60961213的博客 2264

Windows下用Anaconda安装d2l库避坑指南(附PermissionError解决方案)

本文详细介绍了在Windows系统下使用Anaconda安装d2l库的完整指南,特别针对常见的PermissionError问题提供了多种解决方案。从环境准备到库安装,再到VSCode配置和数据路径处理,帮助读者顺利搭建深度学习环境并运行《动手学深度学习》的代码示例。

3a9bq4r8t2y的博客 224

springboot整合ssmp案例

制作流程 导入依赖后Maven刷新 druid-spring-boot-starter//版本号 spring-webmvc lombok//简化pojo开发 spring-boot-starter-jdbc spring-boot-starter-web mybatis-plus-boot-starter//版本号 mysql-connector-java spring-boot-starter-test 实体类pojo:对应数据表单 实体类名=表名 属性=列名 驼峰命名问题可以选择关闭or

ZJH 2434

红队内网攻防渗透:内网渗透之内网对抗:实战项目&VPC1打靶&PHP-RCE&三层代理路由&防火墙上线&密码喷射&域控提权

上面已经抓取到了密码,但是我们通过拓扑分析看,要想上线win10只能通过正向shell,因为win7的防火墙是开的,win10反向主动连接肯定入站规则拦截,而win10自己没有开防火墙,所以win7主动正向连接就可以上线。win7开启了防火墙,入站规则肯定是会拦截我们的请求的,所以我们需要反向上线,让win7主动来连接我们。这里扫描发现是存在ms17010漏洞的,但是想上线192.168.2.142的话,我们没有路由是上线不了的,这里有两种办法:一种msf直接生成后门,另一种cs移植后门到msf。

HACKONE的博客 909

Matlab安装硬件支持包、simulink离线安装硬件支持包安装,离线安装ESP32、stm32等安装包,Are you up-to-date on SoftWare Maintenance?

注意:如果提示出现“没有可从此位置安装的兼容支持包后,这个问题,请查看步骤5,是不是没有按照步骤5进行操作.一般情况下出现“没有可从此位置安装的兼容支持包”后,重新安装选择了默认路径就可以成功。如果不是很清楚,直接安装在默认的文件夹下面,即使这个文件夹下没有matlab相关的文件夹,也要这么下载,没有为什么,切记尽量按默认路径安装,更改下载的路径不成功,别怪我没提醒。:下载到哪里非常重要,如果下载的不是默认的路径下,就需要将其中这个的是这个archives文件夹,连同其他文件一并要复制出来,拷贝到。

pvmsmfchcs的博客 1744

你应该知道的这些Mybatis-Plus使用技巧

最近在用 Mybatis-Plus,嗯,真香!!!今天就来说说 Mybatis-Plus 的那些使用技巧 1、条件查询(QueryWrapper) QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("age", 20); List<UserInfo> list = userInfoMapper.selectList(queryWrapper ); 以上就是查询用户表,用

JACKAL 21万+

黑猫带你学UFS协议第8篇:UFS电气特性详解(Power、CLK、Reset等)

UFS强制支持secure mode。UFS设备可能会存储个人或者公司的信息,UFS提供把数据永久从设备上移除的功能,并且保证对存储介质进行逆向恢复数据也恢复不回来原有数据。安全模式是以逻辑单元为单位进行应用的,不同的逻辑单元可以有不同的安全模式。由于UFS设备的存储介质不同,所以把数据安全从存储介质上移除方式会有不同,spec提供了三种通用的移除方法,UFS设备至少支持其中一种。● 对存储的位置进行一次擦除操作。● 对存储的位置使用单一字符(比如0xAA)覆盖写,然后进行擦除。.........

黑猫奥利奥的博客 4075

【MyBatis-Plus】MyBatis进阶使用

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

让优秀成为一种习惯! 4812

虚幻商城 Quixel 免费资产一键入库

在免费领取所有Megascans之后,我们只是有了获取 Quixel Megascans 资产的资格,但是没有入 Fab 库,本文将讲解通过脚本将 Quixel 所有资产入库 Fab。

一碗清深的博客 3268

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Mybatis-Plus和Mybatis的区别

Mybatis-Plus是一个Mybatis的增强工具,它在Mybatis的基础上做了增强,却不做改变。我们在使用Mybatis-Plus之后既可以使用Mybatis-Plus的特有功能,又能够正常使用Mybatis的原生功能。Mybatis-Plus(以下简称MP)是为简化开发、提高开发效率而生,但它也提供了一些很有意思的插件,比如SQL性能监控、乐观锁、执行分析等。 Mybatis虽然已经给我...

java开发郭靖 18万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

mybatis-plus中QueryWrapper的使用技巧

前言:mybatis-plus使用场景 mybatis大家都有使用过,既面向对又灵活可配。不友好的地方是,会随着使用出现大量xml文件和SQL语句。 此时,mybatis-plus应运而生,对mybatis做了无侵入增强,还可以简化SQL语句,或者不写SQL语句。 MyBatis-Plus 官网:https://mp.baomidou.com/ MyBatis-Plus 官方文档:https://mp.baomidou.com/guide/ 码云项目地址:https://gitee.com/baomidou

WLQ0621的博客 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【JAVA 进阶】Mybatis-Plus 实战使用与最佳实践

MyBatis-Plus实战指南:提升Java开发效率的利器 MyBatis-Plus作为MyBatis的增强工具,在不改变原有架构的基础上,显著提升了开发效率。文章从实战角度出发,详细介绍了MyBatis-Plus的核心特性和环境搭建。核心特性包括无侵入设计、强大的CRUD操作、Lambda调用支持、主键自动生成、代码生成器等。环境搭建部分提供了Maven和Gradle两种依赖配置方式,并详细讲解了SpringBoot项目中的数据库连接配置、Druid连接池设置以及MyBatis-Plus特有的全局配置选

CodeSuc 的技术博客 3017

MyBatis Plus 如何实现连表查询 mybatis plus join

MyBatis-Plus 连表插件 mybati-plus-join, 完全按照mybats plus API风格扩展,支持一对一返回映射,多对多返回映射,自定义返回ResultType,引入后不会对原有的业务产生影响, 只拓展不修改

qq_31116181的博客 6万+

MyBatis-Plus 官方文档

myBatis-plus 官方文档 https://mp.baomidou.com/

渣渣的博客 2万+

使用Mybatis-plus和Mybatis出现版本不兼容的问题

java: 无法访问org.mybatis.spring.annotation.MapperScan 错 误的类文件: /D:/Maven/Repository/org/mybatis/mybatis-spring/3.0.3/mybatis-spring-3.0.3.jar An attempt was made to call a method that does not exist. The attempt was made from the following location:

weixin_72258036的博客 5123

Mybatis-Plus和Mybatis区别

核心关系:MyBatis-Plus 是 MyBatis 的增强版,完全兼容 MyBatis,不改变原有使用方式,仅做功能补充。核心差异:MP 提供了「通用 CRUD、条件构造器、分页插件、代码生成器」等开箱即用的功能,大幅减少重复代码;而原生 MyBatis 更侧重 SQL 的手动控制。选型建议:优先选 MyBatis-Plus(开发效率更高),遇到复杂 SQL 时,仍可像原生 MyBatis 一样手动编写,兼顾效率与灵活性。

weixin_53050448的博客 1228

MyBatis-Plus介绍和使用

MP

weixin_38568503的博客 1万+

Mybatis-plus最佳实践

mybatis-plus最佳实践及方法清单

qq_35316141的博客 1123

关于mybatis-plus 和 mybatis-plus-boot-starter 异同点分析

在采用mybatis-plus做代码生成器时,我前面的文章https://blog.csdn.net/u012329294/article/details/90473681讲过,必须把其他的mybatis-plus删掉,只留下mybatis-plus-boot-starter。 但用mybatis-plus-boot-starter生成的代码,放在mybatis-plus依赖环境中, &l...

u012329294的专栏 2万+

MyBatis和MyBatis-Plus

MyBatis-Plus不是要替代MyBatis,而是在MyBatis基础上的增强,提供了更多开箱即用的功能,让开发者能够更专注于业务逻辑而不是重复的基础编码工作。对于大多数新项目,特别是追求开发效率的团队,MyBatis-Plus是更好的选择。它保留了MyBatis的所有灵活性,同时大幅提升了开发效率。MyBatis-Plus提供了多种灵活的方式来处理非规范命名的数据库表。java// 自定义表名处理器@Component@Override// 根据业务逻辑动态返回表名。

BillKu的博客 1265
上一篇: IDEA实用快捷键汇总及使用技巧【持续更新】
下一篇: SpringBoot启动程序方式(服务器启动SpringBoot)
小流至江河
博客等级 码龄9年 223粉丝 53原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值