1.MyBatis-Plusä¸å¦ä½ä½¿ç¨ResultMap
2.Mybatis-plus使用TableNameHandler分表详解(附完整示例源码)
3.小书MybatisPlus第6篇-主键生成策略精讲
4.搞定IDEA mybatisplus代码生成器|不用写代码啦!码分!码分!码分
MyBatis-Plusä¸å¦ä½ä½¿ç¨ResultMap
MyBatis-Plus 对 MyBatis 码分åºæ¬é¶ä¾µå ¥ï¼å®å ¨å¯ä»¥ä¸ MyBatis æ··å使ç¨ï¼è¿ç¹å¾èµã
å¨æ¶åå°å ³ç³»åæ°æ®åºå¢å æ¥æ¹çä¸å¡æ¶ï¼ææ¯è¾åæ¬¢ç¨ MyBatis-Plus ï¼å¼åæçæé«ãå ·ä½ç使ç¨å¯ä»¥åèå®ç½ï¼æè èªå·±ä¸ææ¸ç´¢æåä¸ä¸ã
ä¸é¢ç®åæ»ç»ä¸ä¸å¨ MyBatis-Plus ä¸å¦ä½ä½¿ç¨ ResultMap ã
å ç个ä¾åï¼
æå¦ä¸ä¸¤å¼ 表ï¼
å ¶ä¸ï¼ tb_hero ä¸ç bid å ³è tb_book 表ç id ã
ä¸é¢å ç Hero å®ä½ç±»ç代ç ï¼å¦ä¸ï¼
注æäºï¼æç¹å°æ tb_hero 表ä¸ç bid å段æ å°æå®ä½ç±» Hero ä¸ç bookId å±æ§ã
MyBatis-Plus æå°åºç SQL 为ï¼
没æ¯ç ï¼ MyBatis-Plus ä¼æ ¹æ® @TableField æå®çæ å°å ³ç³»ï¼çæ对åºç SQL ã
MyBatis-Plus æå°åºç SQL 为ï¼
ä¹æ²¡æ¯ç ï¼å¯ä»¥çå°çæç SELECT ä¸æ bid åäºå«å bookId ã
æ¯å¦ç°å¨ææ³è¿æ¥ tb_hero ä¸ tb_book è¿ä¸¤å¼ 表ï¼å¦ä¸ï¼
æ¥è¯¢ MyBatis-Plus æå°åºç SQL 为ï¼
SQL没å¥é®é¢ï¼è¿æ»¤ä¸å页ä¹é½æ£å¸¸ï¼ä½æ¯æ¤æ¶ä½ ä¼åç° bookId å±æ§ä¸º null ï¼å¦ä¸ï¼
为ä»ä¹å¢ï¼
è°ç¨ BaseMapper ä¸å ç½®ç selectById() æ¹æ³å¹¶æ²¡æåºç°è¿ç§æ åµåï¼ï¼ï¼
åè¿å¤´æ¥å对æ¯ä¸ä¸å¨ HeroMapper ä¸èªå·±å®ä¹çæ¥è¯¢ä¸ MyBatis-Plus èªå¸¦ç selectById() æå¥ä¸åï¼è¿è®°å¾ä¸é¢çååçæµè¯åï¼çæçSQLæå¥ä¸åï¼
åæ¥ï¼ MyBatis-Plus 为 BaseMapper ä¸å ç½®çæ¹æ³çæSQLæ¶ï¼ä¼æ SELECT åå¥ä¸ bid åå«å bookId ï¼èèªå·±åçæ¥è¯¢ MyBatis-Plus 并ä¸ä¼å¸®ä½ ä¿®æ¹ SELECT åå¥ï¼ä¹å°±å¯¼è´ bookId å±æ§ä¸º null ã
å¨è¿éå°±æ¯ tb_hero 表ä¸ç bid å段æ å°æå®ä½ç±» Hero ä¸ç bid å±æ§ãè¿æ ·å½ç¶å¯ä»¥è§£å³é®é¢ï¼ä½ä¸æ¯æ¬ç¯è®²çéç¹ã
å¨ @TableName 设置 autoResultMap = true
ç¶åå¨èªå®ä¹æ¥è¯¢ä¸æ·»å @ResultMap 注解ï¼å¦ä¸ï¼
è¿æ ·ï¼ä¹è½è§£å³é®é¢ã
ä¸é¢ç®åçä¸æºç ï¼ @ResultMap("mybatis-plus_å®ä½ç±»å") æä¹æ¥çã
详æ è§ï¼ com.baomidou.mybatisplus.core.metadata.TableInfo#initResultMapIfNeed()
注æçä¸é¢çå符串 id çææï¼ä½ åºè¯¥å¯ä»¥æç½ã
æèï¼ è¿ç§æ¹å¼ç ResultMap é»è®¤æ¯å¼ºç»å¨ä¸ä¸ª @TableName ä¸çï¼å¦ææ¯æ个èåæ¥è¯¢æè æ¥è¯¢çç»æ并é对åºä¸ä¸ªçå®ç表æä¹åå¢ï¼æ没ææ´ä¼é çæ¹å¼ï¼
åºäºä¸é¢çæèï¼æåäºä¸é¢ç®åçå®ç°ï¼
å ³é®ä»£ç å ¶å®æ²¡æå è¡ï¼èå¿çä¸åºè¯¥ä¸é¾æã
è¿æ¯ç¨ä¾åæ¥è¯´ææ´ç´è§ã
ä¸é¢æ¯ä¸ä¸ªèåæ¥è¯¢ï¼
å ¶ä¸ BookAgg çå®ä¹å¦ä¸ï¼å¨å®ä½ç±»ä¸ä½¿ç¨äº @AutoResultMap 注解ï¼
Mybatis-plus使用TableNameHandler分表详解(附完整示例源码)
为何要分表
MySQL作为互联网系统中广泛应用的关系型数据库,具备ACID特性,码分然而,码分rt.jar源码其单表性能受限于数据量,码分主要原因是码分B+树索引过大导致查询时索引无法完全加载到内存,磁盘读取频率增加,码分严重影响性能。码分分表成为解决策略之一,码分即将大量数据分布在多个表中,码分减少B+树索引大小,码分降低磁盘读取次数,码分提升性能。码分
基础分表逻辑详解
分表方式有两类常见方案:按日期分表与按ID取模分表。iframe显示源码
按日期分表
通常在表名后添加年月日,适合用于存储按日期划分的统计数据或操作记录。在线展示仅需最近表中的数据,其余用于离线统计。
按ID取模分表
需ID生成器,如snowflake或分布式ID服务,保证相同ID的数据在同一表中。适用于保存用户基本信息、系统资源信息、购买记录等。此方式扩展性较差,数据增长后需进行分库再分表处理。
Mybatis-plus中的分表实现
Mybatis-plus提供内置分表方案,配置简便,适用于快速开发。dede源码bbs
动态表名处理器
Mybatis-plus引入TableNameHandler接口实现动态表名生成,无需额外引入jar包,学习成本低。根据需求选择表名处理器,灵活定义生成规则。
示例实现
示例分为按日期和按ID取模两种分表方式,分别通过四个步骤实现。
创建日期表名处理器
实现动态表名生成逻辑,返回查询时使用的表名。
创建ID取模表名处理器
实现相对复杂,需要动态传入用于分表的ID值。新版本已优化,简化传参方式,避免使用MetaObject,使用其他方法传入参数。rio驱动源码
使用ThreadLocal管理参数
为解决多线程参数修改问题,使用ThreadLocal定义参数,确保每次请求独立。
加载表名处理器
作为Mybatis-plus插件,初始化时创建实例并加载,实现分表逻辑。
在Controller中使用
通过Controller接口展示具体使用方法,集成分表逻辑。
总结
Mybatis-plus动态表名处理器提供了灵活定义表名生成规则的方案,支持按实际情况调整分表逻辑,促进性能优化。实际项目中需根据业务需求选择合适分表策略,并注意参数管理,确保系统稳定运行。
小书MybatisPlus第6篇-主键生成策略精讲
本文为mybatis系列文档的vuerouter源码解析第6篇,深入探讨Mybatis Plus的主键生成策略。 Mybatis Plus提供三种主键生成策略,优先级为局部注解 > 全局配置 > 默认(雪花算法)。下面逐一讲解。默认主键生成策略:雪花算法
Mybatis Plus若未配置主键策略,将默认使用雪花算法。此策略生成的主键类型为Long或String(对应MySQL为BIGINT或VARCHAR),通过接口IdentifierGenerator的nextId方法实现,默认类为DefaultIdentifierGenerator(雪花算法)。雪花算法由Twitter开源,生成长整型ID,核心逻辑包含毫秒数、机器ID和流水号等,确保高效生成分布式唯一ID。自定义主键策略
自mybatis-plus 3.3.0版本,支持五种主键生成策略。局部注解配置策略
局部注解配置策略,针对主键设置主键策略,采用注解方式。全局配置策略
全局配置策略适用于项目级主键生成需求。扩展使用:用户输入ID策略
特殊介绍:Input(用户输入ID)策略,来源可以是用户输入。Mybatis-Plus内置多种数据库主键序列,若不满足需求,可扩展IKeyGenerator接口。 以Oracle Sequence为例,配置实体类主键Sequence,指定策略为IdType.INPUT。 欢迎访问我的博客,分享精品内容。如对您有帮助,请点赞、分享,您的支持是我持续创作的动力。 近期精品内容推荐,期待您的关注。搞定IDEA mybatisplus代码生成器|不用写代码啦!!!
要搞定IDEA mybatisplus代码生成器,无需手动编写代码,只需几个步骤即可完成。
首先,确保具备以下条件:数据库、IDEA集成开发环境和执行此操作所需的耐心。
接下来,创建数据库并设计一张表。以Mysql为例,根据需求构建数据库结构。
在IDEA中,新建Springboot项目。在项目中创建一个名为generator的文件夹,并在其中建立一个类,命名为mpGenerator,此步骤非强制,可根据个人喜好命名。
引入mybatisplus生成器所需的依赖,确保IDEA环境能够识别并加载相关库。
配置application.yml文件,设置mybatisplus生成器的参数,如实体类生成路径、表名映射规则等,以便生成器按照设定规则生成代码。
在mpGenerator类中编写配置,详细定义生成器的行为,如生成的代码类型、生成目录等,确保生成符合项目需求的代码。
执行mpGenerator类中的main方法,启动生成器,它将根据先前设定的参数和规则,自动生成所需的实体类、接口、Mapper、Mapper XML等代码。
完成上述步骤后,你的项目中将自动获得生成的代码,无需手动编写,节省了大量时间与精力。