# 主键Sequence
针对有序列的数据库:比如Oracle,SQLServer等
让我们以Oracle举例:
我们可以通过以下几个简单步骤,就可以完成Mybatis-Plus主键Sequence的定义
## 1.定义`IKeyGenerator`的实现
Mybatis-Plus已经定义好了常见的数据库主键序列类:
比如:`OracleKeyGenerator`
> 如果你使用了`mybatis-plus-boot-starter`, 那么我们只需要在@Configuration类中定义好@Bean
```java
@Bean
public OracleKeyGenerator oracleKeyGenerator(){
return new OracleKeyGenerator();
}
```
> 如果没有使用`mybatis-plus-boot-starter`, 那么需要手动注入:
GlobalConfiguration配置KeyGenerator
```java
GlobalConfiguration gc = new GlobalConfiguration();
gc.setKeyGenerator(new OracleKeyGenerator());
```
## 2.配置KeySequence注解
实体类配置主键Sequence,指定主键@TableId(type=IdType.INPUT)//不能使用AUTO
```java
@TableName("TEST_SEQUSER")
@KeySequence("SEQ_TEST")//类注解
public class TestSequser{
@TableId(value = "ID", type = IdType.INPUT)
private Long id;
}
```
* 支持父类定义@KeySequence, 子类使用,这样就可以几个表共用一个Sequence
> 如果主键是String类型的,也可以使用
如何使用Sequence作为主键,但是实体主键类型是String
也就是说,表的主键是varchar2, 但是需要从sequence中取值
* 1.实体定义@KeySequence 注解clazz指定类型String.class
* 2.实体定义主键的类型String
* 3.注意:oracle的sequence返回的是Long类型,如果主键类型是Integer,可能会引起ClassCastException
```java
@KeySequence(value = "SEQ_ORACLE_STRING_KEY", clazz = String.class)
public class YourEntity{
@TableId(value = "ID_STR", type = IdType.INPUT)
private String idStr;
...
}
```
## 底层实现
mybatis原生提供了接口
先看下`com.baomidou.mybatisplus.core.metadata.TableInfoHelper`这个类:
```java
/**
* 自定义 KEY 生成器
*/
public static KeyGenerator genKeyGenerator(TableInfo tableInfo, MapperBuilderAssistant builderAssistant,
String baseStatementId, LanguageDriver languageDriver) {
IKeyGenerator keyGenerator = GlobalConfigUtils.getKeyGenerator(builderAssistant.getConfiguration());
if (null == keyGenerator) {
throw new IllegalArgumentException("not configure IKeyGenerator implementation class.");
}
String id = baseStatementId + SelectKeyGenerator.SELECT_KEY_SUFFIX;
Class<?> resultTypeClass = tableInfo.getKeySequence().clazz();
StatementType statementType = StatementType.PREPARED;
String keyProperty = tableInfo.getKeyProperty();
String keyColumn = tableInfo.getKeyColumn();
SqlSource sqlSource = languageDriver.createSqlSource(builderAssistant.getConfiguration(),
keyGenerator.executeSql(tableInfo.getKeySequence().value()), null);
builderAssistant.addMappedStatement(id, sqlSource, statementType, SqlCommandType.SELECT, null, null, null,
null, null, resultTypeClass, null, false, false, false,
new NoKeyGenerator(), keyProperty, keyColumn, null, languageDriver, null);
id = builderAssistant.applyCurrentNamespace(id, false);
MappedStatement keyStatement = builderAssistant.getConfiguration().getMappedStatement(id, false);
SelectKeyGenerator selectKeyGenerator = new SelectKeyGenerator(keyStatement, true);
builderAssistant.getConfiguration().addKeyGenerator(id, selectKeyGenerator);
return selectKeyGenerator;
}
```
1. 通过反射获取到实体的KeySequence注解,继而能拿到定义的Sequence序列名
2. 然后产生`SelectKeyGenerator`对象,这个对象是mybatis原生的主键生成器
3. 将`SelectKeyGenerator`绑定到insert/insertBatch的statement上面
4. 通过上述3步,就完成了自动注入主键生成的SQL
> `SelectKeyGenerator`对象是mybatis原生的主键生成器, 会在:执行sql之前调用主键生成器的方法获取主键结果,插入到insert语句中;
在执行成功之后把主键的值回塞到实体对象中,这样我们只需通过对象的getId()方法就可以获取到主键值
没有合适的资源?快使用搜索试试~ 我知道了~
springboot整合mybatis-plus项目源码示例
共355个文件
java:197个
sql:48个
xml:43个
需积分: 1 1 下载量 13 浏览量
2023-02-19
11:24:59
上传
评论
收藏 1.02MB RAR 举报
温馨提示
springboot整合mybatis-plus项目源码示例
资源推荐
资源详情
资源评论
收起资源包目录
springboot整合mybatis-plus项目源码示例 (355个子文件)
mvnw.cmd 5KB
config 315B
description 73B
exclude 240B
.gitignore 208B
HEAD 192B
HEAD 192B
HEAD 32B
HEAD 23B
pack-07a9d45718963d6f4bed35242c91e74c76fc1c15.idx 161KB
index 67KB
maven-wrapper.jar 46KB
ClassPathAutoMapperScanner.java 24KB
AutoMapperScannerConfigurer.java 15KB
LogicDeleteTest.java 12KB
CrudTest.java 9KB
PaginationTest.java 7KB
AutoMapperScannerRegistrar.java 7KB
WrapperTest.java 7KB
AutoMapperScan.java 7KB
MybatisPlusConfig.java 4KB
OptLockerTest.java 4KB
DeluxeTest.java 4KB
ReduceTest.java 3KB
AssociationTest.java 3KB
EnumTest.java 3KB
NoSpring.java 3KB
UserMapper.java 3KB
ResultmapTest.java 2KB
MysqlTest.java 2KB
MysqlInsertAllBatch.java 2KB
TypeHandlerTest.java 2KB
MybatisPlusConfig.java 2KB
PagehelperTest.java 2KB
DbConfigurations.java 2KB
SpringMvcTest.java 2KB
TenantTest.java 2KB
InjectorTest.java 2KB
UpdateWrapperTest.java 2KB
MysqlMetaObjectHandler.java 2KB
MyBaseMapper.java 2KB
ActiveRecordTest.java 2KB
MyInsertAll.java 2KB
ExecutionTest.java 2KB
MybatisPlusConfig.java 2KB
MySqlInjector.java 2KB
AutoMapperScans.java 1KB
MybatisPlusPageConfig.java 1KB
TestTypeHandler.java 1KB
SpringContext.java 1KB
UserController.java 1KB
IdGeneratorTest.java 1KB
IdStringTest.java 1KB
MyLogicSqlInjector.java 1KB
MybatisPlusConfig.java 1KB
MpJsonConfig.java 1KB
User.java 1KB
SequenceTest.java 1KB
RequestDataHelper.java 1KB
TestData.java 1KB
MpConfig.java 1KB
DynamicTableNameTest.java 1KB
CustomIdGenerator.java 1KB
MybatisPlusConfig.java 1KB
FindOne.java 1KB
User.java 1KB
package-info.java 1021B
TestDataMapper.java 1005B
AutoFillTest.java 1003B
MybatisPlusConfig.java 988B
DeleteAll.java 969B
MyMetaObjectHandler.java 967B
DeleteAll.java 957B
WalletListTypeHandler.java 908B
User.java 906B
User.java 905B
QuickStartTest.java 822B
UserService.java 822B
MyMetaObjectHandler.java 812B
UserMapper.java 811B
package-info.java 809B
MybatisPlusConfig.java 762B
UserMapper.java 754B
MybatisPlusOptLockerConfig.java 751B
MybatisPlusConfig.java 727B
User2.java 705B
UserPage.java 701B
User.java 692B
UserState.java 669B
MysqlDdl.java 666B
User.java 664B
User.java 661B
MyBaseMapper.java 660B
MapperClass.java 654B
AgeEnum.java 650B
MyPage.java 642B
PerformanceTest.java 630B
ChildMapper.java 620B
Woman.java 617B
Child.java 613B
共 355 条
- 1
- 2
- 3
- 4
资源评论
一枚务实的码农
- 粉丝: 464
- 资源: 40
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现夜间车牌识别程序(1).rar
- 基于matlab实现图像处理,本程序使用背景差分法对来往车辆进行检测和跟踪.rar
- 基于matlab实现视频监控中车型识别代码,自己写的,希望和大家多多交流.rar
- sdk.config
- 基于matlab实现配电网三相潮流计算方法,对几种常用的配电网潮流计算方法进行了对比分析.rar
- 基于matlab实现配电网潮流 经典33节点 前推回代法潮流计算 回代电流 前推电压 带注释.rar
- 基于matlab实现模拟退火遗传算法的车辆调度问题研究,用MATLAB语言加以实现.rar
- 基于matlab实现蒙特卡洛的的移动传感器节点定位算法仿真代码.rar
- 华中数控系统818用户说明书
- 基于matlab实现卡尔曼滤波器完成多传感器数据融合 对多个机器人的不同传感器数据进行融合估计足球精确位置.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功