Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
973a923b
提交
973a923b
authored
8月 03, 2020
作者:
hccake
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
✨
mybatis-plus 扩展,批量插入支持
上级
128b9dc2
显示空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
192 行增加
和
0 行删除
+192
-0
MybatisPlusAutoConfiguration.java
...coder/mall/mybatis/core/MybatisPlusAutoConfiguration.java
+23
-0
CustomSqlMethodEnum.java
.../iocoder/mall/mybatis/core/enums/CustomSqlMethodEnum.java
+40
-0
CustomSqlInject.java
...n/iocoder/mall/mybatis/core/injector/CustomSqlInject.java
+23
-0
InsertByBatch.java
...oder/mall/mybatis/core/injector/method/InsertByBatch.java
+82
-0
CommonMapper.java
...ava/cn/iocoder/mall/mybatis/core/mapper/CommonMapper.java
+21
-0
spring.factories
...rter-mybatis/src/main/resources/META-INF/spring.factories
+3
-0
没有找到文件。
common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/MybatisPlusAutoConfiguration.java
0 → 100644
浏览文件 @
973a923b
package
cn
.
iocoder
.
mall
.
mybatis
.
core
;
import
cn.iocoder.mall.mybatis.core.injector.CustomSqlInject
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
;
import
org.springframework.context.annotation.Bean
;
import
com.baomidou.mybatisplus.core.injector.ISqlInjector
;
/**
* @author Hccake 2020/8/3
* @version 1.0
*/
public
class
MybatisPlusAutoConfiguration
{
/**
* 自定义方法扩展注入器
* @return ISqlInjector CustomSqlInject
*/
@Bean
@ConditionalOnMissingBean
(
ISqlInjector
.
class
)
public
ISqlInjector
sqlInjector
(){
return
new
CustomSqlInject
();
}
}
common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/enums/CustomSqlMethodEnum.java
0 → 100644
浏览文件 @
973a923b
package
cn
.
iocoder
.
mall
.
mybatis
.
core
.
enums
;
/**
* @author Hccake 2020/8/3
* @version 1.0
*/
public
enum
CustomSqlMethodEnum
{
/**
* 批量插入
*/
INSERT_BATCH
(
"insertByBatch"
,
"批量插入数据"
,
"<script>\n"
+
"INSERT INTO %s %s VALUES \n"
+
"<foreach collection=\"collection\" item=\"item\" separator=\",\"> %s\n </foreach>\n"
+
"</script>"
);
private
final
String
method
;
private
final
String
desc
;
private
final
String
sql
;
CustomSqlMethodEnum
(
String
method
,
String
desc
,
String
sql
)
{
this
.
method
=
method
;
this
.
desc
=
desc
;
this
.
sql
=
sql
;
}
public
String
getMethod
()
{
return
method
;
}
public
String
getDesc
()
{
return
desc
;
}
public
String
getSql
()
{
return
sql
;
}
}
common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/injector/CustomSqlInject.java
0 → 100644
浏览文件 @
973a923b
package
cn
.
iocoder
.
mall
.
mybatis
.
core
.
injector
;
import
cn.iocoder.mall.mybatis.core.injector.method.InsertByBatch
;
import
com.baomidou.mybatisplus.core.injector.AbstractMethod
;
import
com.baomidou.mybatisplus.core.injector.DefaultSqlInjector
;
import
java.util.List
;
/**
* 自定义 Sql 注入器,继承 MybatisPlus 提供的默认注入器
* @author Hccake 2020/8/3
* @version 1.0
*/
public
class
CustomSqlInject
extends
DefaultSqlInjector
{
@Override
public
List
<
AbstractMethod
>
getMethodList
(
Class
<?>
mapperClass
)
{
List
<
AbstractMethod
>
methodList
=
super
.
getMethodList
(
mapperClass
);
methodList
.
add
(
new
InsertByBatch
());
return
methodList
;
}
}
common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/injector/method/InsertByBatch.java
0 → 100644
浏览文件 @
973a923b
package
cn
.
iocoder
.
mall
.
mybatis
.
core
.
injector
.
method
;
import
cn.iocoder.mall.mybatis.core.enums.CustomSqlMethodEnum
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.core.injector.AbstractMethod
;
import
com.baomidou.mybatisplus.core.metadata.TableFieldInfo
;
import
com.baomidou.mybatisplus.core.metadata.TableInfo
;
import
com.baomidou.mybatisplus.core.metadata.TableInfoHelper
;
import
com.baomidou.mybatisplus.core.toolkit.StringUtils
;
import
com.baomidou.mybatisplus.core.toolkit.sql.SqlScriptUtils
;
import
org.apache.ibatis.executor.keygen.Jdbc3KeyGenerator
;
import
org.apache.ibatis.executor.keygen.KeyGenerator
;
import
org.apache.ibatis.executor.keygen.NoKeyGenerator
;
import
org.apache.ibatis.mapping.MappedStatement
;
import
org.apache.ibatis.mapping.SqlSource
;
import
java.util.List
;
/**
* 批量插入
* @author Hccake 2020/8/3
* @version 1.0
*/
@SuppressWarnings
(
"all"
)
public
class
InsertByBatch
extends
AbstractMethod
{
private
final
static
String
ITEM
=
"item"
;
@Override
public
MappedStatement
injectMappedStatement
(
Class
<?>
mapperClass
,
Class
<?>
modelClass
,
TableInfo
tableInfo
)
{
KeyGenerator
keyGenerator
=
new
NoKeyGenerator
();
CustomSqlMethodEnum
sqlMethod
=
CustomSqlMethodEnum
.
INSERT_BATCH
;
// ==== 拼接 sql 模板 ==============
StringBuilder
columnScriptBuilder
=
new
StringBuilder
(
LEFT_BRACKET
);
StringBuilder
valuesScriptBuilder
=
new
StringBuilder
(
LEFT_BRACKET
);
// 主键拼接
if
(
tableInfo
.
havePK
())
{
columnScriptBuilder
.
append
(
tableInfo
.
getKeyColumn
()).
append
(
COMMA
);
valuesScriptBuilder
.
append
(
SqlScriptUtils
.
safeParam
(
ITEM
+
DOT
+
tableInfo
.
getKeyProperty
())).
append
(
COMMA
);
}
// 普通字段拼接
// PS:如有需要可在此实现插入字段过滤
List
<
TableFieldInfo
>
fieldList
=
tableInfo
.
getFieldList
();
for
(
TableFieldInfo
fieldInfo
:
fieldList
)
{
columnScriptBuilder
.
append
(
fieldInfo
.
getColumn
()).
append
(
COMMA
);
valuesScriptBuilder
.
append
(
SqlScriptUtils
.
safeParam
(
ITEM
+
DOT
+
fieldInfo
.
getProperty
())).
append
(
COMMA
);
}
// 替换多余的逗号为括号
columnScriptBuilder
.
setCharAt
(
columnScriptBuilder
.
length
()
-
1
,
')'
);
valuesScriptBuilder
.
setCharAt
(
valuesScriptBuilder
.
length
()
-
1
,
')'
);
// sql 模板占位符替换
String
columnScript
=
columnScriptBuilder
.
toString
();
String
valuesScript
=
valuesScriptBuilder
.
toString
();
String
sql
=
String
.
format
(
sqlMethod
.
getSql
(),
tableInfo
.
getTableName
(),
columnScript
,
valuesScript
);
// === mybatis 主键逻辑处理:主键生成策略,以及主键回填=======
String
keyColumn
=
null
;
String
keyProperty
=
null
;
// 表包含主键处理逻辑,如果不包含主键当普通字段处理
if
(
StringUtils
.
isNotBlank
(
tableInfo
.
getKeyProperty
()))
{
if
(
tableInfo
.
getIdType
()
==
IdType
.
AUTO
)
{
/** 自增主键 */
keyGenerator
=
new
Jdbc3KeyGenerator
();
keyProperty
=
tableInfo
.
getKeyProperty
();
keyColumn
=
tableInfo
.
getKeyColumn
();
}
else
{
if
(
null
!=
tableInfo
.
getKeySequence
())
{
keyGenerator
=
TableInfoHelper
.
genKeyGenerator
(
sqlMethod
.
getMethod
(),
tableInfo
,
builderAssistant
);
keyProperty
=
tableInfo
.
getKeyProperty
();
keyColumn
=
tableInfo
.
getKeyColumn
();
}
}
}
// 模板写入
SqlSource
sqlSource
=
languageDriver
.
createSqlSource
(
configuration
,
sql
,
modelClass
);
return
this
.
addInsertMappedStatement
(
mapperClass
,
modelClass
,
sqlMethod
.
getMethod
(),
sqlSource
,
keyGenerator
,
keyProperty
,
keyColumn
);
}
}
common/mall-spring-boot-starter-mybatis/src/main/java/cn/iocoder/mall/mybatis/core/mapper/CommonMapper.java
0 → 100644
浏览文件 @
973a923b
package
cn
.
iocoder
.
mall
.
mybatis
.
core
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.Collection
;
/**
* Mapper 层基类
* @author Hccake 2020/8/3
* @version 1.0
*/
public
interface
CommonMapper
<
T
>
extends
BaseMapper
<
T
>
{
/**
* 批量插入
* @param collection 批量插入数据
* @return ignore
*/
int
insertByBatch
(
@Param
(
"collection"
)
Collection
<
T
>
collection
);
}
common/mall-spring-boot-starter-mybatis/src/main/resources/META-INF/spring.factories
0 → 100644
浏览文件 @
973a923b
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.iocoder.mall.mybatis.core.MybatisPlusAutoConfiguration
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论