Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
holden_csdn
tx-lcn
提交
1c5bf1e3
T
tx-lcn
项目概览
holden_csdn
/
tx-lcn
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
tx-lcn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
1c5bf1e3
编写于
9月 07, 2020
作者:
G
Gz
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
#501 使用接口解耦分析插入方法
上级
335f3bba
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
104 addition
and
50 deletion
+104
-50
txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/analyse/MysqlAnalyse.java
...com/codingapi/txlcn/tc/jdbc/sql/analyse/MysqlAnalyse.java
+63
-0
txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/analyse/SqlAnalyse.java
...a/com/codingapi/txlcn/tc/jdbc/sql/analyse/SqlAnalyse.java
+36
-0
txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/strategy/MysqlInsertAnalyseStrategy.java
...xlcn/tc/jdbc/sql/strategy/MysqlInsertAnalyseStrategy.java
+5
-46
txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/strategy/MysqlSqlDeleteAnalyseStrategy.java
...n/tc/jdbc/sql/strategy/MysqlSqlDeleteAnalyseStrategy.java
+0
-4
未找到文件。
txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/analyse/MysqlAnalyse.java
0 → 100644
浏览文件 @
1c5bf1e3
package
com.codingapi.txlcn.tc.jdbc.sql.analyse
;
import
net.sf.jsqlparser.expression.StringValue
;
import
net.sf.jsqlparser.expression.operators.relational.ExpressionList
;
import
net.sf.jsqlparser.expression.operators.relational.ItemsList
;
import
net.sf.jsqlparser.expression.operators.relational.MultiExpressionList
;
import
net.sf.jsqlparser.schema.Column
;
import
net.sf.jsqlparser.statement.insert.Insert
;
import
org.apache.commons.dbutils.QueryRunner
;
import
org.apache.commons.dbutils.handlers.MapListHandler
;
import
java.sql.Connection
;
import
java.sql.SQLException
;
import
java.util.List
;
import
java.util.Map
;
public
class
MysqlAnalyse
implements
SqlAnalyse
{
@Override
public
boolean
singleInsertAnalyse
(
String
sql
,
Connection
connection
,
Insert
statement
,
ItemsList
itemsList
,
String
pk
,
int
pkIndex
)
throws
SQLException
{
if
(
itemsList
instanceof
ExpressionList
)
{
ExpressionList
expressionList
=
(
ExpressionList
)
itemsList
;
if
(
pkIndex
>
-
1
){
String
defaultValue
=
expressionList
.
getExpressions
().
get
(
pkIndex
).
toString
();
if
(!
"NULL"
.
equals
(
defaultValue
.
toUpperCase
())){
return
true
;
}
expressionList
.
getExpressions
().
remove
(
pkIndex
);
statement
.
getColumns
().
remove
(
pkIndex
);
}
QueryRunner
queryRunner
=
new
QueryRunner
();
List
<
Map
<
String
,
Object
>>
insert
=
queryRunner
.
insert
(
connection
,
sql
,
new
MapListHandler
());
statement
.
getColumns
().
add
(
new
Column
(
pk
));
expressionList
.
getExpressions
().
add
(
new
StringValue
(
insert
.
toString
()));
}
return
false
;
}
@Override
public
boolean
multiInsertAnalyse
(
String
sql
,
Connection
connection
,
Insert
statement
,
ItemsList
itemsList
,
String
pk
,
int
pkIndex
)
throws
SQLException
{
if
(
itemsList
instanceof
MultiExpressionList
)
{
MultiExpressionList
multiExpressionList
=
(
MultiExpressionList
)
itemsList
;
if
(
pkIndex
>
-
1
){
for
(
ExpressionList
expressionList
:
multiExpressionList
.
getExprList
())
{
String
defaultValue
=
expressionList
.
getExpressions
().
get
(
pkIndex
).
toString
();
if
(!
"NULL"
.
equals
(
defaultValue
.
toUpperCase
())){
return
true
;
}
expressionList
.
getExpressions
().
remove
(
pkIndex
);
statement
.
getColumns
().
remove
(
pkIndex
);
}
}
QueryRunner
queryRunner
=
new
QueryRunner
();
List
<
Map
<
String
,
Object
>>
insert
=
queryRunner
.
insert
(
connection
,
sql
,
new
MapListHandler
());
statement
.
getColumns
().
add
(
new
Column
(
pk
));
for
(
int
i
=
0
;
i
<
multiExpressionList
.
getExprList
().
size
();
i
++)
{
multiExpressionList
.
getExprList
().
get
(
i
).
getExpressions
().
add
(
new
StringValue
(
insert
.
get
(
i
).
get
(
"GENERATED_KEY"
).
toString
()));
}
}
return
false
;
}
}
txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/analyse/SqlAnalyse.java
0 → 100644
浏览文件 @
1c5bf1e3
package
com.codingapi.txlcn.tc.jdbc.sql.analyse
;
import
net.sf.jsqlparser.expression.operators.relational.ItemsList
;
import
net.sf.jsqlparser.statement.insert.Insert
;
import
java.sql.Connection
;
import
java.sql.SQLException
;
public
interface
SqlAnalyse
{
/**
* 单表插入分析
* @param sql
* @param connection
* @param statement
* @param itemsList
* @param pk
* @param pkIndex
* @return
* @throws SQLException
*/
boolean
singleInsertAnalyse
(
String
sql
,
Connection
connection
,
Insert
statement
,
ItemsList
itemsList
,
String
pk
,
int
pkIndex
)
throws
SQLException
;
/**
* 多表插入分析
* @param sql
* @param connection
* @param statement
* @param itemsList
* @param pk
* @param pkIndex
* @return
* @throws SQLException
*/
boolean
multiInsertAnalyse
(
String
sql
,
Connection
connection
,
Insert
statement
,
ItemsList
itemsList
,
String
pk
,
int
pkIndex
)
throws
SQLException
;
}
txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/strategy/MysqlInsertAnalyseStrategy.java
浏览文件 @
1c5bf1e3
...
...
@@ -4,6 +4,7 @@ import com.codingapi.txlcn.tc.jdbc.database.DataBaseContext;
import
com.codingapi.txlcn.tc.jdbc.database.SqlAnalyseHelper
;
import
com.codingapi.txlcn.tc.jdbc.database.TableInfo
;
import
com.codingapi.txlcn.tc.jdbc.database.TableList
;
import
com.codingapi.txlcn.tc.jdbc.sql.analyse.MysqlAnalyse
;
import
lombok.extern.slf4j.Slf4j
;
import
net.sf.jsqlparser.JSQLParserException
;
import
net.sf.jsqlparser.expression.StringValue
;
...
...
@@ -30,6 +31,8 @@ import java.util.Map;
public
class
MysqlInsertAnalyseStrategy
implements
SqlSqlAnalyseHandler
{
private
MysqlAnalyse
mysqlAnalyse
;
@Override
public
String
mysqlAnalyseStrategy
(
String
sql
,
Connection
connection
,
Statement
stmt
)
throws
SQLException
,
JSQLParserException
{
boolean
defaultAutoCommit
=
connection
.
getAutoCommit
();
...
...
@@ -57,9 +60,9 @@ public class MysqlInsertAnalyseStrategy implements SqlSqlAnalyseHandler {
}
}
if
(
multiInsertAnalyse
(
sql
,
connection
,
statement
,
itemsList
,
pk
,
pkIndex
))
return
sql
;
if
(
m
ysqlAnalyse
.
m
ultiInsertAnalyse
(
sql
,
connection
,
statement
,
itemsList
,
pk
,
pkIndex
))
return
sql
;
if
(
singleInsertAnalyse
(
sql
,
connection
,
statement
,
itemsList
,
pk
,
pkIndex
))
return
sql
;
if
(
mysqlAnalyse
.
singleInsertAnalyse
(
sql
,
connection
,
statement
,
itemsList
,
pk
,
pkIndex
))
return
sql
;
connection
.
rollback
();
connection
.
setAutoCommit
(
defaultAutoCommit
);
...
...
@@ -67,50 +70,6 @@ public class MysqlInsertAnalyseStrategy implements SqlSqlAnalyseHandler {
return
statement
.
toString
();
}
private
boolean
singleInsertAnalyse
(
String
sql
,
Connection
connection
,
Insert
statement
,
ItemsList
itemsList
,
String
pk
,
int
pkIndex
)
throws
SQLException
{
if
(
itemsList
instanceof
ExpressionList
)
{
ExpressionList
expressionList
=
(
ExpressionList
)
itemsList
;
if
(
pkIndex
>
-
1
){
String
defaultValue
=
expressionList
.
getExpressions
().
get
(
pkIndex
).
toString
();
if
(!
"NULL"
.
equals
(
defaultValue
.
toUpperCase
())){
return
true
;
}
expressionList
.
getExpressions
().
remove
(
pkIndex
);
statement
.
getColumns
().
remove
(
pkIndex
);
}
QueryRunner
queryRunner
=
new
QueryRunner
();
List
<
Map
<
String
,
Object
>>
insert
=
queryRunner
.
insert
(
connection
,
sql
,
new
MapListHandler
());
statement
.
getColumns
().
add
(
new
Column
(
pk
));
expressionList
.
getExpressions
().
add
(
new
StringValue
(
insert
.
toString
()));
}
return
false
;
}
private
boolean
multiInsertAnalyse
(
String
sql
,
Connection
connection
,
Insert
statement
,
ItemsList
itemsList
,
String
pk
,
int
pkIndex
)
throws
SQLException
{
if
(
itemsList
instanceof
MultiExpressionList
)
{
MultiExpressionList
multiExpressionList
=
(
MultiExpressionList
)
itemsList
;
if
(
pkIndex
>
-
1
){
for
(
ExpressionList
expressionList
:
multiExpressionList
.
getExprList
())
{
String
defaultValue
=
expressionList
.
getExpressions
().
get
(
pkIndex
).
toString
();
if
(!
"NULL"
.
equals
(
defaultValue
.
toUpperCase
())){
return
true
;
}
expressionList
.
getExpressions
().
remove
(
pkIndex
);
statement
.
getColumns
().
remove
(
pkIndex
);
}
}
QueryRunner
queryRunner
=
new
QueryRunner
();
List
<
Map
<
String
,
Object
>>
insert
=
queryRunner
.
insert
(
connection
,
sql
,
new
MapListHandler
());
statement
.
getColumns
().
add
(
new
Column
(
pk
));
for
(
int
i
=
0
;
i
<
multiExpressionList
.
getExprList
().
size
();
i
++)
{
multiExpressionList
.
getExprList
().
get
(
i
).
getExpressions
().
add
(
new
StringValue
(
insert
.
get
(
i
).
get
(
"GENERATED_KEY"
).
toString
()));
}
}
return
false
;
}
@Override
public
void
afterPropertiesSet
()
{
AnalyseStrategryFactory
.
register
(
MysqlAnalyseEnum
.
INSERT
.
name
(),
this
);
...
...
txlcn-tc/src/main/java/com/codingapi/txlcn/tc/jdbc/sql/strategy/MysqlSqlDeleteAnalyseStrategy.java
浏览文件 @
1c5bf1e3
...
...
@@ -30,10 +30,6 @@ public class MysqlSqlDeleteAnalyseStrategy implements SqlSqlAnalyseHandler {
@Override
public
String
mysqlAnalyseStrategy
(
String
sql
,
Connection
connection
,
Statement
stmt
)
throws
SQLException
,
JSQLParserException
{
String
catalog
=
connection
.
getCatalog
();
/**
* todo JdbcAnalyseUtils.analyse(connection) 不能在此使用
* JdbcAnalyseUtils.analyse(connection) 是系统启动的时候获取数据的,而非在执行sql的时候做数据处理 {@link com.codingapi.txlcn.tc.aspect.TxDataSourceInterceptor#invoke(MethodInvocation)}
*/
TableList
tableList
=
DataBaseContext
.
getInstance
().
get
(
catalog
);
Delete
statement
=
(
Delete
)
stmt
;
Table
table
=
statement
.
getTable
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录