Skip to content

Commit 2d8a708

Browse files
author
JARVIS SONG
committed
auditing
1 parent dd8b7b0 commit 2d8a708

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+500
-309
lines changed

spring-data-mybatis-core/src/main/java/org/springframework/data/mybatis/domain/AbstractAuditable.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
* Abstract base class for auditable entities. Stores the audition values in persistent
3434
* fields.
3535
*
36+
* @param <PK> primary key type
37+
* @param <U> auditor
3638
* @author JARVIS SONG
3739
* @since 2.0.1
3840
*/
@@ -66,8 +68,9 @@ public void setCreatedBy(U createdBy) {
6668

6769
@Override
6870
public Optional<LocalDateTime> getCreatedDate() {
69-
return null == this.createdDate ? Optional.empty()
70-
: Optional.of(LocalDateTime.ofInstant(this.createdDate.toInstant(), ZoneId.systemDefault()));
71+
return (null != this.createdDate)
72+
? Optional.of(LocalDateTime.ofInstant(this.createdDate.toInstant(), ZoneId.systemDefault()))
73+
: Optional.empty();
7174
}
7275

7376
@Override
@@ -87,8 +90,9 @@ public void setLastModifiedBy(U lastModifiedBy) {
8790

8891
@Override
8992
public Optional<LocalDateTime> getLastModifiedDate() {
90-
return null == this.lastModifiedDate ? Optional.empty()
91-
: Optional.of(LocalDateTime.ofInstant(this.lastModifiedDate.toInstant(), ZoneId.systemDefault()));
93+
return (null != this.lastModifiedDate)
94+
? Optional.of(LocalDateTime.ofInstant(this.lastModifiedDate.toInstant(), ZoneId.systemDefault()))
95+
: Optional.empty();
9296
}
9397

9498
@Override

spring-data-mybatis-core/src/main/java/org/springframework/data/mybatis/domain/AbstractPersistable.java

+7-14
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
* auto-generation and implements {@link #equals(Object)} and {@link #hashCode()} based on
3232
* that id.
3333
*
34+
* @param <PK> primary key type
3435
* @author JARVIS SONG
3536
* @since 2.0.1
3637
*/
@@ -59,39 +60,31 @@ public boolean isNew() {
5960
return null == this.getId();
6061
}
6162

62-
@Override
63-
public String toString() {
64-
return String.format("Entity of type %s with id: %s", this.getClass().getName(), this.getId());
65-
}
66-
6763
@Override
6864
public boolean equals(Object obj) {
69-
7065
if (null == obj) {
7166
return false;
7267
}
73-
7468
if (this == obj) {
7569
return true;
7670
}
77-
7871
if (!this.getClass().equals(ProxyUtils.getUserClass(obj))) {
7972
return false;
8073
}
81-
8274
AbstractPersistable<?> that = (AbstractPersistable<?>) obj;
83-
8475
return null != this.getId() && this.getId().equals(that.getId());
8576
}
8677

8778
@Override
8879
public int hashCode() {
89-
9080
int hashCode = 17;
91-
92-
hashCode += null == this.getId() ? 0 : this.getId().hashCode() * 31;
93-
81+
hashCode += (null != this.getId()) ? this.getId().hashCode() * 31 : 0;
9482
return hashCode;
9583
}
9684

85+
@Override
86+
public String toString() {
87+
return String.format("Entity of type %s with id: %s", this.getClass().getName(), this.getId());
88+
}
89+
9790
}

spring-data-mybatis-core/src/main/java/org/springframework/data/mybatis/domain/Audit.java

+4
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
import javax.persistence.TemporalType;
2525

2626
import lombok.Data;
27+
import lombok.EqualsAndHashCode;
2728
import lombok.NoArgsConstructor;
29+
import lombok.ToString;
2830

2931
import org.springframework.data.annotation.CreatedBy;
3032
import org.springframework.data.annotation.CreatedDate;
@@ -40,6 +42,8 @@
4042
* @since 2.0.0
4143
*/
4244
@Data
45+
@EqualsAndHashCode(callSuper = true)
46+
@ToString(callSuper = true)
4347
@NoArgsConstructor
4448
@MappedSuperclass
4549
public abstract class Audit<AUDITOR, ID extends Serializable> extends Id<ID> {

spring-data-mybatis/src/main/java/org/springframework/data/mybatis/dialect/Dialect.java

-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@
3333
public abstract class Dialect {
3434

3535
protected Dialect() {
36-
log.info("Using dialect: {}", this);
37-
3836
}
3937

4038
/**

spring-data-mybatis/src/main/java/org/springframework/data/mybatis/domain/support/AuditingEntityListener.java

-38
This file was deleted.

spring-data-mybatis/src/main/java/org/springframework/data/mybatis/domain/support/AuditingInterceptor.java

+6-9
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,21 @@
2727
import org.apache.ibatis.plugin.Invocation;
2828
import org.apache.ibatis.plugin.Signature;
2929

30-
import org.springframework.beans.factory.ObjectFactory;
3130
import org.springframework.data.mybatis.repository.support.ResidentParameterName;
3231

3332
/**
34-
* .
33+
* Mybatis interceptor of auditing.
3534
*
3635
* @author JARVIS SONG
36+
* @since 2.0.1
3737
*/
38-
@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }), })
38+
@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) })
3939
public class AuditingInterceptor implements Interceptor {
4040

41-
private MybatisAuditingHandler handler;
41+
private final MybatisAuditingHandler handler;
4242

43-
public AuditingInterceptor(ObjectFactory<MybatisAuditingHandler> auditingHandler) {
44-
45-
if (null != auditingHandler) {
46-
this.handler = auditingHandler.getObject();
47-
}
43+
public AuditingInterceptor(MybatisAuditingHandler auditingHandler) {
44+
this.handler = auditingHandler;
4845
}
4946

5047
@Override

spring-data-mybatis/src/main/java/org/springframework/data/mybatis/domain/support/MybatisAuditingHandler.java

+9-3
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222
import org.springframework.data.mapping.PersistentProperty;
2323
import org.springframework.data.mapping.context.MappingContext;
2424
import org.springframework.data.mapping.context.PersistentEntities;
25+
import org.springframework.util.Assert;
2526

2627
/**
27-
* .
28+
* Mybatis auditing handler.
2829
*
2930
* @author JARVIS SONG
31+
* @since 2.0.1
3032
*/
3133
public class MybatisAuditingHandler extends AuditingHandler {
3234

@@ -45,7 +47,11 @@ public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
4547
this.sqlSessionTemplate = sqlSessionTemplate;
4648
}
4749

48-
public SqlSessionTemplate getSqlSessionTemplate() {
49-
return sqlSessionTemplate;
50+
@Override
51+
public void afterPropertiesSet() {
52+
super.afterPropertiesSet();
53+
Assert.notNull(this.sqlSessionTemplate, "SqlSessionTemplate must not be null!");
54+
this.sqlSessionTemplate.getConfiguration().addInterceptor(new AuditingInterceptor(this));
5055
}
56+
5157
}

spring-data-mybatis/src/main/java/org/springframework/data/mybatis/repository/config/AuditingBeanDefinitionParser.java

+24-8
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,44 @@
1717

1818
import org.w3c.dom.Element;
1919

20-
import org.springframework.beans.factory.config.BeanDefinition;
20+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2121
import org.springframework.beans.factory.xml.BeanDefinitionParser;
22-
import org.springframework.beans.factory.xml.ParserContext;
2322
import org.springframework.data.auditing.config.AuditingHandlerBeanDefinitionParser;
23+
import org.springframework.data.mapping.context.MappingContext;
24+
import org.springframework.data.mybatis.domain.support.MybatisAuditingHandler;
25+
import org.springframework.util.StringUtils;
2426

2527
/**
2628
* {@link BeanDefinitionParser} for the {@code auditing} element.
2729
*
2830
* @author JARVIS SONG
2931
* @since 2.0.0
3032
*/
31-
public class AuditingBeanDefinitionParser implements BeanDefinitionParser {
33+
public class AuditingBeanDefinitionParser extends AuditingHandlerBeanDefinitionParser {
34+
35+
/**
36+
* Creates a new {@link AuditingHandlerBeanDefinitionParser} to point to a
37+
* {@link MappingContext} with the given bean name.
38+
* @param mappingContextBeanName must not be {@literal null} or empty.
39+
*/
40+
public AuditingBeanDefinitionParser(String mappingContextBeanName) {
41+
super(mappingContextBeanName);
42+
}
3243

33-
private final AuditingHandlerBeanDefinitionParser auditingHandlerParser = new AuditingHandlerBeanDefinitionParser(
34-
BeanDefinitionNames.MYBATIS_MAPPING_CONTEXT_BEAN_NAME);
44+
@Override
45+
protected Class<?> getBeanClass(Element element) {
46+
return MybatisAuditingHandler.class;
47+
}
3548

3649
@Override
37-
public BeanDefinition parse(Element element, ParserContext parser) {
50+
protected void doParse(Element element, BeanDefinitionBuilder builder) {
51+
super.doParse(element, builder);
3852

39-
this.auditingHandlerParser.parse(element, parser);
53+
String sqlSessionTemplateRef = element.getAttribute("sql-session-template-ref");
4054

41-
return null;
55+
if (StringUtils.hasText(sqlSessionTemplateRef)) {
56+
builder.addPropertyReference("sqlSessionTemplate", sqlSessionTemplateRef);
57+
}
4258
}
4359

4460
}

spring-data-mybatis/src/main/java/org/springframework/data/mybatis/repository/config/EnableMybatisAuditing.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -42,32 +42,36 @@
4242
/**
4343
* Configures the {@link AuditorAware} bean to be used to lookup the current
4444
* principal.
45-
* @return
45+
* @return reference of {@link AuditorAware}
4646
*/
4747
String auditorAwareRef() default "";
4848

4949
/**
5050
* Configures whether the creation and modification dates are set. Defaults to
5151
* {@literal true}.
52-
* @return
52+
* @return result
5353
*/
5454
boolean setDates() default true;
5555

5656
/**
5757
* Configures whether the entity shall be marked as modified on creation. Defaults to
5858
* {@literal true}.
59-
* @return
59+
* @return result
6060
*/
6161
boolean modifyOnCreate() default true;
6262

6363
/**
6464
* Configures a {@link DateTimeProvider} bean name that allows customizing the
6565
* {@link org.joda.time.DateTime} to be used for setting creation and modification
6666
* dates.
67-
* @return
67+
* @return result
6868
*/
6969
String dateTimeProviderRef() default "";
7070

71+
/**
72+
* The reference of sqlSessionTemplate.
73+
* @return result
74+
*/
7175
String sqlSessionTemplateRef() default "";
7276

7377
}

spring-data-mybatis/src/main/java/org/springframework/data/mybatis/repository/config/MybatisAuditingConfiguration.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818
import org.springframework.data.auditing.config.AuditingConfiguration;
1919

2020
/**
21-
* .
21+
* MybatisAuditingConfiguration.
2222
*
2323
* @author JARVIS SONG
24+
* @since 2.0.1
2425
*/
2526
public interface MybatisAuditingConfiguration extends AuditingConfiguration {
2627

spring-data-mybatis/src/main/java/org/springframework/data/mybatis/repository/config/MybatisAuditingRegistrar.java

-17
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
import org.springframework.core.type.AnnotationMetadata;
2626
import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport;
2727
import org.springframework.data.auditing.config.AuditingConfiguration;
28-
import org.springframework.data.config.ParsingUtils;
29-
import org.springframework.data.mybatis.domain.support.AuditingEntityListener;
3028
import org.springframework.data.mybatis.domain.support.MybatisAuditingHandler;
3129
import org.springframework.util.Assert;
3230
import org.springframework.util.StringUtils;
@@ -36,7 +34,6 @@
3634
* annotation.
3735
*
3836
* @author JARVIS SONG
39-
* @since 2.0.1
4037
*/
4138
class MybatisAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
4239

@@ -57,20 +54,6 @@ protected void registerAuditListenerBeanDefinition(BeanDefinition auditingHandle
5754
registry.registerBeanDefinition(BeanDefinitionNames.MYBATIS_MAPPING_CONTEXT_BEAN_NAME, //
5855
new RootBeanDefinition(MybatisMappingContextFactoryBean.class));
5956
}
60-
61-
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(AuditingEntityListener.class);
62-
builder.addPropertyValue("auditingHandler",
63-
ParsingUtils.getObjectFactoryBeanDefinition(this.getAuditingHandlerBeanName(), null));
64-
this.registerInfrastructureBeanWithId(builder.getRawBeanDefinition(), AuditingEntityListener.class.getName(),
65-
registry);
66-
}
67-
68-
@Override
69-
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry) {
70-
Assert.notNull(annotationMetadata, "AnnotationMetadata must not be null!");
71-
Assert.notNull(registry, "BeanDefinitionRegistry must not be null!");
72-
73-
super.registerBeanDefinitions(annotationMetadata, registry);
7457
}
7558

7659
@Override

spring-data-mybatis/src/main/java/org/springframework/data/mybatis/repository/config/MybatisRepositoryNameSpaceHandler.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ public void init() {
3030
RepositoryBeanDefinitionParser repositoryBeanDefinitionParser = new RepositoryBeanDefinitionParser();
3131

3232
registerBeanDefinitionParser("repositories", repositoryBeanDefinitionParser);
33-
registerBeanDefinitionParser("auditing", new AuditingBeanDefinitionParser());
33+
registerBeanDefinitionParser("auditing",
34+
new AuditingBeanDefinitionParser(BeanDefinitionNames.MYBATIS_MAPPING_CONTEXT_BEAN_NAME));
3435
}
3536

3637
}

spring-data-mybatis/src/main/java/org/springframework/data/mybatis/repository/query/AbstractMybatisPrecompiler.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -81,17 +81,15 @@ abstract class AbstractMybatisPrecompiler implements MybatisPrecompiler {
8181
AbstractMybatisPrecompiler(MybatisMappingContext mappingContext, Configuration configuration,
8282
RepositoryInformation repositoryInformation) {
8383

84-
this(mappingContext, configuration, repositoryInformation.getRepositoryInterface().getName(),
85-
repositoryInformation.getDomainType());
84+
this(mappingContext, configuration, repositoryInformation.getDomainType());
8685

8786
this.repositoryInterface = repositoryInformation.getRepositoryInterface();
8887
}
8988

90-
AbstractMybatisPrecompiler(MybatisMappingContext mappingContext, Configuration configuration, String namespace,
91-
Class<?> domainType) {
89+
AbstractMybatisPrecompiler(MybatisMappingContext mappingContext, Configuration configuration, Class<?> domainType) {
9290
this.mappingContext = mappingContext;
9391
this.configuration = configuration;
94-
this.namespace = namespace;
92+
this.namespace = domainType.getName();
9593
this.persistentEntity = mappingContext.getRequiredPersistentEntity(domainType);
9694
this.dialect = StandardDialectResolver.INSTANCE.resolveDialect(
9795
new DatabaseMetaDataDialectResolutionInfoAdapter(configuration.getEnvironment().getDataSource()));

0 commit comments

Comments
 (0)