Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
financial-tools
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QG
financial-tools
Commits
35c8969d
Commit
35c8969d
authored
Jan 11, 2017
by
Java-刘 彧阳
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sql拦截
parent
27392d16
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
109 additions
and
0 deletions
+109
-0
SQLPrintInterceptor.java
.../cn/gq/financial/db/interceptors/SQLPrintInterceptor.java
+109
-0
No files found.
src/main/java/cn/gq/financial/db/interceptors/SQLPrintInterceptor.java
0 → 100644
View file @
35c8969d
package
cn
.
gq
.
financial
.
db
.
interceptors
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Properties
;
import
org.apache.commons.lang3.time.FastDateFormat
;
import
org.apache.ibatis.executor.Executor
;
import
org.apache.ibatis.mapping.BoundSql
;
import
org.apache.ibatis.mapping.MappedStatement
;
import
org.apache.ibatis.mapping.ParameterMapping
;
import
org.apache.ibatis.plugin.Interceptor
;
import
org.apache.ibatis.plugin.Intercepts
;
import
org.apache.ibatis.plugin.Invocation
;
import
org.apache.ibatis.plugin.Plugin
;
import
org.apache.ibatis.plugin.Signature
;
import
org.apache.ibatis.reflection.MetaObject
;
import
org.apache.ibatis.session.Configuration
;
import
org.apache.ibatis.type.TypeHandlerRegistry
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
@Intercepts
(
value
=
{
@Signature
(
type
=
Executor
.
class
,
method
=
"update"
,
args
=
{
MappedStatement
.
class
,
Object
.
class
})
})
public
class
SQLPrintInterceptor
implements
Interceptor
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
SQLPrintInterceptor
.
class
);
static
FastDateFormat
formatter
=
FastDateFormat
.
getInstance
(
"yyyy-MM-dd HH:mm:ss"
);
private
Properties
properties
;
public
Object
intercept
(
Invocation
invocation
)
throws
Throwable
{
MappedStatement
mappedStatement
=
(
MappedStatement
)
invocation
.
getArgs
()[
0
];
Object
parameter
=
null
;
if
(
invocation
.
getArgs
().
length
>
1
)
{
parameter
=
invocation
.
getArgs
()[
1
];
}
String
sqlId
=
mappedStatement
.
getId
();
BoundSql
boundSql
=
mappedStatement
.
getBoundSql
(
parameter
);
Configuration
configuration
=
mappedStatement
.
getConfiguration
();
Object
returnValue
=
null
;
String
sql
=
getSql
(
configuration
,
boundSql
,
sqlId
);
logger
.
info
(
"输出到文件的sql-->{}"
,
sql
);
// Constants.SQL_TO_OUT.add(sql.concat(";"));
logger
.
info
(
"新增sql到带输出的sql集合中"
);
return
0
;
}
public
static
String
getSql
(
Configuration
configuration
,
BoundSql
boundSql
,
String
sqlId
)
{
String
sql
=
showSql
(
configuration
,
boundSql
);
StringBuilder
str
=
new
StringBuilder
();
str
.
append
(
sql
);
return
str
.
toString
();
}
private
static
String
getParameterValue
(
Object
obj
)
{
String
value
=
null
;
if
(
obj
instanceof
String
)
{
value
=
"'"
+
obj
.
toString
()
+
"'"
;
}
else
if
(
obj
instanceof
Date
)
{
value
=
"'"
+
formatter
.
format
((
Date
)
obj
)
+
"'"
;
}
else
{
if
(
obj
!=
null
)
{
value
=
obj
.
toString
();
}
else
{
value
=
"NULL"
;
}
}
return
value
;
}
public
static
String
showSql
(
Configuration
configuration
,
BoundSql
boundSql
)
{
Object
parameterObject
=
boundSql
.
getParameterObject
();
List
<
ParameterMapping
>
parameterMappings
=
boundSql
.
getParameterMappings
();
String
sql
=
boundSql
.
getSql
().
replaceAll
(
"[\\s]+"
,
" "
);
if
(
parameterMappings
.
size
()
>
0
&&
parameterObject
!=
null
)
{
TypeHandlerRegistry
typeHandlerRegistry
=
configuration
.
getTypeHandlerRegistry
();
if
(
typeHandlerRegistry
.
hasTypeHandler
(
parameterObject
.
getClass
()))
{
sql
=
sql
.
replaceFirst
(
"\\?"
,
getParameterValue
(
parameterObject
));
}
else
{
MetaObject
metaObject
=
configuration
.
newMetaObject
(
parameterObject
);
for
(
ParameterMapping
parameterMapping
:
parameterMappings
)
{
String
propertyName
=
parameterMapping
.
getProperty
();
if
(
metaObject
.
hasGetter
(
propertyName
))
{
Object
obj
=
metaObject
.
getValue
(
propertyName
);
sql
=
sql
.
replaceFirst
(
"\\?"
,
getParameterValue
(
obj
));
}
else
if
(
boundSql
.
hasAdditionalParameter
(
propertyName
))
{
Object
obj
=
boundSql
.
getAdditionalParameter
(
propertyName
);
sql
=
sql
.
replaceFirst
(
"\\?"
,
getParameterValue
(
obj
));
}
}
}
}
return
sql
;
}
public
Object
plugin
(
Object
target
)
{
return
Plugin
.
wrap
(
target
,
this
);
}
public
void
setProperties
(
Properties
properties0
)
{
this
.
properties
=
properties0
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment