Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
MybatisTraning
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
CI / CD
CI / CD
Pipelines
Schedules
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
training
MybatisTraning
Commits
32263ce5
Commit
32263ce5
authored
Jan 02, 2020
by
cuixiaowei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
崔小伟作业
parent
1e28225b
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
470 additions
and
0 deletions
+470
-0
.gitignore
崔小伟_mybatis2/.gitignore
+32
-0
pom.xml
崔小伟_mybatis2/pom.xml
+84
-0
CuixiaoweiApplication.java
...in/java/com/example/cuixiaowei/CuixiaoweiApplication.java
+14
-0
MyInterceptor.java
.../main/java/com/example/cuixiaowei/demo/MyInterceptor.java
+104
-0
MyTypeHandle.java
...c/main/java/com/example/cuixiaowei/demo/MyTypeHandle.java
+63
-0
User.java
...atis2/src/main/java/com/example/cuixiaowei/demo/User.java
+33
-0
MyMapper.xml
崔小伟_mybatis2/src/main/resources/MyMapper.xml
+15
-0
application.properties
崔小伟_mybatis2/src/main/resources/application.properties
+3
-0
db.properties
崔小伟_mybatis2/src/main/resources/db.properties
+6
-0
mybatis-config.xml
崔小伟_mybatis2/src/main/resources/mybatis-config.xml
+35
-0
CuixiaoweiApplicationTests.java
...va/com/example/cuixiaowei/CuixiaoweiApplicationTests.java
+81
-0
No files found.
崔小伟_mybatis2/.gitignore
0 → 100644
View file @
32263ce5
HELP.md
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
### VS Code ###
.vscode/
崔小伟_mybatis2/pom.xml
0 → 100644
View file @
32263ce5
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.2.2.RELEASE
</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>
com.example
</groupId>
<artifactId>
cuixiaowei
</artifactId>
<version>
0.0.1-SNAPSHOT
</version>
<name>
cuixiaowei
</name>
<description>
Demo project for Spring Boot
</description>
<properties>
<java.version>
1.8
</java.version>
</properties>
<dependencies>
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
<version>
8.0.17
</version>
</dependency>
<dependency>
<groupId>
org.mybatis
</groupId>
<artifactId>
mybatis
</artifactId>
<version>
3.2.8
</version>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
1.2.54
</version>
</dependency>
<dependency>
<groupId>
junit
</groupId>
<artifactId>
junit
</artifactId>
<version>
4.12
</version>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
<exclusions>
<exclusion>
<groupId>
org.junit.vintage
</groupId>
<artifactId>
junit-vintage-engine
</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
</project>
崔小伟_mybatis2/src/main/java/com/example/cuixiaowei/CuixiaoweiApplication.java
0 → 100644
View file @
32263ce5
package
com
.
example
.
cuixiaowei
;
package
com
.
example
.
cuixiaowei
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
public
class
CuixiaoweiApplication
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
CuixiaoweiApplication
.
class
,
args
);
}
}
崔小伟_mybatis2/src/main/java/com/example/cuixiaowei/demo/MyInterceptor.java
0 → 100644
View file @
32263ce5
package
com
.
example
.
cuixiaowei
.
demo
;
package
com
.
example
.
cuixiaowei
.
demo
;
import
com.alibaba.fastjson.JSONObject
;
import
org.apache.ibatis.executor.statement.StatementHandler
;
import
org.apache.ibatis.logging.Log
;
import
org.apache.ibatis.logging.LogFactory
;
import
org.apache.ibatis.mapping.BoundSql
;
import
org.apache.ibatis.mapping.ParameterMapping
;
import
org.apache.ibatis.plugin.*
;
import
org.apache.ibatis.session.ResultHandler
;
import
java.sql.Statement
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Properties
;
/**
* <p>
*
* </p>
*
* @author shyane
* @date 2020/1/2
*/
@Intercepts
({
@Signature
(
type
=
StatementHandler
.
class
,
method
=
"query"
,
args
=
{
Statement
.
class
,
ResultHandler
.
class
}),
@Signature
(
type
=
StatementHandler
.
class
,
method
=
"update"
,
args
=
{
Statement
.
class
}),
@Signature
(
type
=
StatementHandler
.
class
,
method
=
"batch"
,
args
=
{
Statement
.
class
})
})
public
class
MyInterceptor
implements
Interceptor
{
final
Log
log
=
LogFactory
.
getLog
(
MyTypeHandle
.
class
);
@Override
public
Object
intercept
(
Invocation
invocation
)
throws
Throwable
{
Object
target
=
invocation
.
getTarget
();
long
startTime
=
System
.
currentTimeMillis
();
StatementHandler
statementHandler
=
(
StatementHandler
)
target
;
try
{
return
invocation
.
proceed
();
}
finally
{
long
endTime
=
System
.
currentTimeMillis
();
long
sqlCost
=
endTime
-
startTime
;
BoundSql
boundSql
=
statementHandler
.
getBoundSql
();
String
sql
=
boundSql
.
getSql
();
Object
parameterObject
=
boundSql
.
getParameterObject
();
List
<
ParameterMapping
>
parameterMappingList
=
boundSql
.
getParameterMappings
();
// 格式化Sql语句,去除换行符,替换参数
sql
=
formatSql
(
sql
,
parameterObject
,
parameterMappingList
);
log
.
warn
(
"执行耗时["
+
sqlCost
+
"ms] "
+
"SQL:"
+
sql
+
";"
);
}
}
private
String
formatSql
(
String
sql
,
Object
parameterObject
,
List
<
ParameterMapping
>
parameterMappingList
)
{
sql
=
sql
.
replaceAll
(
"\r|\n|\t"
,
" "
).
replaceAll
(
"\\s+"
,
" "
);
if
(
parameterObject
==
null
){
sql
=
sql
.
replaceAll
(
"\\?"
,
" null"
);
return
sql
;
}
if
(
Map
.
class
.
isAssignableFrom
(
parameterObject
.
getClass
())){
Map
pb
=
(
Map
)
parameterObject
;
for
(
ParameterMapping
temp:
parameterMappingList
){
if
(
pb
.
get
(
temp
.
getProperty
())
!=
null
){
if
(
pb
.
get
(
temp
.
getProperty
()).
getClass
().
isAssignableFrom
(
JSONObject
.
class
)){
JSONObject
infObject
=
(
JSONObject
)
pb
.
get
(
temp
.
getProperty
());
sql
=
sql
.
replaceFirst
(
"\\?"
,
"'"
+
infObject
.
toJSONString
()
+
"'"
);
}
else
{
sql
=
sql
.
replaceFirst
(
"\\?"
,
"'"
+
pb
.
get
(
temp
.
getProperty
())
+
"'"
);
}
}
else
{
sql
=
sql
.
replaceFirst
(
"\\?"
,
"'null'"
);
}
}
}
if
(
String
.
class
.
isAssignableFrom
(
parameterObject
.
getClass
()))
{
sql
=
sql
.
replaceFirst
(
"\\?"
,
parameterObject
==
null
?
"null"
:
"'"
+
parameterObject
+
"'"
);
}
if
(
Number
.
class
.
isAssignableFrom
(
parameterObject
.
getClass
()))
{
sql
=
sql
.
replaceFirst
(
"\\?"
,
parameterObject
==
null
?
"null"
:
parameterObject
.
toString
());
}
return
sql
;
}
@Override
public
Object
plugin
(
Object
o
)
{
return
Plugin
.
wrap
(
o
,
this
);
}
@Override
public
void
setProperties
(
Properties
properties
)
{
}
}
崔小伟_mybatis2/src/main/java/com/example/cuixiaowei/demo/MyTypeHandle.java
0 → 100644
View file @
32263ce5
package
com
.
example
.
cuixiaowei
.
demo
;
package
com
.
example
.
cuixiaowei
.
demo
;
import
com.alibaba.fastjson.JSONObject
;
import
org.apache.ibatis.type.BaseTypeHandler
;
import
org.apache.ibatis.type.JdbcType
;
import
java.sql.CallableStatement
;
import
java.sql.PreparedStatement
;
import
java.sql.ResultSet
;
import
java.sql.SQLException
;
/**
* <p>
*
* </p>
*
* @author shyane
* @date 2020/1/2
*/
public
class
MyTypeHandle
extends
BaseTypeHandler
<
JSONObject
>{
@Override
public
JSONObject
getNullableResult
(
ResultSet
rs
,
String
columnsName
)
throws
SQLException
{
String
infoJsonString
=
rs
.
getString
(
columnsName
);
JSONObject
infObject
=
null
;
try
{
infObject
=
JSONObject
.
parseObject
(
infoJsonString
);
System
.
out
.
println
(
"----将json串转成json对象成功!----"
);
}
catch
(
Exception
e
)
{
System
.
err
.
println
(
"将json串转成json对象失败!"
);
}
return
infObject
;
}
@Override
public
JSONObject
getNullableResult
(
CallableStatement
arg0
,
int
arg1
)
throws
SQLException
{
return
null
;
}
@Override
public
void
setNonNullParameter
(
PreparedStatement
statement
,
int
i
,
JSONObject
infoObject
,
JdbcType
jdbcType
)
throws
SQLException
{
try
{
String
userInfoString
=
JSONObject
.
toJSONString
(
infoObject
);
statement
.
setString
(
i
,
userInfoString
);
System
.
out
.
println
(
"----将对象转化为字符串成功!----:"
+
userInfoString
);
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"----将对象转化为字符串失败!----"
);
}
}
@Override
public
JSONObject
getNullableResult
(
ResultSet
arg0
,
int
arg1
)
throws
SQLException
{
return
null
;
}
}
崔小伟_mybatis2/src/main/java/com/example/cuixiaowei/demo/User.java
0 → 100644
View file @
32263ce5
package
com
.
example
.
cuixiaowei
.
demo
;
package
com
.
example
.
cuixiaowei
.
demo
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.*
;
import
lombok.experimental.Accessors
;
import
java.io.Serializable
;
/**
* <p>
*
* </p>
*
* @author shyane
* @date 2020/1/2
*/
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
(
callSuper
=
false
)
@ToString
@Builder
@Getter
@Setter
@Accessors
(
chain
=
true
)
public
class
User
implements
Serializable
{
private
String
id
;
private
String
name
;
private
String
sex
;
private
String
age
;
private
JSONObject
info
;
}
崔小伟_mybatis2/src/main/resources/MyMapper.xml
0 → 100644
View file @
32263ce5
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"MyMapper"
>
<select
id=
"selectUser"
resultType=
"com.example.cuixiaowei.demo.User"
>
select * from user where id = #{id}
</select>
<insert
id=
"insert"
parameterType=
"com.example.cuixiaowei.demo.User"
>
INSERT INTO user (id, name,sex,age, info)
VALUES(#{id}, #{name}, #{sex},#{age}, #{info})
</insert>
</mapper>
\ No newline at end of file
崔小伟_mybatis2/src/main/resources/application.properties
0 → 100644
View file @
32263ce5
server.port
=
8080
server.port
=
8080
server.servlet.context-path
=
/demo
崔小伟_mybatis2/src/main/resources/db.properties
0 → 100644
View file @
32263ce5
driver
=
com.mysql.cj.jdbc.Driver
driver
=
com.mysql.cj.jdbc.Driver
url
=
jdbc:mysql://localhost:3306/test?seUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
username
=
root
password
=
root
\ No newline at end of file
崔小伟_mybatis2/src/main/resources/mybatis-config.xml
0 → 100644
View file @
32263ce5
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties
resource=
"db.properties"
></properties>
<typeHandlers>
<typeHandler
handler=
"com.example.cuixiaowei.demo.MyTypeHandle"
></typeHandler>
</typeHandlers>
<plugins>
<plugin
interceptor=
"com.example.cuixiaowei.demo.MyInterceptor"
>
</plugin>
</plugins>
<!-- 环境,可以配置多个,default:指定采用哪个环境 -->
<environments
default=
"dev"
>
<!-- id:唯一标识 -->
<environment
id=
"dev"
>
<!-- 事务管理器,JDBC类型的事务管理器 -->
<transactionManager
type=
"JDBC"
/>
<!-- 数据源,池类型的数据源 -->
<dataSource
type=
"POOLED"
>
<property
name=
"driver"
value=
"${driver}"
/>
<!-- 配置了properties,所以可以直接引用 -->
<property
name=
"url"
value=
"${url}"
/>
<property
name=
"username"
value=
"${username}"
/>
<property
name=
"password"
value=
"${password}"
/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper
resource=
"MyMapper.xml"
/>
</mappers>
</configuration>
崔小伟_mybatis2/src/test/java/com/example/cuixiaowei/CuixiaoweiApplicationTests.java
0 → 100644
View file @
32263ce5
package
com
.
example
.
cuixiaowei
;
package
com
.
example
.
cuixiaowei
;
import
com.alibaba.fastjson.JSONObject
;
import
com.example.cuixiaowei.demo.User
;
import
org.apache.ibatis.io.Resources
;
import
org.apache.ibatis.session.SqlSession
;
import
org.apache.ibatis.session.SqlSessionFactory
;
import
org.apache.ibatis.session.SqlSessionFactoryBuilder
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.test.context.junit4.SpringRunner
;
import
java.io.InputStream
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.UUID
;
@RunWith
(
SpringRunner
.
class
)
@SpringBootTest
public
class
CuixiaoweiApplicationTests
{
private
SqlSession
sqlSession
=
null
;
private
SqlSessionFactory
sqlSessionFactory
;
@Before
public
void
configMybatis
()
{
// 指定全局配置文件
String
resource
=
"mybatis-config.xml"
;
// 读取配置文件
InputStream
inputStream
;
try
{
inputStream
=
Resources
.
getResourceAsStream
(
resource
);
// 构建sqlSessionFactory
sqlSessionFactory
=
new
SqlSessionFactoryBuilder
().
build
(
inputStream
);
// 获取sqlSession
sqlSession
=
sqlSessionFactory
.
openSession
(
false
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
if
(
sqlSession
!=
null
)
{
//sqlSession.close();
}
}
}
/**
*
* 自定义解析器查询测试
*
* json串字段为 info
*/
@Test
public
void
testSelectUser
()
{
User
user
=
sqlSession
.
selectOne
(
"MyMapper.selectUser"
,
"31c6cb92-132d-4d6f-8ceb-24db6c3b6c29"
);
System
.
out
.
println
(
user
);
sqlSession
.
close
();
}
/**
*
* 自定义类型解析器插入测试
*/
@Test
public
void
testInsertJsonObject
()
{
JSONObject
userInfObject
=
new
JSONObject
();
userInfObject
.
put
(
"test"
,
"测试"
);
Map
user
=
new
HashMap
();
user
.
put
(
"id"
,
UUID
.
randomUUID
().
toString
());
user
.
put
(
"name"
,
"test"
);
user
.
put
(
"info"
,
userInfObject
);
int
a
=
sqlSession
.
insert
(
"MyMapper.insert"
,
user
);
sqlSession
.
commit
();
System
.
out
.
println
(
"影响的行数:"
+
a
);
}
}
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