【海豚支付源码大全】【火鸟客服源码】【batis源码理解】mybatisplus源码分享

时间:2024-11-25 03:01:27 来源:源码干嘛用的 编辑:api读取url源码

1.MyBatis-Plus中如何使用ResultMap
2.Mybatis-plus使用TableNameHandler分表详解(附完整示例源码)
3.小书MybatisPlus第6篇-主键生成策略精讲
4.搞定IDEA mybatisplus代码生成器|不用写代码啦!码分!码分!码分

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特性,码分然而,码分海豚支付源码大全其单表性能受限于数据量,码分主要原因是码分B+树索引过大导致查询时索引无法完全加载到内存,磁盘读取频率增加,码分严重影响性能。码分分表成为解决策略之一,码分即将大量数据分布在多个表中,码分减少B+树索引大小,码分降低磁盘读取次数,码分提升性能。码分

       基础分表逻辑详解

       分表方式有两类常见方案:按日期分表与按ID取模分表。火鸟客服源码

       按日期分表

       通常在表名后添加年月日,适合用于存储按日期划分的统计数据或操作记录。在线展示仅需最近表中的数据,其余用于离线统计。

       按ID取模分表

       需ID生成器,如snowflake或分布式ID服务,保证相同ID的数据在同一表中。适用于保存用户基本信息、系统资源信息、购买记录等。此方式扩展性较差,数据增长后需进行分库再分表处理。

       Mybatis-plus中的分表实现

       Mybatis-plus提供内置分表方案,配置简便,适用于快速开发。batis源码理解

       动态表名处理器

       Mybatis-plus引入TableNameHandler接口实现动态表名生成,无需额外引入jar包,学习成本低。根据需求选择表名处理器,灵活定义生成规则。

       示例实现

       示例分为按日期和按ID取模两种分表方式,分别通过四个步骤实现。

       创建日期表名处理器

       实现动态表名生成逻辑,返回查询时使用的表名。

       创建ID取模表名处理器

       实现相对复杂,需要动态传入用于分表的ID值。新版本已优化,简化传参方式,避免使用MetaObject,使用其他方法传入参数。交易源码对接

       使用ThreadLocal管理参数

       为解决多线程参数修改问题,使用ThreadLocal定义参数,确保每次请求独立。

       加载表名处理器

       作为Mybatis-plus插件,初始化时创建实例并加载,实现分表逻辑。

       在Controller中使用

       通过Controller接口展示具体使用方法,集成分表逻辑。

       总结

       Mybatis-plus动态表名处理器提供了灵活定义表名生成规则的方案,支持按实际情况调整分表逻辑,促进性能优化。实际项目中需根据业务需求选择合适分表策略,并注意参数管理,确保系统稳定运行。

小书MybatisPlus第6篇-主键生成策略精讲

       本文为mybatis系列文档的dos 源码 分析第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等代码。

       完成上述步骤后,你的项目中将自动获得生成的代码,无需手动编写,节省了大量时间与精力。

copyright © 2016 powered by 皮皮网   sitemap