diff --git a/README.md b/README.md index d189012f..451c7a2a 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,116 @@ Simple examples for [Doma](https://github.com/domaframework/doma). This repository includes the following examples: -* [dao-style-basic](dao-style-basic) - Shows basic DAO style. -* [dao-style-file](dao-style-file) - Uses files to store SQL templates. -* [dao-style-text](dao-style-text) - Uses Text Blocks to store SQL templates. -* [dsl-style-java](dsl-style-java) - Uses the Criteria API. -* [jpms-java](jpms-java) - Uses the Java Platform Module System (JPMS). +* [example-sql-file](example-sql-file) - Uses SQL files to store SQL templates. +* [example-sql-annotation](example-sql-annotation) - Uses SQL annotations to store SQL templates. +* [example-criteria](example-criteria) - Uses the Criteria API. +* [example-jpms](example-jpms) - Uses the Java Platform Module System (JPMS). + +ER diagram +--------------------- + +The ER diagram for the database used in the example projects is shown below. + +```mermaid +erDiagram + DEPARTMENT { + INTEGER id PK "not null" + VARCHAR name "not null" + INTEGER version "not null" + } + EMPLOYEE { + INTEGER id PK "not null" + VARCHAR name "not null" + INTEGER age "not null" + INTEGER salary + VARCHAR job_type + TIMESTAMP hiredate + INTEGER department_id + INTEGER version "not null" + TIMESTAMP inserttimestamp + TIMESTAMP updatetimestamp + } + USER { + INT id PK "auto_increment" + VARCHAR name "not null" + VARCHAR email "unique not null" + TIMESTAMP created_at "default current_timestamp" + INT version "default 0 not null" + } + ROLE { + INT id PK "auto_increment" + VARCHAR name "unique not null" + INT version "default 0 not null" + } + USER_ROLE { + INT id PK "auto_increment" + INT user_id "not null" + INT role_id "not null" + INT version "default 0 not null" + } + PRODUCT { + INT id PK "auto_increment" + VARCHAR name "not null" + DECIMAL price "not null" + INT stock_quantity "not null" + TIMESTAMP created_at "default current_timestamp" + INT version "default 0 not null" + } + CATEGORY { + INT id PK "auto_increment" + VARCHAR name "unique not null" + INT version "default 0 not null" + } + PRODUCT_CATEGORY { + INT id PK "auto_increment" + INT product_id "not null" + INT category_id "not null" + INT version "default 0 not null" + } + ORDER { + INT id PK "auto_increment" + INT user_id "not null" + TIMESTAMP order_date "default current_timestamp" + VARCHAR status "not null" + INT version "default 0 not null" + } + ORDER_ITEM { + INT id PK "auto_increment" + INT order_id "not null" + INT product_id "not null" + INT quantity "not null" + DECIMAL price "not null" + INT version "default 0 not null" + } + PAYMENT { + INT id PK "auto_increment" + INT order_id "unique not null" + DECIMAL amount "not null" + TIMESTAMP payment_date "default current_timestamp" + INT version "default 0 not null" + } + REVIEW { + INT id PK "auto_increment" + INT user_id "not null" + INT product_id "not null" + INT rating "check: 1-5" + TEXT comment + TIMESTAMP created_at "default current_timestamp" + INT version "default 0 not null" + } + + EMPLOYEE }|..|| DEPARTMENT : belongs_to + USER_ROLE }|..|| USER : "user_id" + USER_ROLE }|..|| ROLE : "role_id" + PRODUCT_CATEGORY }|..|| PRODUCT : "product_id" + PRODUCT_CATEGORY }|..|| CATEGORY : "category_id" + ORDER }|..|| USER : "user_id" + ORDER_ITEM }|..|| ORDER : "order_id" + ORDER_ITEM }|..|| PRODUCT : "product_id" + PAYMENT ||--|| ORDER : "order_id" + REVIEW }|..|| USER : "user_id" + REVIEW }|..|| PRODUCT : "product_id" +``` Clone this repository --------------------- diff --git a/dao-style-basic/.gitignore b/common-test/.gitignore similarity index 100% rename from dao-style-basic/.gitignore rename to common-test/.gitignore diff --git a/common-test/build.gradle.kts b/common-test/build.gradle.kts new file mode 100644 index 00000000..57604845 --- /dev/null +++ b/common-test/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + id("java") +} + +dependencies { + implementation(project(":common")) + implementation(libs.junit.jupiter.api) +} diff --git a/dao-style-basic/src/test/java/example/dao_style_basic/dao/TestEnvironment.java b/common-test/src/main/java/example/common/test/TestEnvironment.java similarity index 94% rename from dao-style-basic/src/test/java/example/dao_style_basic/dao/TestEnvironment.java rename to common-test/src/main/java/example/common/test/TestEnvironment.java index 35232d16..822567e7 100644 --- a/dao-style-basic/src/test/java/example/dao_style_basic/dao/TestEnvironment.java +++ b/common-test/src/main/java/example/common/test/TestEnvironment.java @@ -1,6 +1,8 @@ -package example.dao_style_basic.dao; +package example.common.test; -import example.dao_style_basic.DbConfig; +import example.common.DbConfig; +import example.common.dao.ScriptDao; +import example.common.dao.ScriptDaoImpl; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.AfterTestExecutionCallback; import org.junit.jupiter.api.extension.BeforeAllCallback; diff --git a/dao-style-file/.gitignore b/common/.gitignore similarity index 100% rename from dao-style-file/.gitignore rename to common/.gitignore diff --git a/dao-style-text/build.gradle.kts b/common/build.gradle.kts similarity index 69% rename from dao-style-text/build.gradle.kts rename to common/build.gradle.kts index 9a728ff4..06f455e7 100644 --- a/dao-style-text/build.gradle.kts +++ b/common/build.gradle.kts @@ -7,7 +7,7 @@ tasks { val aptOptions = extensions.getByType() aptOptions.processorArgs = mapOf( - "doma.domain.converters" to "example.dao_style_text.domain.DomainConverterProvider", + "doma.domain.converters" to "example.common.domain.DomainConverterProvider", ) } } diff --git a/common/build/generated/sources/annotationProcessor/java/main/__/example/common/domain/_Age.java b/common/build/generated/sources/annotationProcessor/java/main/__/example/common/domain/_Age.java new file mode 100644 index 00000000..115d47d1 --- /dev/null +++ b/common/build/generated/sources/annotationProcessor/java/main/__/example/common/domain/_Age.java @@ -0,0 +1,50 @@ +package __.example.common.domain; + +/** */ +@javax.annotation.processing.Generated(value = { "Doma", "3.4.0" }, date = "2025-02-15T08:06:59.349+0900") +@org.seasar.doma.DomainTypeImplementation +public final class _Age extends org.seasar.doma.jdbc.domain.AbstractDomainType { + + static { + org.seasar.doma.internal.Artifact.validateVersion("3.4.0"); + } + + private static final example.common.domain.AgeConverter converter = new example.common.domain.AgeConverter(); + + private static final _Age singleton = new _Age(); + + private _Age() { + super(org.seasar.doma.internal.wrapper.WrapperSuppliers.ofInteger()); + } + + @Override + protected example.common.domain.Age newDomain(java.lang.Integer value) { + return converter.fromValueToDomain(value); + } + + @Override + protected java.lang.Integer getBasicValue(example.common.domain.Age domain) { + if (domain == null) { + return null; + } + return converter.fromDomainToValue(domain); + } + + @Override + public Class getBasicClass() { + return java.lang.Integer.class; + } + + @Override + public Class getDomainClass() { + return example.common.domain.Age.class; + } + + /** + * @return the singleton + */ + public static _Age getSingletonInternal() { + return singleton; + } + +} diff --git a/common/build/generated/sources/annotationProcessor/java/main/example/common/domain/_Salary.java b/common/build/generated/sources/annotationProcessor/java/main/example/common/domain/_Salary.java new file mode 100644 index 00000000..8ac335c5 --- /dev/null +++ b/common/build/generated/sources/annotationProcessor/java/main/example/common/domain/_Salary.java @@ -0,0 +1,51 @@ +package example.common.domain; + +/** */ +@javax.annotation.processing.Generated(value = { "Doma", "3.4.0" }, date = "2025-02-15T08:39:41.857+0900") +@org.seasar.doma.DomainTypeImplementation +public final class _Salary extends org.seasar.doma.jdbc.domain.AbstractDomainType { + + static { + org.seasar.doma.internal.Artifact.validateVersion("3.4.0"); + } + + private static final _Salary singleton = new _Salary(); + + private _Salary() { + super(org.seasar.doma.internal.wrapper.WrapperSuppliers.ofInteger()); + } + + @Override + protected example.common.domain.Salary newDomain(java.lang.Integer value) { + if (value == null) { + return null; + } + return new example.common.domain.Salary(value); + } + + @Override + protected java.lang.Integer getBasicValue(example.common.domain.Salary domain) { + if (domain == null) { + return null; + } + return domain.value(); + } + + @Override + public Class getBasicClass() { + return java.lang.Integer.class; + } + + @Override + public Class getDomainClass() { + return example.common.domain.Salary.class; + } + + /** + * @return the singleton + */ + public static _Salary getSingletonInternal() { + return singleton; + } + +} diff --git a/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/Department_.java b/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/Department_.java new file mode 100644 index 00000000..17a7acc2 --- /dev/null +++ b/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/Department_.java @@ -0,0 +1,46 @@ +package example.common.entity; + +/** */ +@javax.annotation.processing.Generated(value = { "Doma", "3.4.0" }, date = "2025-02-15T08:44:03.573+0900") +public final class Department_ implements org.seasar.doma.jdbc.criteria.metamodel.EntityMetamodel { + + static { + org.seasar.doma.internal.Artifact.validateVersion("3.4.0"); + } + + private final String __qualifiedTableName; + + private final example.common.entity._Department __entityType = example.common.entity._Department.getSingletonInternal(); + + private final java.util.List> __allPropertyMetamodels; + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel id = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(java.lang.Integer.class, __entityType, "id"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel name = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(java.lang.String.class, __entityType, "name"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel version = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(java.lang.Integer.class, __entityType, "version"); + + public Department_() { + this(""); + } + + public Department_(String qualifiedTableName) { + this.__qualifiedTableName = java.util.Objects.requireNonNull(qualifiedTableName); + java.util.ArrayList> __list = new java.util.ArrayList<>(3); + __list.add(id); + __list.add(name); + __list.add(version); + __allPropertyMetamodels = java.util.Collections.unmodifiableList(__list); + } + + @Override + public org.seasar.doma.jdbc.entity.EntityType asType() { + return __qualifiedTableName.isEmpty() ? __entityType : new org.seasar.doma.jdbc.criteria.metamodel.EntityTypeProxy<>(__entityType, __qualifiedTableName); + } + + @Override + public java.util.List> allPropertyMetamodels() { + return __allPropertyMetamodels; + } + +} diff --git a/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/Employee_.java b/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/Employee_.java new file mode 100644 index 00000000..4ed21721 --- /dev/null +++ b/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/Employee_.java @@ -0,0 +1,67 @@ +package example.common.entity; + +/** */ +@javax.annotation.processing.Generated(value = { "Doma", "3.4.0" }, date = "2025-02-15T08:44:03.603+0900") +public final class Employee_ implements org.seasar.doma.jdbc.criteria.metamodel.EntityMetamodel { + + static { + org.seasar.doma.internal.Artifact.validateVersion("3.4.0"); + } + + private final String __qualifiedTableName; + + private final example.common.entity._Employee __entityType = example.common.entity._Employee.getSingletonInternal(); + + private final java.util.List> __allPropertyMetamodels; + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel id = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(java.lang.Integer.class, __entityType, "id"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel name = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(java.lang.String.class, __entityType, "name"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel age = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(example.common.domain.Age.class, __entityType, "age"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel salary = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(example.common.domain.Salary.class, __entityType, "salary"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel jobType = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(example.common.entity.JobType.class, __entityType, "jobType"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel hiredate = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(java.time.LocalDate.class, __entityType, "hiredate"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel departmentId = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(java.lang.Integer.class, __entityType, "departmentId"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel version = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(java.lang.Integer.class, __entityType, "version"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel insertTimestamp = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(java.time.LocalDateTime.class, __entityType, "insertTimestamp"); + + public final org.seasar.doma.jdbc.criteria.metamodel.PropertyMetamodel updateTimestamp = new org.seasar.doma.jdbc.criteria.metamodel.DefaultPropertyMetamodel(java.time.LocalDateTime.class, __entityType, "updateTimestamp"); + + public Employee_() { + this(""); + } + + public Employee_(String qualifiedTableName) { + this.__qualifiedTableName = java.util.Objects.requireNonNull(qualifiedTableName); + java.util.ArrayList> __list = new java.util.ArrayList<>(10); + __list.add(id); + __list.add(name); + __list.add(age); + __list.add(salary); + __list.add(jobType); + __list.add(hiredate); + __list.add(departmentId); + __list.add(version); + __list.add(insertTimestamp); + __list.add(updateTimestamp); + __allPropertyMetamodels = java.util.Collections.unmodifiableList(__list); + } + + @Override + public org.seasar.doma.jdbc.entity.EntityType asType() { + return __qualifiedTableName.isEmpty() ? __entityType : new org.seasar.doma.jdbc.criteria.metamodel.EntityTypeProxy<>(__entityType, __qualifiedTableName); + } + + @Override + public java.util.List> allPropertyMetamodels() { + return __allPropertyMetamodels; + } + +} diff --git a/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/_Department.java b/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/_Department.java new file mode 100644 index 00000000..2689f1eb --- /dev/null +++ b/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/_Department.java @@ -0,0 +1,241 @@ +package example.common.entity; + +/** */ +@javax.annotation.processing.Generated(value = { "Doma", "3.4.0" }, date = "2025-02-15T08:44:03.566+0900") +@org.seasar.doma.EntityTypeImplementation +public final class _Department extends org.seasar.doma.jdbc.entity.AbstractEntityType { + + static { + org.seasar.doma.internal.Artifact.validateVersion("3.4.0"); + } + + private static final _Department __singleton = new _Department(); + + private final org.seasar.doma.jdbc.entity.NamingType __namingType = null; + + private final java.util.function.Supplier> __listenerSupplier; + + private final boolean __immutable; + + private final String __catalogName; + + private final String __schemaName; + + private final String __tableName; + + private final boolean __isQuoteRequired; + + private final String __name; + + private final java.util.List> __idPropertyTypes; + + private final java.util.List> __entityPropertyTypes; + + private final java.util.Map> __entityPropertyTypeMap; + + @SuppressWarnings("unused") + private final java.util.Map> __embeddedPropertyTypeMap; + + private final java.util.List __associationPropertyTypes; + + private _Department() { + __listenerSupplier = org.seasar.doma.internal.jdbc.entity.NullEntityListenerSuppliers.of(); + __immutable = false; + __name = "Department"; + __catalogName = ""; + __schemaName = ""; + __tableName = ""; + __isQuoteRequired = false; + java.util.List> __idList = new java.util.ArrayList<>(); + java.util.List> __list = new java.util.ArrayList<>(3); + java.util.Map> __map = new java.util.LinkedHashMap<>(3); + java.util.Map> __embeddedMap = new java.util.LinkedHashMap<>(3); + initializeMaps(__map, __embeddedMap); + initializeIdList(__map, __idList); + initializeList(__map, __list); + __idPropertyTypes = java.util.Collections.unmodifiableList(__idList); + __entityPropertyTypes = java.util.Collections.unmodifiableList(__list); + __entityPropertyTypeMap = java.util.Collections.unmodifiableMap(__map); + __embeddedPropertyTypeMap = java.util.Collections.unmodifiableMap(__embeddedMap); + java.util.List __associationList = new java.util.ArrayList<>(1); + initializeAssociationList(__associationList); + __associationPropertyTypes = java.util.Collections.unmodifiableList(__associationList); + } + + private void initializeMaps(java.util.Map> __map, java.util.Map> __embeddedMap) { + __map.put("id", new org.seasar.doma.jdbc.entity.AssignedIdPropertyType(example.common.entity.Department.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofInteger(), "id", "", __namingType, false)); + __map.put("name", new org.seasar.doma.jdbc.entity.DefaultPropertyType(example.common.entity.Department.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofString(), "name", "", __namingType, true, true, false)); + __map.put("version", new org.seasar.doma.jdbc.entity.VersionPropertyType(example.common.entity.Department.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofInteger(), "version", "", __namingType, false)); + } + + private void initializeIdList(java.util.Map> __map, java.util.List> __idList) { + __idList.add(__map.get("id")); + } + + private void initializeList(java.util.Map> __map, java.util.List> __list) { + __list.addAll(__map.values()); + } + + private void initializeAssociationList(java.util.List __associationList) { + __associationList.add(new org.seasar.doma.jdbc.entity.DefaultAssociationPropertyType("employees")); + } + + @Override + public org.seasar.doma.jdbc.entity.NamingType getNamingType() { + return __namingType; + } + + @Override + public boolean isImmutable() { + return __immutable; + } + + @Override + public String getName() { + return __name; + } + + @Override + public String getCatalogName() { + return __catalogName; + } + + @Override + public String getSchemaName() { + return __schemaName; + } + + @Override + public String getTableName(java.util.function.BiFunction namingFunction) { + if (__tableName.isEmpty()) { + return namingFunction.apply(__namingType, __name); + } + return __tableName; + } + + @Override + public boolean isQuoteRequired() { + return __isQuoteRequired; + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void preInsert(example.common.entity.Department entity, org.seasar.doma.jdbc.entity.PreInsertContext context) { + Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class; + org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.preInsert(entity, context); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void preUpdate(example.common.entity.Department entity, org.seasar.doma.jdbc.entity.PreUpdateContext context) { + Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class; + org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.preUpdate(entity, context); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void preDelete(example.common.entity.Department entity, org.seasar.doma.jdbc.entity.PreDeleteContext context) { + Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class; + org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.preDelete(entity, context); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void postInsert(example.common.entity.Department entity, org.seasar.doma.jdbc.entity.PostInsertContext context) { + Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class; + org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.postInsert(entity, context); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void postUpdate(example.common.entity.Department entity, org.seasar.doma.jdbc.entity.PostUpdateContext context) { + Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class; + org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.postUpdate(entity, context); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void postDelete(example.common.entity.Department entity, org.seasar.doma.jdbc.entity.PostDeleteContext context) { + Class __listenerClass = org.seasar.doma.jdbc.entity.NullEntityListener.class; + org.seasar.doma.jdbc.entity.NullEntityListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.postDelete(entity, context); + } + + @Override + public java.util.List getAssociationPropertyTypes() { + return __associationPropertyTypes; + } + + @Override + public java.util.List> getEntityPropertyTypes() { + return __entityPropertyTypes; + } + + @Override + public org.seasar.doma.jdbc.entity.EntityPropertyType getEntityPropertyType(String __name) { + return __entityPropertyTypeMap.get(__name); + } + + @Override + public java.util.List> getIdPropertyTypes() { + return __idPropertyTypes; + } + + @Override + public org.seasar.doma.jdbc.entity.GeneratedIdPropertyType getGeneratedIdPropertyType() { + return (org.seasar.doma.jdbc.entity.GeneratedIdPropertyType)__entityPropertyTypeMap.get("null"); + } + + @Override + public org.seasar.doma.jdbc.entity.VersionPropertyType getVersionPropertyType() { + return (org.seasar.doma.jdbc.entity.VersionPropertyType)__entityPropertyTypeMap.get("version"); + } + + @Override + public org.seasar.doma.jdbc.entity.TenantIdPropertyType getTenantIdPropertyType() { + return (org.seasar.doma.jdbc.entity.TenantIdPropertyType)__entityPropertyTypeMap.get("null"); + } + + @Override + public example.common.entity.Department newEntity(java.util.Map> __args) { + example.common.entity.Department entity = new example.common.entity.Department(); + if (__args.get("id") != null) __args.get("id").save(entity); + if (__args.get("name") != null) __args.get("name").save(entity); + if (__args.get("version") != null) __args.get("version").save(entity); + return entity; + } + + @Override + public Class getEntityClass() { + return example.common.entity.Department.class; + } + + @Override + public example.common.entity.Department getOriginalStates(example.common.entity.Department __entity) { + return null; + } + + @Override + public void saveCurrentStates(example.common.entity.Department __entity) { + } + + /** + * @return the singleton + */ + public static _Department getSingletonInternal() { + return __singleton; + } + + /** + * @return the new instance + */ + public static _Department newInstance() { + return new _Department(); + } + +} diff --git a/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/_Employee.java b/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/_Employee.java new file mode 100644 index 00000000..73b0ebcb --- /dev/null +++ b/common/build/generated/sources/annotationProcessor/java/main/example/common/entity/_Employee.java @@ -0,0 +1,281 @@ +package example.common.entity; + +/** */ +@javax.annotation.processing.Generated(value = { "Doma", "3.4.0" }, date = "2025-02-15T08:44:03.596+0900") +@org.seasar.doma.EntityTypeImplementation +public final class _Employee extends org.seasar.doma.jdbc.entity.AbstractEntityType { + + static { + org.seasar.doma.internal.Artifact.validateVersion("3.4.0"); + } + + private static final _Employee __singleton = new _Employee(); + + private static final org.seasar.doma.jdbc.entity.OriginalStatesAccessor __originalStatesAccessor = new org.seasar.doma.jdbc.entity.OriginalStatesAccessor<>(example.common.entity.Employee.class, "originalStates"); + + private final org.seasar.doma.jdbc.entity.NamingType __namingType = null; + + private final org.seasar.doma.jdbc.id.BuiltinSequenceIdGenerator __idGenerator = new org.seasar.doma.jdbc.id.BuiltinSequenceIdGenerator(); + { + __idGenerator.setQualifiedSequenceName("EMPLOYEE_SEQ"); + __idGenerator.setInitialValue(1); + __idGenerator.setAllocationSize(1); + __idGenerator.initialize(); + } + + private final java.util.function.Supplier> __listenerSupplier; + + private final boolean __immutable; + + private final String __catalogName; + + private final String __schemaName; + + private final String __tableName; + + private final boolean __isQuoteRequired; + + private final String __name; + + private final java.util.List> __idPropertyTypes; + + private final java.util.List> __entityPropertyTypes; + + private final java.util.Map> __entityPropertyTypeMap; + + @SuppressWarnings("unused") + private final java.util.Map> __embeddedPropertyTypeMap; + + private final java.util.List __associationPropertyTypes; + + private _Employee() { + __listenerSupplier = new java.util.function.Supplier>() { @Override public example.common.entity.EmployeeListener get() { return ListenerHolder.listener; } }; + __immutable = false; + __name = "Employee"; + __catalogName = ""; + __schemaName = ""; + __tableName = ""; + __isQuoteRequired = false; + java.util.List> __idList = new java.util.ArrayList<>(); + java.util.List> __list = new java.util.ArrayList<>(10); + java.util.Map> __map = new java.util.LinkedHashMap<>(10); + java.util.Map> __embeddedMap = new java.util.LinkedHashMap<>(10); + initializeMaps(__map, __embeddedMap); + initializeIdList(__map, __idList); + initializeList(__map, __list); + __idPropertyTypes = java.util.Collections.unmodifiableList(__idList); + __entityPropertyTypes = java.util.Collections.unmodifiableList(__list); + __entityPropertyTypeMap = java.util.Collections.unmodifiableMap(__map); + __embeddedPropertyTypeMap = java.util.Collections.unmodifiableMap(__embeddedMap); + java.util.List __associationList = new java.util.ArrayList<>(1); + initializeAssociationList(__associationList); + __associationPropertyTypes = java.util.Collections.unmodifiableList(__associationList); + } + + private void initializeMaps(java.util.Map> __map, java.util.Map> __embeddedMap) { + __map.put("id", new org.seasar.doma.jdbc.entity.GeneratedIdPropertyType(example.common.entity.Employee.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofInteger(), "id", "", __namingType, false, __idGenerator)); + __map.put("name", new org.seasar.doma.jdbc.entity.DefaultPropertyType(example.common.entity.Employee.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofString(), "name", "", __namingType, true, true, false)); + __map.put("age", new org.seasar.doma.jdbc.entity.DefaultPropertyType(example.common.entity.Employee.class, __.example.common.domain._Age.getSingletonInternal().createScalarSupplier(), "age", "", __namingType, true, true, false)); + __map.put("salary", new org.seasar.doma.jdbc.entity.DefaultPropertyType(example.common.entity.Employee.class, example.common.domain._Salary.getSingletonInternal().createScalarSupplier(), "salary", "", __namingType, true, true, false)); + __map.put("jobType", new org.seasar.doma.jdbc.entity.DefaultPropertyType(example.common.entity.Employee.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofEnum(example.common.entity.JobType.class), "jobType", "JOB_TYPE", __namingType, true, true, false)); + __map.put("hiredate", new org.seasar.doma.jdbc.entity.DefaultPropertyType(example.common.entity.Employee.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofLocalDate(), "hiredate", "", __namingType, true, true, false)); + __map.put("departmentId", new org.seasar.doma.jdbc.entity.DefaultPropertyType(example.common.entity.Employee.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofInteger(), "departmentId", "DEPARTMENT_ID", __namingType, true, true, false)); + __map.put("version", new org.seasar.doma.jdbc.entity.VersionPropertyType(example.common.entity.Employee.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofInteger(), "version", "VERSION", __namingType, false)); + __map.put("insertTimestamp", new org.seasar.doma.jdbc.entity.DefaultPropertyType(example.common.entity.Employee.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofLocalDateTime(), "insertTimestamp", "", __namingType, true, true, false)); + __map.put("updateTimestamp", new org.seasar.doma.jdbc.entity.DefaultPropertyType(example.common.entity.Employee.class, org.seasar.doma.internal.jdbc.scalar.BasicScalarSuppliers.ofLocalDateTime(), "updateTimestamp", "", __namingType, true, true, false)); + } + + private void initializeIdList(java.util.Map> __map, java.util.List> __idList) { + __idList.add(__map.get("id")); + } + + private void initializeList(java.util.Map> __map, java.util.List> __list) { + __list.addAll(__map.values()); + } + + private void initializeAssociationList(java.util.List __associationList) { + __associationList.add(new org.seasar.doma.jdbc.entity.DefaultAssociationPropertyType("department")); + } + + @Override + public org.seasar.doma.jdbc.entity.NamingType getNamingType() { + return __namingType; + } + + @Override + public boolean isImmutable() { + return __immutable; + } + + @Override + public String getName() { + return __name; + } + + @Override + public String getCatalogName() { + return __catalogName; + } + + @Override + public String getSchemaName() { + return __schemaName; + } + + @Override + public String getTableName(java.util.function.BiFunction namingFunction) { + if (__tableName.isEmpty()) { + return namingFunction.apply(__namingType, __name); + } + return __tableName; + } + + @Override + public boolean isQuoteRequired() { + return __isQuoteRequired; + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void preInsert(example.common.entity.Employee entity, org.seasar.doma.jdbc.entity.PreInsertContext context) { + Class __listenerClass = example.common.entity.EmployeeListener.class; + example.common.entity.EmployeeListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.preInsert(entity, context); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void preUpdate(example.common.entity.Employee entity, org.seasar.doma.jdbc.entity.PreUpdateContext context) { + Class __listenerClass = example.common.entity.EmployeeListener.class; + example.common.entity.EmployeeListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.preUpdate(entity, context); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void preDelete(example.common.entity.Employee entity, org.seasar.doma.jdbc.entity.PreDeleteContext context) { + Class __listenerClass = example.common.entity.EmployeeListener.class; + example.common.entity.EmployeeListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.preDelete(entity, context); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void postInsert(example.common.entity.Employee entity, org.seasar.doma.jdbc.entity.PostInsertContext context) { + Class __listenerClass = example.common.entity.EmployeeListener.class; + example.common.entity.EmployeeListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.postInsert(entity, context); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void postUpdate(example.common.entity.Employee entity, org.seasar.doma.jdbc.entity.PostUpdateContext context) { + Class __listenerClass = example.common.entity.EmployeeListener.class; + example.common.entity.EmployeeListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.postUpdate(entity, context); + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + @Override + public void postDelete(example.common.entity.Employee entity, org.seasar.doma.jdbc.entity.PostDeleteContext context) { + Class __listenerClass = example.common.entity.EmployeeListener.class; + example.common.entity.EmployeeListener __listener = context.getConfig().getEntityListenerProvider().get(__listenerClass, __listenerSupplier); + __listener.postDelete(entity, context); + } + + @Override + public java.util.List getAssociationPropertyTypes() { + return __associationPropertyTypes; + } + + @Override + public java.util.List> getEntityPropertyTypes() { + return __entityPropertyTypes; + } + + @Override + public org.seasar.doma.jdbc.entity.EntityPropertyType getEntityPropertyType(String __name) { + return __entityPropertyTypeMap.get(__name); + } + + @Override + public java.util.List> getIdPropertyTypes() { + return __idPropertyTypes; + } + + @Override + public org.seasar.doma.jdbc.entity.GeneratedIdPropertyType getGeneratedIdPropertyType() { + return (org.seasar.doma.jdbc.entity.GeneratedIdPropertyType)__entityPropertyTypeMap.get("id"); + } + + @Override + public org.seasar.doma.jdbc.entity.VersionPropertyType getVersionPropertyType() { + return (org.seasar.doma.jdbc.entity.VersionPropertyType)__entityPropertyTypeMap.get("version"); + } + + @Override + public org.seasar.doma.jdbc.entity.TenantIdPropertyType getTenantIdPropertyType() { + return (org.seasar.doma.jdbc.entity.TenantIdPropertyType)__entityPropertyTypeMap.get("null"); + } + + @Override + public example.common.entity.Employee newEntity(java.util.Map> __args) { + example.common.entity.Employee entity = new example.common.entity.Employee(); + if (__args.get("id") != null) __args.get("id").save(entity); + if (__args.get("name") != null) __args.get("name").save(entity); + if (__args.get("age") != null) __args.get("age").save(entity); + if (__args.get("salary") != null) __args.get("salary").save(entity); + if (__args.get("jobType") != null) __args.get("jobType").save(entity); + if (__args.get("hiredate") != null) __args.get("hiredate").save(entity); + if (__args.get("departmentId") != null) __args.get("departmentId").save(entity); + if (__args.get("version") != null) __args.get("version").save(entity); + if (__args.get("insertTimestamp") != null) __args.get("insertTimestamp").save(entity); + if (__args.get("updateTimestamp") != null) __args.get("updateTimestamp").save(entity); + return entity; + } + + @Override + public Class getEntityClass() { + return example.common.entity.Employee.class; + } + + @Override + public example.common.entity.Employee getOriginalStates(example.common.entity.Employee __entity) { + return __originalStatesAccessor.get(__entity); + } + + @Override + public void saveCurrentStates(example.common.entity.Employee __entity) { + example.common.entity.Employee __currentStates = new example.common.entity.Employee(); + (__entityPropertyTypeMap.get("id")).copy(__currentStates, __entity); + (__entityPropertyTypeMap.get("name")).copy(__currentStates, __entity); + (__entityPropertyTypeMap.get("age")).copy(__currentStates, __entity); + (__entityPropertyTypeMap.get("salary")).copy(__currentStates, __entity); + (__entityPropertyTypeMap.get("jobType")).copy(__currentStates, __entity); + (__entityPropertyTypeMap.get("hiredate")).copy(__currentStates, __entity); + (__entityPropertyTypeMap.get("departmentId")).copy(__currentStates, __entity); + (__entityPropertyTypeMap.get("version")).copy(__currentStates, __entity); + (__entityPropertyTypeMap.get("insertTimestamp")).copy(__currentStates, __entity); + (__entityPropertyTypeMap.get("updateTimestamp")).copy(__currentStates, __entity); + __originalStatesAccessor.set(__entity, __currentStates); + } + + /** + * @return the singleton + */ + public static _Employee getSingletonInternal() { + return __singleton; + } + + /** + * @return the new instance + */ + public static _Employee newInstance() { + return new _Employee(); + } + + private static class ListenerHolder { + private static example.common.entity.EmployeeListener listener = new example.common.entity.EmployeeListener<>(); + } + +} diff --git a/jpms-java/src/main/java/example/jpms_java/DbConfig.java b/common/src/main/java/example/common/DbConfig.java similarity index 97% rename from jpms-java/src/main/java/example/jpms_java/DbConfig.java rename to common/src/main/java/example/common/DbConfig.java index dc1e46ac..49f09c15 100644 --- a/jpms-java/src/main/java/example/jpms_java/DbConfig.java +++ b/common/src/main/java/example/common/DbConfig.java @@ -1,4 +1,4 @@ -package example.jpms_java; +package example.common; import java.util.Objects; import javax.sql.DataSource; diff --git a/jpms-java/src/main/java/example/jpms_java/dao/ScriptDao.java b/common/src/main/java/example/common/dao/ScriptDao.java similarity index 82% rename from jpms-java/src/main/java/example/jpms_java/dao/ScriptDao.java rename to common/src/main/java/example/common/dao/ScriptDao.java index a1d74ba8..9aca16ac 100644 --- a/jpms-java/src/main/java/example/jpms_java/dao/ScriptDao.java +++ b/common/src/main/java/example/common/dao/ScriptDao.java @@ -1,4 +1,4 @@ -package example.jpms_java.dao; +package example.common.dao; import org.seasar.doma.Dao; import org.seasar.doma.Script; diff --git a/common/src/main/java/example/common/domain/Age.java b/common/src/main/java/example/common/domain/Age.java new file mode 100644 index 00000000..51e018dd --- /dev/null +++ b/common/src/main/java/example/common/domain/Age.java @@ -0,0 +1,3 @@ +package example.common.domain; + +public record Age(int value) {} diff --git a/dao-style-text/src/main/java/example/dao_style_text/domain/AgeConverter.java b/common/src/main/java/example/common/domain/AgeConverter.java similarity index 84% rename from dao-style-text/src/main/java/example/dao_style_text/domain/AgeConverter.java rename to common/src/main/java/example/common/domain/AgeConverter.java index 10083d2f..77f34371 100644 --- a/dao-style-text/src/main/java/example/dao_style_text/domain/AgeConverter.java +++ b/common/src/main/java/example/common/domain/AgeConverter.java @@ -1,4 +1,4 @@ -package example.dao_style_text.domain; +package example.common.domain; import org.seasar.doma.ExternalDomain; import org.seasar.doma.jdbc.domain.DomainConverter; @@ -7,7 +7,7 @@ public class AgeConverter implements DomainConverter { @Override public Integer fromDomainToValue(Age age) { - return age.getValue(); + return age.value(); } @Override diff --git a/jpms-java/src/main/java/example/jpms_java/domain/DomainConverterProvider.java b/common/src/main/java/example/common/domain/DomainConverterProvider.java similarity index 78% rename from jpms-java/src/main/java/example/jpms_java/domain/DomainConverterProvider.java rename to common/src/main/java/example/common/domain/DomainConverterProvider.java index 077dd897..9495e044 100644 --- a/jpms-java/src/main/java/example/jpms_java/domain/DomainConverterProvider.java +++ b/common/src/main/java/example/common/domain/DomainConverterProvider.java @@ -1,4 +1,4 @@ -package example.jpms_java.domain; +package example.common.domain; import org.seasar.doma.DomainConverters; diff --git a/common/src/main/java/example/common/domain/Salary.java b/common/src/main/java/example/common/domain/Salary.java new file mode 100644 index 00000000..2c0ca0ef --- /dev/null +++ b/common/src/main/java/example/common/domain/Salary.java @@ -0,0 +1,27 @@ +package example.common.domain; + +import org.seasar.doma.DataType; + +@DataType +public record Salary(Integer value) { + + public Salary add(Salary salary) { + if (salary == null) { + throw new NullPointerException("The salary parameter is null."); + } + if (this.value == null || salary.value == null) { + return new Salary(null); + } + return new Salary(this.value + salary.value); + } + + public Salary subtract(Salary salary) { + if (salary == null) { + throw new NullPointerException("The salary parameter is null."); + } + if (this.value == null || salary.value == null) { + return new Salary(null); + } + return new Salary(this.value - salary.value); + } +} diff --git a/common/src/main/java/example/common/entity/Category.java b/common/src/main/java/example/common/entity/Category.java new file mode 100644 index 00000000..5730a19d --- /dev/null +++ b/common/src/main/java/example/common/entity/Category.java @@ -0,0 +1,24 @@ +package example.common.entity; + +import java.util.ArrayList; +import java.util.List; +import org.seasar.doma.Association; +import org.seasar.doma.Entity; +import org.seasar.doma.GeneratedValue; +import org.seasar.doma.GenerationType; +import org.seasar.doma.Id; +import org.seasar.doma.Version; +import org.seasar.doma.jdbc.entity.NamingType; + +@Entity(naming = NamingType.SNAKE_LOWER_CASE) +public class Category { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; + + public String name; + + @Version public Integer version; + + @Association public List productList = new ArrayList<>(); +} diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/entity/Department.java b/common/src/main/java/example/common/entity/Department.java similarity index 95% rename from dsl-style-java/src/main/java/example/dsl_style_java/entity/Department.java rename to common/src/main/java/example/common/entity/Department.java index d656e9ef..f670967c 100644 --- a/dsl-style-java/src/main/java/example/dsl_style_java/entity/Department.java +++ b/common/src/main/java/example/common/entity/Department.java @@ -1,4 +1,4 @@ -package example.dsl_style_java.entity; +package example.common.entity; import java.util.ArrayList; import java.util.List; diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/entity/Employee.java b/common/src/main/java/example/common/entity/Employee.java similarity index 94% rename from dsl-style-java/src/main/java/example/dsl_style_java/entity/Employee.java rename to common/src/main/java/example/common/entity/Employee.java index e4cc6698..e501a088 100644 --- a/dsl-style-java/src/main/java/example/dsl_style_java/entity/Employee.java +++ b/common/src/main/java/example/common/entity/Employee.java @@ -1,7 +1,7 @@ -package example.dsl_style_java.entity; +package example.common.entity; -import example.dsl_style_java.domain.Age; -import example.dsl_style_java.domain.Salary; +import example.common.domain.Age; +import example.common.domain.Salary; import java.time.LocalDate; import java.time.LocalDateTime; import org.seasar.doma.Association; @@ -15,7 +15,7 @@ import org.seasar.doma.SequenceGenerator; import org.seasar.doma.Version; -@Entity(listener = EmployeeListener.class, metamodel = @Metamodel) +@Entity(metamodel = @Metamodel, listener = EmployeeListener.class) public class Employee { @Id diff --git a/jpms-java/src/main/java/example/jpms_java/entity/EmployeeListener.java b/common/src/main/java/example/common/entity/EmployeeListener.java similarity index 97% rename from jpms-java/src/main/java/example/jpms_java/entity/EmployeeListener.java rename to common/src/main/java/example/common/entity/EmployeeListener.java index 67e23ccb..48e8ee16 100644 --- a/jpms-java/src/main/java/example/jpms_java/entity/EmployeeListener.java +++ b/common/src/main/java/example/common/entity/EmployeeListener.java @@ -1,4 +1,4 @@ -package example.jpms_java.entity; +package example.common.entity; import java.time.LocalDateTime; import org.seasar.doma.jdbc.entity.EntityListener; diff --git a/jpms-java/src/main/java/example/jpms_java/entity/JobType.java b/common/src/main/java/example/common/entity/JobType.java similarity index 70% rename from jpms-java/src/main/java/example/jpms_java/entity/JobType.java rename to common/src/main/java/example/common/entity/JobType.java index 99d15010..61dfcaf4 100644 --- a/jpms-java/src/main/java/example/jpms_java/entity/JobType.java +++ b/common/src/main/java/example/common/entity/JobType.java @@ -1,4 +1,4 @@ -package example.jpms_java.entity; +package example.common.entity; public enum JobType { SALESMAN, diff --git a/common/src/main/java/example/common/entity/Order.java b/common/src/main/java/example/common/entity/Order.java new file mode 100644 index 00000000..c9b3da2a --- /dev/null +++ b/common/src/main/java/example/common/entity/Order.java @@ -0,0 +1,31 @@ +package example.common.entity; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import org.seasar.doma.Association; +import org.seasar.doma.Entity; +import org.seasar.doma.GeneratedValue; +import org.seasar.doma.GenerationType; +import org.seasar.doma.Id; +import org.seasar.doma.Table; +import org.seasar.doma.Version; +import org.seasar.doma.jdbc.entity.NamingType; + +@Entity(naming = NamingType.SNAKE_LOWER_CASE) +@Table(quote = true) +public class Order { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; + + public Integer userId; + public LocalDateTime orderDate; + public String status; + + @Version public Integer version; + + @Association public List orderItemList = new ArrayList<>(); + @Association public Payment payment; + @Association public User user; +} diff --git a/common/src/main/java/example/common/entity/OrderItem.java b/common/src/main/java/example/common/entity/OrderItem.java new file mode 100644 index 00000000..5e6750ae --- /dev/null +++ b/common/src/main/java/example/common/entity/OrderItem.java @@ -0,0 +1,29 @@ +package example.common.entity; + +import java.math.BigDecimal; +import org.seasar.doma.Association; +import org.seasar.doma.Entity; +import org.seasar.doma.GeneratedValue; +import org.seasar.doma.GenerationType; +import org.seasar.doma.Id; +import org.seasar.doma.Table; +import org.seasar.doma.Version; +import org.seasar.doma.jdbc.entity.NamingType; + +@Entity(naming = NamingType.SNAKE_LOWER_CASE) +@Table(name = "order_item") +public class OrderItem { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; + + public Integer orderId; + public Integer productId; + public Integer quantity; + public BigDecimal price; + + @Version public Integer version; + + @Association public Order order; + @Association public Product product; +} diff --git a/common/src/main/java/example/common/entity/Payment.java b/common/src/main/java/example/common/entity/Payment.java new file mode 100644 index 00000000..d1cfa706 --- /dev/null +++ b/common/src/main/java/example/common/entity/Payment.java @@ -0,0 +1,26 @@ +package example.common.entity; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import org.seasar.doma.Association; +import org.seasar.doma.Entity; +import org.seasar.doma.GeneratedValue; +import org.seasar.doma.GenerationType; +import org.seasar.doma.Id; +import org.seasar.doma.Version; +import org.seasar.doma.jdbc.entity.NamingType; + +@Entity(naming = NamingType.SNAKE_LOWER_CASE) +public class Payment { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; + + public Integer orderId; + public BigDecimal amount; + public LocalDateTime paymentDate; + + @Version public Integer version; + + @Association public Order order; +} diff --git a/common/src/main/java/example/common/entity/Product.java b/common/src/main/java/example/common/entity/Product.java new file mode 100644 index 00000000..acc3f65b --- /dev/null +++ b/common/src/main/java/example/common/entity/Product.java @@ -0,0 +1,29 @@ +package example.common.entity; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import org.seasar.doma.Association; +import org.seasar.doma.Entity; +import org.seasar.doma.GeneratedValue; +import org.seasar.doma.GenerationType; +import org.seasar.doma.Id; +import org.seasar.doma.Version; +import org.seasar.doma.jdbc.entity.NamingType; + +@Entity(naming = NamingType.SNAKE_LOWER_CASE) +public class Product { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; + + public String name; + public BigDecimal price; + public Integer stockQuantity; + public LocalDateTime createdAt; + + @Version public Integer version; + + @Association public List categoryList = new ArrayList<>(); +} diff --git a/common/src/main/java/example/common/entity/ProductCategory.java b/common/src/main/java/example/common/entity/ProductCategory.java new file mode 100644 index 00000000..f9f11d8f --- /dev/null +++ b/common/src/main/java/example/common/entity/ProductCategory.java @@ -0,0 +1,24 @@ +package example.common.entity; + +import org.seasar.doma.Association; +import org.seasar.doma.Entity; +import org.seasar.doma.GeneratedValue; +import org.seasar.doma.GenerationType; +import org.seasar.doma.Id; +import org.seasar.doma.Version; +import org.seasar.doma.jdbc.entity.NamingType; + +@Entity(naming = NamingType.SNAKE_LOWER_CASE) +public class ProductCategory { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; + + public Integer productId; + public Integer categoryId; + + @Version public Integer version; + + @Association public Product product; + @Association public Category category; +} diff --git a/common/src/main/java/example/common/entity/Review.java b/common/src/main/java/example/common/entity/Review.java new file mode 100644 index 00000000..3fbf3fa4 --- /dev/null +++ b/common/src/main/java/example/common/entity/Review.java @@ -0,0 +1,28 @@ +package example.common.entity; + +import java.time.LocalDateTime; +import org.seasar.doma.Association; +import org.seasar.doma.Entity; +import org.seasar.doma.GeneratedValue; +import org.seasar.doma.GenerationType; +import org.seasar.doma.Id; +import org.seasar.doma.Version; +import org.seasar.doma.jdbc.entity.NamingType; + +@Entity(naming = NamingType.SNAKE_LOWER_CASE) +public class Review { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; + + public Integer userId; + public Integer productId; + public Integer rating; + public String comment; + public LocalDateTime createdAt; + + @Version public Integer version; + + @Association public User user; + @Association public Product product; +} diff --git a/common/src/main/java/example/common/entity/Role.java b/common/src/main/java/example/common/entity/Role.java new file mode 100644 index 00000000..9bf40e57 --- /dev/null +++ b/common/src/main/java/example/common/entity/Role.java @@ -0,0 +1,19 @@ +package example.common.entity; + +import java.util.ArrayList; +import java.util.List; +import org.seasar.doma.*; +import org.seasar.doma.jdbc.entity.NamingType; + +@Entity(naming = NamingType.SNAKE_LOWER_CASE) +public class Role { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; + + public String name; + + @Version public Integer version; + + @Association public List userList = new ArrayList<>(); +} diff --git a/common/src/main/java/example/common/entity/User.java b/common/src/main/java/example/common/entity/User.java new file mode 100644 index 00000000..2d7efe55 --- /dev/null +++ b/common/src/main/java/example/common/entity/User.java @@ -0,0 +1,24 @@ +package example.common.entity; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import org.seasar.doma.*; +import org.seasar.doma.jdbc.entity.NamingType; + +@Entity(naming = NamingType.SNAKE_LOWER_CASE) +@Table(quote = true) +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; + + public String name; + public String email; + + public LocalDateTime createdAt; + + @Version public Integer version; + + @Association public List roleList = new ArrayList<>(); +} diff --git a/common/src/main/java/example/common/entity/UserRole.java b/common/src/main/java/example/common/entity/UserRole.java new file mode 100644 index 00000000..6368ab48 --- /dev/null +++ b/common/src/main/java/example/common/entity/UserRole.java @@ -0,0 +1,26 @@ +package example.common.entity; + +import org.seasar.doma.Association; +import org.seasar.doma.Entity; +import org.seasar.doma.GeneratedValue; +import org.seasar.doma.GenerationType; +import org.seasar.doma.Id; +import org.seasar.doma.Table; +import org.seasar.doma.Version; +import org.seasar.doma.jdbc.entity.NamingType; + +@Entity(naming = NamingType.SNAKE_LOWER_CASE) +@Table(name = "user_role") +public class UserRole { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + public Integer id; + + public Integer userId; + public Integer roleId; + + @Version public Integer version; + + @Association public User user; + @Association public Role role; +} diff --git a/common/src/main/module-info.java b/common/src/main/module-info.java new file mode 100644 index 00000000..0f87fa59 --- /dev/null +++ b/common/src/main/module-info.java @@ -0,0 +1,4 @@ +module common { + exports example.common.domain; + exports example.common.entity; +} diff --git a/common/src/main/resources/META-INF/example/common/dao/ScriptDao/create.script b/common/src/main/resources/META-INF/example/common/dao/ScriptDao/create.script new file mode 100644 index 00000000..8724c393 --- /dev/null +++ b/common/src/main/resources/META-INF/example/common/dao/ScriptDao/create.script @@ -0,0 +1,175 @@ +create sequence employee_seq start with 100 increment by 1; + +create table department ( + id integer not null primary key, + name varchar(255) not null, + version integer not null +); + +create table employee ( + id integer not null primary key, + name varchar(255) not null, + age integer not null, + salary integer, + job_type varchar(20), + hiredate timestamp, + department_id integer, + version integer not null, + inserttimestamp timestamp, + updatetimestamp timestamp +); + +create table `user` ( + id int auto_increment primary key, + name varchar(100) not null, + email varchar(255) unique not null, + created_at timestamp default current_timestamp, + version int default 0 not null +); + +create table role ( + id int auto_increment primary key, + name varchar(50) unique not null, + version int default 0 not null +); + +create table user_role ( + id int auto_increment primary key, + user_id int not null, + role_id int not null, + version int default 0 not null, + foreign key (user_id) references `user`(id), + foreign key (role_id) references role(id) +); + +create table product ( + id int auto_increment primary key, + name varchar(255) not null, + price decimal(10,2) not null, + stock_quantity int not null, + created_at timestamp default current_timestamp, + version int default 0 not null +); + +create table category ( + id int auto_increment primary key, + name varchar(100) unique not null, + version int default 0 not null +); + +create table product_category ( + id int auto_increment primary key, + product_id int not null, + category_id int not null, + version int default 0 not null, + foreign key (product_id) references product(id), + foreign key (category_id) references category(id) +); + +create table `order` ( + id int auto_increment primary key, + user_id int not null, + order_date timestamp default current_timestamp, + status varchar(50) not null, + version int default 0 not null, + foreign key (user_id) references `user`(id) +); + +create table order_item ( + id int auto_increment primary key, + order_id int not null, + product_id int not null, + quantity int not null, + price decimal(10,2) not null, + version int default 0 not null, + foreign key (order_id) references `order`(id), + foreign key (product_id) references product(id) +); + +create table payment ( + id int auto_increment primary key, + order_id int unique not null, + amount decimal(10,2) not null, + payment_date timestamp default current_timestamp, + version int default 0 not null, + foreign key (order_id) references `order`(id) +); + +create table review ( + id int auto_increment primary key, + user_id int not null, + product_id int not null, + rating int check (rating between 1 and 5), + comment text, + created_at timestamp default current_timestamp, + version int default 0 not null, + foreign key (user_id) references `user`(id), + foreign key (product_id) references product(id) +); + +insert into department values + (1, 'ACCOUNTING', 1), + (2, 'RESEARCH', 1), + (3, 'SALES', 1); + +insert into employee values + (1, 'ALLEN', 30, 1600, 'SALESMAN', '2008-01-20 12:34:56', 1, 1, current_timestamp, null), + (2, 'WARD', 32, 1250, 'ANALYST', '2008-02-20 12:34:56', 2, 1, current_timestamp, null), + (3, 'JONES', 38, 2975, 'MANAGER', '2008-03-20 12:34:56', 3, 1, current_timestamp, null), + (4, 'MARTIN', 40, 1250, 'SALESMAN', '2008-04-20 12:34:56', 1, 1, current_timestamp, null), + (5, 'BLAKE', 50, 2850, 'SALESMAN', '2008-05-20 12:34:56', 2, 1, current_timestamp, null), + (6, 'CLARK', 23, 2450, 'MANAGER', '2008-06-20 12:34:56', 3, 1, current_timestamp, null), + (7, 'SCOTT', 28, 3000, 'SALESMAN', '2008-07-20 12:34:56', 1, 1, current_timestamp, null), + (8, 'KING', 38, 5000, 'CLERK', '2008-08-20 12:34:56', 2, 1, current_timestamp, null), + (9, 'TURNER', 33, 1500, 'ANALYST', '2008-09-20 12:34:56', 3, 1, current_timestamp, null), + (10, 'ADAMS', 62, 1100, 'SALESMAN', '2008-10-20 12:34:56', 1, 1, current_timestamp, null), + (11, 'JAMES', 44, 950, 'CLERK', '2008-11-20 12:34:56', 2, 1, current_timestamp, null), + (12, 'FORD', 55, 3000, 'ANALYST', '2008-12-20 12:34:56', 3, 1, current_timestamp, null), + (13, 'MILLER', 51, 1300, 'MANAGER', '2009-01-20 12:34:56', 1, 1, current_timestamp, null), + (14, 'SMITH', 410, 800, 'PRESIDENT', '2009-02-20 12:34:56', 2, 1, current_timestamp, null); + +insert into `user` (name, email, version) values + ('Alice', 'alice@example.com', 0), + ('Bob', 'bob@example.com', 0), + ('Charlie', 'charlie@example.com', 0); + +insert into role (name, version) values + ('Admin', 0), + ('User', 0); + +insert into user_role (user_id, role_id, version) values + (1, 1, 0), -- Alice is Admin + (2, 2, 0), -- Bob is User + (3, 2, 0); -- Charlie is User + +insert into product (name, price, stock_quantity, version) values + ('Laptop', 1200.99, 10, 0), + ('Smartphone', 699.49, 20, 0), + ('Tablet', 399.99, 15, 0); + +insert into category (name, version) values + ('Electronics', 0), + ('Gadgets', 0); + +insert into product_category (product_id, category_id, version) values + (1, 1, 0), -- Laptop -> Electronics + (2, 1, 0), -- Smartphone -> Electronics + (2, 2, 0), -- Smartphone -> Gadgets + (3, 2, 0); -- Tablet -> Gadgets + +insert into `order` (user_id, status, version) values + (1, 'Pending', 0), + (2, 'Shipped', 0); + +insert into order_item (order_id, product_id, quantity, price, version) values + (1, 1, 1, 1200.99, 0), -- Alice orders 1 Laptop + (2, 2, 2, 699.49, 0); -- Bob orders 2 Smartphones + +insert into payment (order_id, amount, version) values + (1, 1200.99, 0), + (2, 1398.98, 0); + +insert into review (user_id, product_id, rating, comment, version) values + (1, 1, 5, 'Great laptop!', 0), + (2, 2, 4, 'Good phone, but battery life could be better.', 0), + (3, 3, 3, 'Tablet is decent for the price.', 0); diff --git a/common/src/main/resources/META-INF/example/common/dao/ScriptDao/drop.script b/common/src/main/resources/META-INF/example/common/dao/ScriptDao/drop.script new file mode 100644 index 00000000..09256cce --- /dev/null +++ b/common/src/main/resources/META-INF/example/common/dao/ScriptDao/drop.script @@ -0,0 +1,14 @@ +drop sequence employee_seq; +drop table employee; +drop table department; + +drop table if exists review; +drop table if exists payment; +drop table if exists order_item; +drop table if exists `order`; +drop table if exists product_category; +drop table if exists category; +drop table if exists product; +drop table if exists user_role; +drop table if exists role; +drop table if exists `user`; diff --git a/dao-style-basic/build.gradle.kts b/dao-style-basic/build.gradle.kts deleted file mode 100644 index aa3f0c6f..00000000 --- a/dao-style-basic/build.gradle.kts +++ /dev/null @@ -1,13 +0,0 @@ -plugins { - java -} - -tasks { - compileJava { - val aptOptions = extensions.getByType() - aptOptions.processorArgs = - mapOf( - "doma.domain.converters" to "example.dao_style_basic.domain.DomainConverterProvider", - ) - } -} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/DbConfig.java b/dao-style-basic/src/main/java/example/dao_style_basic/DbConfig.java deleted file mode 100644 index 232ab533..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/DbConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package example.dao_style_basic; - -import java.util.Objects; -import javax.sql.DataSource; -import org.seasar.doma.jdbc.Config; -import org.seasar.doma.jdbc.JdbcLogger; -import org.seasar.doma.jdbc.dialect.Dialect; -import org.seasar.doma.jdbc.tx.TransactionManager; - -public class DbConfig implements Config { - - private final Dialect dialect; - private final DataSource dataSource; - private final JdbcLogger jdbcLogger; - private final TransactionManager transactionManager; - - public DbConfig( - Dialect dialect, - DataSource dataSource, - JdbcLogger jdbcLogger, - TransactionManager transactionManager) { - this.dialect = Objects.requireNonNull(dialect); - this.dataSource = Objects.requireNonNull(dataSource); - this.jdbcLogger = Objects.requireNonNull(jdbcLogger); - this.transactionManager = Objects.requireNonNull(transactionManager); - } - - @Override - public JdbcLogger getJdbcLogger() { - return jdbcLogger; - } - - @Override - public Dialect getDialect() { - return dialect; - } - - @Override - public DataSource getDataSource() { - return dataSource; - } - - @Override - public TransactionManager getTransactionManager() { - return transactionManager; - } -} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/dao/EmployeeDao.java b/dao-style-basic/src/main/java/example/dao_style_basic/dao/EmployeeDao.java deleted file mode 100644 index 996f09f4..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/dao/EmployeeDao.java +++ /dev/null @@ -1,40 +0,0 @@ -package example.dao_style_basic.dao; - -import example.dao_style_basic.entity.Employee; -import java.util.List; -import org.seasar.doma.BatchDelete; -import org.seasar.doma.BatchInsert; -import org.seasar.doma.BatchUpdate; -import org.seasar.doma.Dao; -import org.seasar.doma.Delete; -import org.seasar.doma.Insert; -import org.seasar.doma.Select; -import org.seasar.doma.Update; - -@Dao -public interface EmployeeDao { - - @Select - Employee selectById(Integer id); - - @Select - List selectAll(); - - @Insert - int insert(Employee employee); - - @Update - int update(Employee employee); - - @Delete - int delete(Employee employee); - - @BatchInsert - int[] batchInsert(List employees); - - @BatchUpdate - int[] batchUpdate(List employees); - - @BatchDelete - int[] batchDelete(List employees); -} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/dao/ScriptDao.java b/dao-style-basic/src/main/java/example/dao_style_basic/dao/ScriptDao.java deleted file mode 100644 index 3fcde169..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/dao/ScriptDao.java +++ /dev/null @@ -1,14 +0,0 @@ -package example.dao_style_basic.dao; - -import org.seasar.doma.Dao; -import org.seasar.doma.Script; - -@Dao -public interface ScriptDao { - - @Script - void create(); - - @Script - void drop(); -} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/domain/Age.java b/dao-style-basic/src/main/java/example/dao_style_basic/domain/Age.java deleted file mode 100644 index 96e90310..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/domain/Age.java +++ /dev/null @@ -1,18 +0,0 @@ -package example.dao_style_basic.domain; - -public class Age { - private final int value; - - public Age(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - - @Override - public String toString() { - return "Age{" + "value=" + value + '}'; - } -} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/domain/AgeConverter.java b/dao-style-basic/src/main/java/example/dao_style_basic/domain/AgeConverter.java deleted file mode 100644 index 34dfcd3d..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/domain/AgeConverter.java +++ /dev/null @@ -1,17 +0,0 @@ -package example.dao_style_basic.domain; - -import org.seasar.doma.ExternalDomain; -import org.seasar.doma.jdbc.domain.DomainConverter; - -@ExternalDomain -public class AgeConverter implements DomainConverter { - @Override - public Integer fromDomainToValue(Age age) { - return age.getValue(); - } - - @Override - public Age fromValueToDomain(Integer value) { - return value == null ? null : new Age(value); - } -} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/domain/DomainConverterProvider.java b/dao-style-basic/src/main/java/example/dao_style_basic/domain/DomainConverterProvider.java deleted file mode 100644 index 49847308..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/domain/DomainConverterProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package example.dao_style_basic.domain; - -import org.seasar.doma.DomainConverters; - -@DomainConverters(AgeConverter.class) -public class DomainConverterProvider {} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/domain/Salary.java b/dao-style-basic/src/main/java/example/dao_style_basic/domain/Salary.java deleted file mode 100644 index 2625d7e9..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/domain/Salary.java +++ /dev/null @@ -1,67 +0,0 @@ -package example.dao_style_basic.domain; - -import org.seasar.doma.Domain; - -@Domain(valueType = Integer.class) -public class Salary { - - private final Integer value; - - public Salary(Integer value) { - this.value = value; - } - - public Integer getValue() { - return value; - } - - public Salary add(Salary salary) { - if (salary == null) { - throw new NullPointerException("The salary parameter is null."); - } - if (this.value == null || salary.value == null) { - return new Salary(null); - } - return new Salary(this.value + salary.value); - } - - public Salary subtract(Salary salary) { - if (salary == null) { - throw new NullPointerException("The salary parameter is null."); - } - if (this.value == null || salary.value == null) { - return new Salary(null); - } - return new Salary(this.value - salary.value); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((value == null) ? 0 : value.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - Salary other = (Salary) obj; - if (value == null) { - return other.value == null; - } else return value.equals(other.value); - } - - @Override - public String toString() { - return value != null ? String.valueOf(value) : null; - } -} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/entity/Department.java b/dao-style-basic/src/main/java/example/dao_style_basic/entity/Department.java deleted file mode 100644 index c05887ef..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/entity/Department.java +++ /dev/null @@ -1,38 +0,0 @@ -package example.dao_style_basic.entity; - -import org.seasar.doma.Entity; -import org.seasar.doma.Id; -import org.seasar.doma.Version; - -@Entity -public class Department { - @Id Integer id; - - String name; - - @Version Integer version; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } -} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/entity/Employee.java b/dao-style-basic/src/main/java/example/dao_style_basic/entity/Employee.java deleted file mode 100644 index 3c988d2e..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/entity/Employee.java +++ /dev/null @@ -1,167 +0,0 @@ -package example.dao_style_basic.entity; - -import example.dao_style_basic.domain.Age; -import example.dao_style_basic.domain.Salary; -import java.time.LocalDate; -import java.time.LocalDateTime; -import org.seasar.doma.Association; -import org.seasar.doma.Column; -import org.seasar.doma.Entity; -import org.seasar.doma.GeneratedValue; -import org.seasar.doma.GenerationType; -import org.seasar.doma.Id; -import org.seasar.doma.OriginalStates; -import org.seasar.doma.SequenceGenerator; -import org.seasar.doma.Version; - -@Entity(listener = EmployeeListener.class) -public class Employee { - - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) - @SequenceGenerator(sequence = "EMPLOYEE_SEQ") - Integer id; - - String name; - - Age age; - - Salary salary; - - @Column(name = "JOB_TYPE") - JobType jobType; - - LocalDate hiredate; - - @Column(name = "DEPARTMENT_ID") - Integer departmentId; - - @Version - @Column(name = "VERSION") - Integer version; - - LocalDateTime insertTimestamp; - - LocalDateTime updateTimestamp; - - @Association Department department; - - @OriginalStates Employee originalStates; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Age getAge() { - return age; - } - - public void setAge(Age age) { - this.age = age; - } - - public Salary getSalary() { - return salary; - } - - public void setSalary(Salary salary) { - this.salary = salary; - } - - public JobType getJobType() { - return jobType; - } - - public void setJobType(JobType jobType) { - this.jobType = jobType; - } - - public LocalDate getHiredate() { - return hiredate; - } - - public void setHiredate(LocalDate hiredate) { - this.hiredate = hiredate; - } - - public Integer getDepartmentId() { - return departmentId; - } - - public void setDepartmentId(Integer departmentId) { - this.departmentId = departmentId; - } - - public LocalDateTime getInsertTimestamp() { - return insertTimestamp; - } - - public void setInsertTimestamp(LocalDateTime insertTimestamp) { - this.insertTimestamp = insertTimestamp; - } - - public LocalDateTime getUpdateTimestamp() { - return updateTimestamp; - } - - public void setUpdateTimestamp(LocalDateTime updateTimestamp) { - this.updateTimestamp = updateTimestamp; - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public Department getDepartment() { - return department; - } - - public void setDepartment(Department department) { - this.department = department; - } - - @Override - public String toString() { - return "Employee{" - + "id=" - + id - + ", name='" - + name - + '\'' - + ", age=" - + age - + ", salary=" - + salary - + ", jobType=" - + jobType - + ", hiredate=" - + hiredate - + ", departmentId=" - + departmentId - + ", version=" - + version - + ", insertTimestamp=" - + insertTimestamp - + ", updateTimestamp=" - + updateTimestamp - + ", department=" - + department - + '}'; - } -} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/entity/EmployeeListener.java b/dao-style-basic/src/main/java/example/dao_style_basic/entity/EmployeeListener.java deleted file mode 100644 index 97d46555..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/entity/EmployeeListener.java +++ /dev/null @@ -1,39 +0,0 @@ -package example.dao_style_basic.entity; - -import java.time.LocalDateTime; -import org.seasar.doma.jdbc.entity.EntityListener; -import org.seasar.doma.jdbc.entity.PostDeleteContext; -import org.seasar.doma.jdbc.entity.PostInsertContext; -import org.seasar.doma.jdbc.entity.PostUpdateContext; -import org.seasar.doma.jdbc.entity.PreDeleteContext; -import org.seasar.doma.jdbc.entity.PreInsertContext; -import org.seasar.doma.jdbc.entity.PreUpdateContext; - -public class EmployeeListener implements EntityListener { - - @Override - public void preDelete(E employee, PreDeleteContext context) {} - - @Override - public void preInsert(E employee, PreInsertContext context) { - LocalDateTime timestamp = LocalDateTime.now(); - employee.setInsertTimestamp(timestamp); - } - - @Override - public void preUpdate(E employee, PreUpdateContext context) { - if (context.isEntityChanged()) { - LocalDateTime timestamp = LocalDateTime.now(); - employee.setUpdateTimestamp(timestamp); - } - } - - @Override - public void postInsert(E entity, PostInsertContext context) {} - - @Override - public void postUpdate(E entity, PostUpdateContext context) {} - - @Override - public void postDelete(E entity, PostDeleteContext context) {} -} diff --git a/dao-style-basic/src/main/java/example/dao_style_basic/entity/JobType.java b/dao-style-basic/src/main/java/example/dao_style_basic/entity/JobType.java deleted file mode 100644 index 45a3c564..00000000 --- a/dao-style-basic/src/main/java/example/dao_style_basic/entity/JobType.java +++ /dev/null @@ -1,9 +0,0 @@ -package example.dao_style_basic.entity; - -public enum JobType { - SALESMAN, - MANAGER, - ANALYST, - PRESIDENT, - CLERK -} diff --git a/dao-style-basic/src/test/java/example/dao_style_basic/dao/BatchDeleteTest.java b/dao-style-basic/src/test/java/example/dao_style_basic/dao/BatchDeleteTest.java deleted file mode 100644 index d51df3f5..00000000 --- a/dao-style-basic/src/test/java/example/dao_style_basic/dao/BatchDeleteTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package example.dao_style_basic.dao; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; - -import example.dao_style_basic.entity.Employee; -import java.util.Arrays; -import java.util.Objects; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.seasar.doma.jdbc.Config; - -@ExtendWith(TestEnvironment.class) -public class BatchDeleteTest { - - private final EmployeeDao dao; - - public BatchDeleteTest(Config config) { - Objects.requireNonNull(config); - this.dao = new EmployeeDaoImpl(config); - } - - @Test - public void testBatchDelete() { - Employee employee1 = dao.selectById(1); - Employee employee2 = dao.selectById(2); - int[] rows = dao.batchDelete(Arrays.asList(employee1, employee2)); - assertEquals(2, rows.length); - - assertNull(dao.selectById(1)); - assertNull(dao.selectById(2)); - } -} diff --git a/dao-style-basic/src/test/java/example/dao_style_basic/dao/BatchInsertTest.java b/dao-style-basic/src/test/java/example/dao_style_basic/dao/BatchInsertTest.java deleted file mode 100644 index f7d252b3..00000000 --- a/dao-style-basic/src/test/java/example/dao_style_basic/dao/BatchInsertTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package example.dao_style_basic.dao; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import example.dao_style_basic.domain.Age; -import example.dao_style_basic.domain.Salary; -import example.dao_style_basic.entity.Employee; -import java.util.Arrays; -import java.util.Objects; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.seasar.doma.jdbc.Config; - -@ExtendWith(TestEnvironment.class) -public class BatchInsertTest { - - private final EmployeeDao dao; - - public BatchInsertTest(Config config) { - Objects.requireNonNull(config); - this.dao = new EmployeeDaoImpl(config); - } - - @Test - public void testBatchInsert() { - Employee employee1 = new Employee(); - employee1.setName("test-1"); - employee1.setAge(new Age(30)); - employee1.setSalary(new Salary(300)); - - Employee employee2 = new Employee(); - employee2.setName("test-2"); - employee2.setAge(new Age(40)); - employee2.setSalary(new Salary(500)); - - int[] rows = dao.batchInsert(Arrays.asList(employee1, employee2)); - assertEquals(2, rows.length); - - assertNotNull(dao.selectById(employee1.getId())); - assertNotNull(dao.selectById(employee2.getId())); - } -} diff --git a/dao-style-basic/src/test/java/example/dao_style_basic/dao/BatchUpdateTest.java b/dao-style-basic/src/test/java/example/dao_style_basic/dao/BatchUpdateTest.java deleted file mode 100644 index 425948a8..00000000 --- a/dao-style-basic/src/test/java/example/dao_style_basic/dao/BatchUpdateTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package example.dao_style_basic.dao; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import example.dao_style_basic.domain.Salary; -import example.dao_style_basic.entity.Employee; -import java.util.Arrays; -import java.util.Objects; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.seasar.doma.jdbc.Config; - -@ExtendWith(TestEnvironment.class) -public class BatchUpdateTest { - - private final EmployeeDao dao; - - public BatchUpdateTest(Config config) { - Objects.requireNonNull(config); - this.dao = new EmployeeDaoImpl(config); - } - - @Test - public void testBatchUpdate() { - Employee employee1 = dao.selectById(1); - employee1.setSalary(employee1.getSalary().add(new Salary(100))); - - Employee employee2 = dao.selectById(2); - employee2.setSalary(employee2.getSalary().add(new Salary(100))); - - int[] rows = dao.batchUpdate(Arrays.asList(employee1, employee2)); - assertEquals(2, rows.length); - - Employee employee3 = dao.selectById(1); - Employee employee4 = dao.selectById(2); - - assertEquals(new Salary(0), employee3.getSalary().subtract(employee1.getSalary())); - assertEquals(new Salary(0), employee4.getSalary().subtract(employee2.getSalary())); - } -} diff --git a/dao-style-basic/src/test/java/example/dao_style_basic/dao/InsertTest.java b/dao-style-basic/src/test/java/example/dao_style_basic/dao/InsertTest.java deleted file mode 100644 index 67aa3f16..00000000 --- a/dao-style-basic/src/test/java/example/dao_style_basic/dao/InsertTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package example.dao_style_basic.dao; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import example.dao_style_basic.domain.Age; -import example.dao_style_basic.domain.Salary; -import example.dao_style_basic.entity.Employee; -import example.dao_style_basic.entity.JobType; -import java.util.Objects; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.seasar.doma.jdbc.Config; - -@ExtendWith(TestEnvironment.class) -public class InsertTest { - - private final EmployeeDao dao; - - public InsertTest(Config config) { - Objects.requireNonNull(config); - this.dao = new EmployeeDaoImpl(config); - } - - @Test - public void testInsert() { - Employee employee = new Employee(); - employee.setName("test"); - employee.setAge(new Age(50)); - employee.setSalary(new Salary(300)); - employee.setJobType(JobType.PRESIDENT); - int rows = dao.insert(employee); - assertEquals(1, rows); - - Employee employee2 = dao.selectById(employee.getId()); - assertEquals("test", employee2.getName()); - assertEquals(JobType.PRESIDENT, employee2.getJobType()); - } -} diff --git a/dao-style-basic/src/test/java/example/dao_style_basic/dao/SelectTest.java b/dao-style-basic/src/test/java/example/dao_style_basic/dao/SelectTest.java deleted file mode 100644 index 63523879..00000000 --- a/dao-style-basic/src/test/java/example/dao_style_basic/dao/SelectTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package example.dao_style_basic.dao; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -import example.dao_style_basic.entity.Employee; -import java.util.List; -import java.util.Objects; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.seasar.doma.jdbc.Config; - -@ExtendWith(TestEnvironment.class) -public class SelectTest { - - private final EmployeeDao dao; - - public SelectTest(Config config) { - Objects.requireNonNull(config); - this.dao = new EmployeeDaoImpl(config); - } - - @Test - public void testSelectAll() { - List employees = dao.selectAll(); - assertEquals(14, employees.size()); - } - - @Test - public void testSelectById() { - Employee employee = dao.selectById(1); - assertNotNull(employee); - } -} diff --git a/dao-style-basic/src/test/java/example/dao_style_basic/dao/UpdateTest.java b/dao-style-basic/src/test/java/example/dao_style_basic/dao/UpdateTest.java deleted file mode 100644 index af095ebe..00000000 --- a/dao-style-basic/src/test/java/example/dao_style_basic/dao/UpdateTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package example.dao_style_basic.dao; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import example.dao_style_basic.entity.Employee; -import example.dao_style_basic.entity.JobType; -import java.util.Objects; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.seasar.doma.jdbc.Config; - -@ExtendWith(TestEnvironment.class) -public class UpdateTest { - - private final EmployeeDao dao; - - public UpdateTest(Config config) { - Objects.requireNonNull(config); - this.dao = new EmployeeDaoImpl(config); - } - - @Test - public void testUpdate() { - Employee employee = dao.selectById(1); - employee.setName("hoge"); - employee.setJobType(JobType.PRESIDENT); - int rows = dao.update(employee); - assertEquals(1, rows); - - Employee employee2 = dao.selectById(1); - assertEquals("hoge", employee2.getName()); - assertEquals(JobType.PRESIDENT, employee2.getJobType()); - } -} diff --git a/dao-style-file/src/main/java/example/dao_style_file/DbConfig.java b/dao-style-file/src/main/java/example/dao_style_file/DbConfig.java deleted file mode 100644 index 6a3aefda..00000000 --- a/dao-style-file/src/main/java/example/dao_style_file/DbConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package example.dao_style_file; - -import java.util.Objects; -import javax.sql.DataSource; -import org.seasar.doma.jdbc.Config; -import org.seasar.doma.jdbc.JdbcLogger; -import org.seasar.doma.jdbc.dialect.Dialect; -import org.seasar.doma.jdbc.tx.TransactionManager; - -public class DbConfig implements Config { - - private final Dialect dialect; - private final DataSource dataSource; - private final JdbcLogger jdbcLogger; - private final TransactionManager transactionManager; - - public DbConfig( - Dialect dialect, - DataSource dataSource, - JdbcLogger jdbcLogger, - TransactionManager transactionManager) { - this.dialect = Objects.requireNonNull(dialect); - this.dataSource = Objects.requireNonNull(dataSource); - this.jdbcLogger = Objects.requireNonNull(jdbcLogger); - this.transactionManager = Objects.requireNonNull(transactionManager); - } - - @Override - public JdbcLogger getJdbcLogger() { - return jdbcLogger; - } - - @Override - public Dialect getDialect() { - return dialect; - } - - @Override - public DataSource getDataSource() { - return dataSource; - } - - @Override - public TransactionManager getTransactionManager() { - return transactionManager; - } -} diff --git a/dao-style-file/src/main/java/example/dao_style_file/dao/ScriptDao.java b/dao-style-file/src/main/java/example/dao_style_file/dao/ScriptDao.java deleted file mode 100644 index 2c1476f3..00000000 --- a/dao-style-file/src/main/java/example/dao_style_file/dao/ScriptDao.java +++ /dev/null @@ -1,14 +0,0 @@ -package example.dao_style_file.dao; - -import org.seasar.doma.Dao; -import org.seasar.doma.Script; - -@Dao -public interface ScriptDao { - - @Script - void create(); - - @Script - void drop(); -} diff --git a/dao-style-file/src/main/java/example/dao_style_file/domain/Age.java b/dao-style-file/src/main/java/example/dao_style_file/domain/Age.java deleted file mode 100644 index 67f9b69d..00000000 --- a/dao-style-file/src/main/java/example/dao_style_file/domain/Age.java +++ /dev/null @@ -1,18 +0,0 @@ -package example.dao_style_file.domain; - -public class Age { - private final int value; - - public Age(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - - @Override - public String toString() { - return "Age{" + "value=" + value + '}'; - } -} diff --git a/dao-style-file/src/main/java/example/dao_style_file/domain/AgeConverter.java b/dao-style-file/src/main/java/example/dao_style_file/domain/AgeConverter.java deleted file mode 100644 index a66ee0a5..00000000 --- a/dao-style-file/src/main/java/example/dao_style_file/domain/AgeConverter.java +++ /dev/null @@ -1,17 +0,0 @@ -package example.dao_style_file.domain; - -import org.seasar.doma.ExternalDomain; -import org.seasar.doma.jdbc.domain.DomainConverter; - -@ExternalDomain -public class AgeConverter implements DomainConverter { - @Override - public Integer fromDomainToValue(Age age) { - return age.getValue(); - } - - @Override - public Age fromValueToDomain(Integer value) { - return value == null ? null : new Age(value); - } -} diff --git a/dao-style-file/src/main/java/example/dao_style_file/domain/Salary.java b/dao-style-file/src/main/java/example/dao_style_file/domain/Salary.java deleted file mode 100644 index d0df49e2..00000000 --- a/dao-style-file/src/main/java/example/dao_style_file/domain/Salary.java +++ /dev/null @@ -1,57 +0,0 @@ -package example.dao_style_file.domain; - -import org.seasar.doma.Domain; - -@Domain(valueType = Integer.class) -public class Salary { - - private final Integer value; - - public Salary(Integer value) { - this.value = value; - } - - public Integer getValue() { - return value; - } - - public Salary add(Salary salary) { - if (salary == null) { - throw new NullPointerException("The salary parameter is null."); - } - if (this.value == null || salary.value == null) { - return new Salary(null); - } - return new Salary(this.value + salary.value); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((value == null) ? 0 : value.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - Salary other = (Salary) obj; - if (value == null) { - return other.value == null; - } else return value.equals(other.value); - } - - @Override - public String toString() { - return value != null ? String.valueOf(value) : null; - } -} diff --git a/dao-style-file/src/main/java/example/dao_style_file/entity/Department.java b/dao-style-file/src/main/java/example/dao_style_file/entity/Department.java deleted file mode 100644 index 0b791fa3..00000000 --- a/dao-style-file/src/main/java/example/dao_style_file/entity/Department.java +++ /dev/null @@ -1,38 +0,0 @@ -package example.dao_style_file.entity; - -import org.seasar.doma.Entity; -import org.seasar.doma.Id; -import org.seasar.doma.Version; - -@Entity -public class Department { - @Id Integer id; - - String name; - - @Version Integer version; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } -} diff --git a/dao-style-file/src/main/java/example/dao_style_file/entity/Employee.java b/dao-style-file/src/main/java/example/dao_style_file/entity/Employee.java deleted file mode 100644 index 9d747e05..00000000 --- a/dao-style-file/src/main/java/example/dao_style_file/entity/Employee.java +++ /dev/null @@ -1,167 +0,0 @@ -package example.dao_style_file.entity; - -import example.dao_style_file.domain.Age; -import example.dao_style_file.domain.Salary; -import java.time.LocalDate; -import java.time.LocalDateTime; -import org.seasar.doma.Association; -import org.seasar.doma.Column; -import org.seasar.doma.Entity; -import org.seasar.doma.GeneratedValue; -import org.seasar.doma.GenerationType; -import org.seasar.doma.Id; -import org.seasar.doma.OriginalStates; -import org.seasar.doma.SequenceGenerator; -import org.seasar.doma.Version; - -@Entity(listener = EmployeeListener.class) -public class Employee { - - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) - @SequenceGenerator(sequence = "EMPLOYEE_SEQ") - Integer id; - - String name; - - Age age; - - Salary salary; - - @Column(name = "JOB_TYPE") - JobType jobType; - - LocalDate hiredate; - - @Column(name = "DEPARTMENT_ID") - Integer departmentId; - - @Version - @Column(name = "VERSION") - Integer version; - - LocalDateTime insertTimestamp; - - LocalDateTime updateTimestamp; - - @Association Department department; - - @OriginalStates Employee originalStates; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Age getAge() { - return age; - } - - public void setAge(Age age) { - this.age = age; - } - - public Salary getSalary() { - return salary; - } - - public void setSalary(Salary salary) { - this.salary = salary; - } - - public JobType getJobType() { - return jobType; - } - - public void setJobType(JobType jobType) { - this.jobType = jobType; - } - - public LocalDate getHiredate() { - return hiredate; - } - - public void setHiredate(LocalDate hiredate) { - this.hiredate = hiredate; - } - - public Integer getDepartmentId() { - return departmentId; - } - - public void setDepartmentId(Integer departmentId) { - this.departmentId = departmentId; - } - - public LocalDateTime getInsertTimestamp() { - return insertTimestamp; - } - - public void setInsertTimestamp(LocalDateTime insertTimestamp) { - this.insertTimestamp = insertTimestamp; - } - - public LocalDateTime getUpdateTimestamp() { - return updateTimestamp; - } - - public void setUpdateTimestamp(LocalDateTime updateTimestamp) { - this.updateTimestamp = updateTimestamp; - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public Department getDepartment() { - return department; - } - - public void setDepartment(Department department) { - this.department = department; - } - - @Override - public String toString() { - return "Employee{" - + "id=" - + id - + ", name='" - + name - + '\'' - + ", age=" - + age - + ", salary=" - + salary - + ", jobType=" - + jobType - + ", hiredate=" - + hiredate - + ", departmentId=" - + departmentId - + ", version=" - + version - + ", insertTimestamp=" - + insertTimestamp - + ", updateTimestamp=" - + updateTimestamp - + ", department=" - + department - + '}'; - } -} diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectAll.sql b/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectAll.sql deleted file mode 100644 index e2cfa2c4..00000000 --- a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectAll.sql +++ /dev/null @@ -1,6 +0,0 @@ -select - /*%expand*/* -from - employee -order by - id diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectById.sql b/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectById.sql deleted file mode 100644 index 7267b2c9..00000000 --- a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectById.sql +++ /dev/null @@ -1,6 +0,0 @@ -select - /*%expand*/* -from - employee -where - id = /* id */0 diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/ScriptDao/create.script b/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/ScriptDao/create.script deleted file mode 100644 index e0427f99..00000000 --- a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/ScriptDao/create.script +++ /dev/null @@ -1,20 +0,0 @@ -create sequence employee_seq start with 100 increment by 1; -create table department (id integer not null primary key,name varchar(255) not null, version integer not null); -create table employee (id integer not null primary key,name varchar(255) not null,age integer not null,salary integer,job_type varchar(20),hiredate timestamp, department_id integer, version integer not null, insertTimestamp timestamp, updateTimestamp timestamp); -insert into department values(1,'ACCOUNTING',1); -insert into department values(2,'RESEARCH',1); -insert into department values(3,'SALES',1); -insert into employee values(1,'ALLEN',30,1600,'SALESMAN','2008-01-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(2,'WARD',32,1250,'ANALYST','2008-02-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(3,'JONES',38,2975,'MANAGER','2008-03-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(4,'MARTIN',40,1250,'SALESMAN','2008-04-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(5,'BLAKE',50,2850,'SALESMAN','2008-05-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(6,'CLARK',23,2450,'MANAGER','2008-06-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(7,'SCOTT',28,3000,'SALESMAN','2008-07-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(8,'KING',38,5000,'CLERK','2008-08-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(9,'TURNER',33,1500,'ANALYST','2008-09-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(10,'ADAMS',62,1100,'SALESMAN','2008-10-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(11,'JAMES',44,950,'CLERK','2008-11-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(12,'FORD',55,3000,'ANALYST','2008-12-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(13,'MILLER',51,1300,'MANAGER','2009-01-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(14,'SMITH',410,800,'PRESIDENT','2009-02-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/ScriptDao/drop.script b/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/ScriptDao/drop.script deleted file mode 100644 index 87f8d3a2..00000000 --- a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/ScriptDao/drop.script +++ /dev/null @@ -1,3 +0,0 @@ -drop sequence employee_seq; -drop table employee; -drop table department; diff --git a/dao-style-file/src/test/java/example/dao_style_file/DeleteTest.java b/dao-style-file/src/test/java/example/dao_style_file/DeleteTest.java deleted file mode 100644 index 4aff744d..00000000 --- a/dao-style-file/src/test/java/example/dao_style_file/DeleteTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package example.dao_style_file; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import example.dao_style_file.dao.EmployeeDao; -import example.dao_style_file.dao.EmployeeDaoImpl; -import example.dao_style_file.entity.Employee; -import java.util.Objects; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.seasar.doma.jdbc.Config; - -@ExtendWith(TestEnvironment.class) -public class DeleteTest { - - private final EmployeeDao dao; - - public DeleteTest(Config config) { - Objects.requireNonNull(config); - this.dao = new EmployeeDaoImpl(config); - } - - @Test - public void testDelete() { - Employee employee = dao.selectById(1); - int rows = dao.delete(employee); - assertEquals(1, rows); - } -} diff --git a/dao-style-file/src/test/java/example/dao_style_file/TestEnvironment.java b/dao-style-file/src/test/java/example/dao_style_file/TestEnvironment.java deleted file mode 100644 index f4b7ecb5..00000000 --- a/dao-style-file/src/test/java/example/dao_style_file/TestEnvironment.java +++ /dev/null @@ -1,69 +0,0 @@ -package example.dao_style_file; - -import example.dao_style_file.dao.ScriptDao; -import example.dao_style_file.dao.ScriptDaoImpl; -import org.junit.jupiter.api.extension.AfterAllCallback; -import org.junit.jupiter.api.extension.AfterTestExecutionCallback; -import org.junit.jupiter.api.extension.BeforeAllCallback; -import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.ParameterContext; -import org.junit.jupiter.api.extension.ParameterResolver; -import org.seasar.doma.jdbc.JdbcLogger; -import org.seasar.doma.jdbc.dialect.Dialect; -import org.seasar.doma.jdbc.dialect.H2Dialect; -import org.seasar.doma.jdbc.tx.LocalTransactionDataSource; -import org.seasar.doma.jdbc.tx.LocalTransactionManager; -import org.seasar.doma.slf4j.Slf4jJdbcLogger; - -public class TestEnvironment - implements BeforeAllCallback, - AfterAllCallback, - BeforeTestExecutionCallback, - AfterTestExecutionCallback, - ParameterResolver { - - private final LocalTransactionManager transactionManager; - private final DbConfig config; - private final ScriptDao dao; - - public TestEnvironment() { - Dialect dialect = new H2Dialect(); - LocalTransactionDataSource dataSource = - new LocalTransactionDataSource("jdbc:h2:mem:tutorial;DB_CLOSE_DELAY=-1", "sa", null); - JdbcLogger jdbcLogger = new Slf4jJdbcLogger(); - transactionManager = new LocalTransactionManager(dataSource, jdbcLogger); - config = new DbConfig(dialect, dataSource, jdbcLogger, transactionManager); - dao = new ScriptDaoImpl(config); - } - - @Override - public void beforeAll(ExtensionContext context) { - transactionManager.required(dao::create); - } - - @Override - public void afterAll(ExtensionContext context) { - transactionManager.required(dao::drop); - } - - @Override - public void beforeTestExecution(ExtensionContext context) { - transactionManager.getTransaction().begin(); - } - - @Override - public void afterTestExecution(ExtensionContext context) { - transactionManager.getTransaction().rollback(); - } - - public boolean supportsParameter( - ParameterContext parameterContext, ExtensionContext extensionContext) { - return parameterContext.getParameter().getType().isAssignableFrom(DbConfig.class); - } - - public Object resolveParameter( - ParameterContext parameterContext, ExtensionContext extensionContext) { - return config; - } -} diff --git a/dao-style-text/src/main/java/example/dao_style_text/DbConfig.java b/dao-style-text/src/main/java/example/dao_style_text/DbConfig.java deleted file mode 100644 index f85bbb33..00000000 --- a/dao-style-text/src/main/java/example/dao_style_text/DbConfig.java +++ /dev/null @@ -1,47 +0,0 @@ -package example.dao_style_text; - -import java.util.Objects; -import javax.sql.DataSource; -import org.seasar.doma.jdbc.Config; -import org.seasar.doma.jdbc.JdbcLogger; -import org.seasar.doma.jdbc.dialect.Dialect; -import org.seasar.doma.jdbc.tx.TransactionManager; - -public class DbConfig implements Config { - - private final Dialect dialect; - private final DataSource dataSource; - private final JdbcLogger jdbcLogger; - private final TransactionManager transactionManager; - - public DbConfig( - Dialect dialect, - DataSource dataSource, - JdbcLogger jdbcLogger, - TransactionManager transactionManager) { - this.dialect = Objects.requireNonNull(dialect); - this.dataSource = Objects.requireNonNull(dataSource); - this.jdbcLogger = Objects.requireNonNull(jdbcLogger); - this.transactionManager = Objects.requireNonNull(transactionManager); - } - - @Override - public JdbcLogger getJdbcLogger() { - return jdbcLogger; - } - - @Override - public Dialect getDialect() { - return dialect; - } - - @Override - public DataSource getDataSource() { - return dataSource; - } - - @Override - public TransactionManager getTransactionManager() { - return transactionManager; - } -} diff --git a/dao-style-text/src/main/java/example/dao_style_text/dao/ScriptDao.java b/dao-style-text/src/main/java/example/dao_style_text/dao/ScriptDao.java deleted file mode 100644 index 22d34623..00000000 --- a/dao-style-text/src/main/java/example/dao_style_text/dao/ScriptDao.java +++ /dev/null @@ -1,43 +0,0 @@ -package example.dao_style_text.dao; - -import org.seasar.doma.Dao; -import org.seasar.doma.Script; -import org.seasar.doma.Sql; - -@Dao -public interface ScriptDao { - @Sql( - """ - create sequence employee_seq start with 100 increment by 1; - create table department (id integer not null primary key,name varchar(255) not null, version integer not null); - create table employee (id integer not null primary key,name varchar(255) not null,age integer not null,salary integer,job_type varchar(20),hiredate timestamp, department_id integer, version integer not null, insertTimestamp timestamp, updateTimestamp timestamp); - insert into department values(1,'ACCOUNTING',1); - insert into department values(2,'RESEARCH',1); - insert into department values(3,'SALES',1); - insert into employee values(1,'ALLEN',30,1600,'SALESMAN','2008-01-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); - insert into employee values(2,'WARD',32,1250,'ANALYST','2008-02-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); - insert into employee values(3,'JONES',38,2975,'MANAGER','2008-03-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); - insert into employee values(4,'MARTIN',40,1250,'SALESMAN','2008-04-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); - insert into employee values(5,'BLAKE',50,2850,'SALESMAN','2008-05-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); - insert into employee values(6,'CLARK',23,2450,'MANAGER','2008-06-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); - insert into employee values(7,'SCOTT',28,3000,'SALESMAN','2008-07-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); - insert into employee values(8,'KING',38,5000,'CLERK','2008-08-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); - insert into employee values(9,'TURNER',33,1500,'ANALYST','2008-09-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); - insert into employee values(10,'ADAMS',62,1100,'SALESMAN','2008-10-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); - insert into employee values(11,'JAMES',44,950,'CLERK','2008-11-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); - insert into employee values(12,'FORD',55,3000,'ANALYST','2008-12-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); - insert into employee values(13,'MILLER',51,1300,'MANAGER','2009-01-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); - insert into employee values(14,'SMITH',410,800,'PRESIDENT','2009-02-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); - """) - @Script - void create(); - - @Sql( - """ - drop sequence employee_seq; - drop table employee; - drop table department; - """) - @Script - void drop(); -} diff --git a/dao-style-text/src/main/java/example/dao_style_text/domain/Age.java b/dao-style-text/src/main/java/example/dao_style_text/domain/Age.java deleted file mode 100644 index fd3cf53b..00000000 --- a/dao-style-text/src/main/java/example/dao_style_text/domain/Age.java +++ /dev/null @@ -1,18 +0,0 @@ -package example.dao_style_text.domain; - -public class Age { - private final int value; - - public Age(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - - @Override - public String toString() { - return "Age{" + "value=" + value + '}'; - } -} diff --git a/dao-style-text/src/main/java/example/dao_style_text/domain/DomainConverterProvider.java b/dao-style-text/src/main/java/example/dao_style_text/domain/DomainConverterProvider.java deleted file mode 100644 index ec0ef5f3..00000000 --- a/dao-style-text/src/main/java/example/dao_style_text/domain/DomainConverterProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package example.dao_style_text.domain; - -import org.seasar.doma.DomainConverters; - -@DomainConverters(AgeConverter.class) -public class DomainConverterProvider {} diff --git a/dao-style-text/src/main/java/example/dao_style_text/domain/Salary.java b/dao-style-text/src/main/java/example/dao_style_text/domain/Salary.java deleted file mode 100644 index 0e2fe300..00000000 --- a/dao-style-text/src/main/java/example/dao_style_text/domain/Salary.java +++ /dev/null @@ -1,57 +0,0 @@ -package example.dao_style_text.domain; - -import org.seasar.doma.Domain; - -@Domain(valueType = Integer.class) -public class Salary { - - private final Integer value; - - public Salary(Integer value) { - this.value = value; - } - - public Integer getValue() { - return value; - } - - public Salary add(Salary salary) { - if (salary == null) { - throw new NullPointerException("The salary parameter is null."); - } - if (this.value == null || salary.value == null) { - return new Salary(null); - } - return new Salary(this.value + salary.value); - } - - @Override - public int hashCode() { - final var prime = 31; - var result = 1; - result = prime * result + ((value == null) ? 0 : value.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - var other = (Salary) obj; - if (value == null) { - return other.value == null; - } else return value.equals(other.value); - } - - @Override - public String toString() { - return value != null ? String.valueOf(value) : null; - } -} diff --git a/dao-style-text/src/main/java/example/dao_style_text/entity/Department.java b/dao-style-text/src/main/java/example/dao_style_text/entity/Department.java deleted file mode 100644 index 93be3169..00000000 --- a/dao-style-text/src/main/java/example/dao_style_text/entity/Department.java +++ /dev/null @@ -1,38 +0,0 @@ -package example.dao_style_text.entity; - -import org.seasar.doma.Entity; -import org.seasar.doma.Id; -import org.seasar.doma.Version; - -@Entity -public class Department { - @Id Integer id; - - String name; - - @Version Integer version; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } -} diff --git a/dao-style-text/src/main/java/example/dao_style_text/entity/Employee.java b/dao-style-text/src/main/java/example/dao_style_text/entity/Employee.java deleted file mode 100644 index 23ca8246..00000000 --- a/dao-style-text/src/main/java/example/dao_style_text/entity/Employee.java +++ /dev/null @@ -1,167 +0,0 @@ -package example.dao_style_text.entity; - -import example.dao_style_text.domain.Age; -import example.dao_style_text.domain.Salary; -import java.time.LocalDate; -import java.time.LocalDateTime; -import org.seasar.doma.Association; -import org.seasar.doma.Column; -import org.seasar.doma.Entity; -import org.seasar.doma.GeneratedValue; -import org.seasar.doma.GenerationType; -import org.seasar.doma.Id; -import org.seasar.doma.OriginalStates; -import org.seasar.doma.SequenceGenerator; -import org.seasar.doma.Version; - -@Entity(listener = EmployeeListener.class) -public class Employee { - - @Id - @GeneratedValue(strategy = GenerationType.SEQUENCE) - @SequenceGenerator(sequence = "EMPLOYEE_SEQ") - Integer id; - - String name; - - Age age; - - Salary salary; - - @Column(name = "JOB_TYPE") - JobType jobType; - - LocalDate hiredate; - - @Column(name = "DEPARTMENT_ID") - Integer departmentId; - - @Version - @Column(name = "VERSION") - Integer version; - - LocalDateTime insertTimestamp; - - LocalDateTime updateTimestamp; - - @Association Department department; - - @OriginalStates Employee originalStates; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Age getAge() { - return age; - } - - public void setAge(Age age) { - this.age = age; - } - - public Salary getSalary() { - return salary; - } - - public void setSalary(Salary salary) { - this.salary = salary; - } - - public JobType getJobType() { - return jobType; - } - - public void setJobType(JobType jobType) { - this.jobType = jobType; - } - - public LocalDate getHiredate() { - return hiredate; - } - - public void setHiredate(LocalDate hiredate) { - this.hiredate = hiredate; - } - - public Integer getDepartmentId() { - return departmentId; - } - - public void setDepartmentId(Integer departmentId) { - this.departmentId = departmentId; - } - - public LocalDateTime getInsertTimestamp() { - return insertTimestamp; - } - - public void setInsertTimestamp(LocalDateTime insertTimestamp) { - this.insertTimestamp = insertTimestamp; - } - - public LocalDateTime getUpdateTimestamp() { - return updateTimestamp; - } - - public void setUpdateTimestamp(LocalDateTime updateTimestamp) { - this.updateTimestamp = updateTimestamp; - } - - public Integer getVersion() { - return version; - } - - public void setVersion(Integer version) { - this.version = version; - } - - public Department getDepartment() { - return department; - } - - public void setDepartment(Department department) { - this.department = department; - } - - @Override - public String toString() { - return "Employee{" - + "id=" - + id - + ", name='" - + name - + '\'' - + ", age=" - + age - + ", salary=" - + salary - + ", jobType=" - + jobType - + ", hiredate=" - + hiredate - + ", departmentId=" - + departmentId - + ", version=" - + version - + ", insertTimestamp=" - + insertTimestamp - + ", updateTimestamp=" - + updateTimestamp - + ", department=" - + department - + '}'; - } -} diff --git a/dao-style-text/src/main/java/example/dao_style_text/entity/EmployeeListener.java b/dao-style-text/src/main/java/example/dao_style_text/entity/EmployeeListener.java deleted file mode 100644 index 69ff0389..00000000 --- a/dao-style-text/src/main/java/example/dao_style_text/entity/EmployeeListener.java +++ /dev/null @@ -1,39 +0,0 @@ -package example.dao_style_text.entity; - -import java.time.LocalDateTime; -import org.seasar.doma.jdbc.entity.EntityListener; -import org.seasar.doma.jdbc.entity.PostDeleteContext; -import org.seasar.doma.jdbc.entity.PostInsertContext; -import org.seasar.doma.jdbc.entity.PostUpdateContext; -import org.seasar.doma.jdbc.entity.PreDeleteContext; -import org.seasar.doma.jdbc.entity.PreInsertContext; -import org.seasar.doma.jdbc.entity.PreUpdateContext; - -public class EmployeeListener implements EntityListener { - - @Override - public void preDelete(E employee, PreDeleteContext context) {} - - @Override - public void preInsert(E employee, PreInsertContext context) { - var timestamp = LocalDateTime.now(); - employee.setInsertTimestamp(timestamp); - } - - @Override - public void preUpdate(E employee, PreUpdateContext context) { - if (context.isEntityChanged()) { - var timestamp = LocalDateTime.now(); - employee.setUpdateTimestamp(timestamp); - } - } - - @Override - public void postInsert(E entity, PostInsertContext context) {} - - @Override - public void postUpdate(E entity, PostUpdateContext context) {} - - @Override - public void postDelete(E entity, PostDeleteContext context) {} -} diff --git a/dao-style-text/src/main/java/example/dao_style_text/entity/JobType.java b/dao-style-text/src/main/java/example/dao_style_text/entity/JobType.java deleted file mode 100644 index 848e2b1e..00000000 --- a/dao-style-text/src/main/java/example/dao_style_text/entity/JobType.java +++ /dev/null @@ -1,9 +0,0 @@ -package example.dao_style_text.entity; - -public enum JobType { - SALESMAN, - MANAGER, - ANALYST, - PRESIDENT, - CLERK -} diff --git a/dao-style-text/src/test/java/example/dao_style_text/TestEnvironment.java b/dao-style-text/src/test/java/example/dao_style_text/TestEnvironment.java deleted file mode 100644 index 5c0b1f3d..00000000 --- a/dao-style-text/src/test/java/example/dao_style_text/TestEnvironment.java +++ /dev/null @@ -1,67 +0,0 @@ -package example.dao_style_text; - -import example.dao_style_text.dao.ScriptDao; -import example.dao_style_text.dao.ScriptDaoImpl; -import org.junit.jupiter.api.extension.AfterAllCallback; -import org.junit.jupiter.api.extension.AfterTestExecutionCallback; -import org.junit.jupiter.api.extension.BeforeAllCallback; -import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.ParameterContext; -import org.junit.jupiter.api.extension.ParameterResolver; -import org.seasar.doma.jdbc.dialect.H2Dialect; -import org.seasar.doma.jdbc.tx.LocalTransactionDataSource; -import org.seasar.doma.jdbc.tx.LocalTransactionManager; -import org.seasar.doma.slf4j.Slf4jJdbcLogger; - -public class TestEnvironment - implements BeforeAllCallback, - AfterAllCallback, - BeforeTestExecutionCallback, - AfterTestExecutionCallback, - ParameterResolver { - - private final LocalTransactionManager transactionManager; - private final DbConfig config; - private final ScriptDao dao; - - public TestEnvironment() { - var dialect = new H2Dialect(); - var dataSource = - new LocalTransactionDataSource("jdbc:h2:mem:tutorial;DB_CLOSE_DELAY=-1", "sa", null); - var jdbcLogger = new Slf4jJdbcLogger(); - transactionManager = new LocalTransactionManager(dataSource, jdbcLogger); - config = new DbConfig(dialect, dataSource, jdbcLogger, transactionManager); - dao = new ScriptDaoImpl(config); - } - - @Override - public void beforeAll(ExtensionContext context) { - transactionManager.required(dao::create); - } - - @Override - public void afterAll(ExtensionContext context) { - transactionManager.required(dao::drop); - } - - @Override - public void beforeTestExecution(ExtensionContext context) { - transactionManager.getTransaction().begin(); - } - - @Override - public void afterTestExecution(ExtensionContext context) { - transactionManager.getTransaction().rollback(); - } - - public boolean supportsParameter( - ParameterContext parameterContext, ExtensionContext extensionContext) { - return parameterContext.getParameter().getType().isAssignableFrom(DbConfig.class); - } - - public Object resolveParameter( - ParameterContext parameterContext, ExtensionContext extensionContext) { - return config; - } -} diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/domain/Age.java b/dsl-style-java/src/main/java/example/dsl_style_java/domain/Age.java deleted file mode 100644 index 69a7db7a..00000000 --- a/dsl-style-java/src/main/java/example/dsl_style_java/domain/Age.java +++ /dev/null @@ -1,18 +0,0 @@ -package example.dsl_style_java.domain; - -public class Age { - private final int value; - - public Age(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - - @Override - public String toString() { - return "Age{" + "value=" + value + '}'; - } -} diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/domain/AgeConverter.java b/dsl-style-java/src/main/java/example/dsl_style_java/domain/AgeConverter.java deleted file mode 100644 index 7626b72d..00000000 --- a/dsl-style-java/src/main/java/example/dsl_style_java/domain/AgeConverter.java +++ /dev/null @@ -1,17 +0,0 @@ -package example.dsl_style_java.domain; - -import org.seasar.doma.ExternalDomain; -import org.seasar.doma.jdbc.domain.DomainConverter; - -@ExternalDomain -public class AgeConverter implements DomainConverter { - @Override - public Integer fromDomainToValue(Age age) { - return age.getValue(); - } - - @Override - public Age fromValueToDomain(Integer value) { - return value == null ? null : new Age(value); - } -} diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/domain/DomainConverterProvider.java b/dsl-style-java/src/main/java/example/dsl_style_java/domain/DomainConverterProvider.java deleted file mode 100644 index 59463099..00000000 --- a/dsl-style-java/src/main/java/example/dsl_style_java/domain/DomainConverterProvider.java +++ /dev/null @@ -1,6 +0,0 @@ -package example.dsl_style_java.domain; - -import org.seasar.doma.DomainConverters; - -@DomainConverters(AgeConverter.class) -public class DomainConverterProvider {} diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/domain/Salary.java b/dsl-style-java/src/main/java/example/dsl_style_java/domain/Salary.java deleted file mode 100644 index c4a6a003..00000000 --- a/dsl-style-java/src/main/java/example/dsl_style_java/domain/Salary.java +++ /dev/null @@ -1,57 +0,0 @@ -package example.dsl_style_java.domain; - -import org.seasar.doma.Domain; - -@Domain(valueType = Integer.class) -public class Salary { - - private final Integer value; - - public Salary(Integer value) { - this.value = value; - } - - public Integer getValue() { - return value; - } - - public Salary add(Salary salary) { - if (salary == null) { - throw new NullPointerException("The salary parameter is null."); - } - if (this.value == null || salary.value == null) { - return new Salary(null); - } - return new Salary(this.value + salary.value); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((value == null) ? 0 : value.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - Salary other = (Salary) obj; - if (value == null) { - return other.value == null; - } else return value.equals(other.value); - } - - @Override - public String toString() { - return value != null ? String.valueOf(value) : null; - } -} diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/entity/EmployeeListener.java b/dsl-style-java/src/main/java/example/dsl_style_java/entity/EmployeeListener.java deleted file mode 100644 index e588bef6..00000000 --- a/dsl-style-java/src/main/java/example/dsl_style_java/entity/EmployeeListener.java +++ /dev/null @@ -1,39 +0,0 @@ -package example.dsl_style_java.entity; - -import java.time.LocalDateTime; -import org.seasar.doma.jdbc.entity.EntityListener; -import org.seasar.doma.jdbc.entity.PostDeleteContext; -import org.seasar.doma.jdbc.entity.PostInsertContext; -import org.seasar.doma.jdbc.entity.PostUpdateContext; -import org.seasar.doma.jdbc.entity.PreDeleteContext; -import org.seasar.doma.jdbc.entity.PreInsertContext; -import org.seasar.doma.jdbc.entity.PreUpdateContext; - -public class EmployeeListener implements EntityListener { - - @Override - public void preDelete(E employee, PreDeleteContext context) {} - - @Override - public void preInsert(E employee, PreInsertContext context) { - LocalDateTime timestamp = LocalDateTime.now(); - employee.setInsertTimestamp(timestamp); - } - - @Override - public void preUpdate(E employee, PreUpdateContext context) { - if (context.isEntityChanged()) { - LocalDateTime timestamp = LocalDateTime.now(); - employee.setUpdateTimestamp(timestamp); - } - } - - @Override - public void postInsert(E entity, PostInsertContext context) {} - - @Override - public void postUpdate(E entity, PostUpdateContext context) {} - - @Override - public void postDelete(E entity, PostDeleteContext context) {} -} diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/entity/JobType.java b/dsl-style-java/src/main/java/example/dsl_style_java/entity/JobType.java deleted file mode 100644 index fff692ef..00000000 --- a/dsl-style-java/src/main/java/example/dsl_style_java/entity/JobType.java +++ /dev/null @@ -1,9 +0,0 @@ -package example.dsl_style_java.entity; - -public enum JobType { - SALESMAN, - MANAGER, - ANALYST, - PRESIDENT, - CLERK -} diff --git a/dsl-style-java/src/main/resources/META-INF/example/dsl_style_java/dao/ScriptDao/create.script b/dsl-style-java/src/main/resources/META-INF/example/dsl_style_java/dao/ScriptDao/create.script deleted file mode 100644 index e0427f99..00000000 --- a/dsl-style-java/src/main/resources/META-INF/example/dsl_style_java/dao/ScriptDao/create.script +++ /dev/null @@ -1,20 +0,0 @@ -create sequence employee_seq start with 100 increment by 1; -create table department (id integer not null primary key,name varchar(255) not null, version integer not null); -create table employee (id integer not null primary key,name varchar(255) not null,age integer not null,salary integer,job_type varchar(20),hiredate timestamp, department_id integer, version integer not null, insertTimestamp timestamp, updateTimestamp timestamp); -insert into department values(1,'ACCOUNTING',1); -insert into department values(2,'RESEARCH',1); -insert into department values(3,'SALES',1); -insert into employee values(1,'ALLEN',30,1600,'SALESMAN','2008-01-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(2,'WARD',32,1250,'ANALYST','2008-02-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(3,'JONES',38,2975,'MANAGER','2008-03-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(4,'MARTIN',40,1250,'SALESMAN','2008-04-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(5,'BLAKE',50,2850,'SALESMAN','2008-05-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(6,'CLARK',23,2450,'MANAGER','2008-06-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(7,'SCOTT',28,3000,'SALESMAN','2008-07-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(8,'KING',38,5000,'CLERK','2008-08-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(9,'TURNER',33,1500,'ANALYST','2008-09-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(10,'ADAMS',62,1100,'SALESMAN','2008-10-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(11,'JAMES',44,950,'CLERK','2008-11-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(12,'FORD',55,3000,'ANALYST','2008-12-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(13,'MILLER',51,1300,'MANAGER','2009-01-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(14,'SMITH',410,800,'PRESIDENT','2009-02-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); diff --git a/dsl-style-java/src/main/resources/META-INF/example/dsl_style_java/dao/ScriptDao/drop.script b/dsl-style-java/src/main/resources/META-INF/example/dsl_style_java/dao/ScriptDao/drop.script deleted file mode 100644 index 87f8d3a2..00000000 --- a/dsl-style-java/src/main/resources/META-INF/example/dsl_style_java/dao/ScriptDao/drop.script +++ /dev/null @@ -1,3 +0,0 @@ -drop sequence employee_seq; -drop table employee; -drop table department; diff --git a/dsl-style-java/src/test/java/example/dsl_style_java/TestEnvironment.java b/dsl-style-java/src/test/java/example/dsl_style_java/TestEnvironment.java deleted file mode 100644 index 06141189..00000000 --- a/dsl-style-java/src/test/java/example/dsl_style_java/TestEnvironment.java +++ /dev/null @@ -1,71 +0,0 @@ -package example.dsl_style_java; - -import example.dsl_style_java.dao.ScriptDao; -import example.dsl_style_java.dao.ScriptDaoImpl; -import org.junit.jupiter.api.extension.AfterAllCallback; -import org.junit.jupiter.api.extension.AfterTestExecutionCallback; -import org.junit.jupiter.api.extension.BeforeAllCallback; -import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; -import org.junit.jupiter.api.extension.ExtensionContext; -import org.junit.jupiter.api.extension.ParameterContext; -import org.junit.jupiter.api.extension.ParameterResolver; -import org.seasar.doma.jdbc.JdbcLogger; -import org.seasar.doma.jdbc.dialect.H2Dialect; -import org.seasar.doma.jdbc.tx.LocalTransaction; -import org.seasar.doma.jdbc.tx.LocalTransactionDataSource; -import org.seasar.doma.jdbc.tx.LocalTransactionManager; -import org.seasar.doma.slf4j.Slf4jJdbcLogger; - -public class TestEnvironment - implements BeforeAllCallback, - AfterAllCallback, - BeforeTestExecutionCallback, - AfterTestExecutionCallback, - ParameterResolver { - - private final LocalTransaction localTransaction; - private final LocalTransactionManager transactionManager; - private final DbConfig config; - private final ScriptDao dao; - - public TestEnvironment() { - H2Dialect dialect = new H2Dialect(); - LocalTransactionDataSource dataSource = - new LocalTransactionDataSource("jdbc:h2:mem:tutorial;DB_CLOSE_DELAY=-1", "sa", null); - JdbcLogger jdbcLogger = new Slf4jJdbcLogger(); - localTransaction = dataSource.getLocalTransaction(jdbcLogger); - transactionManager = new LocalTransactionManager(localTransaction); - config = new DbConfig(dialect, dataSource, jdbcLogger, transactionManager); - dao = new ScriptDaoImpl(config); - } - - @Override - public void beforeAll(ExtensionContext context) { - transactionManager.required(dao::create); - } - - @Override - public void afterAll(ExtensionContext context) { - transactionManager.required(dao::drop); - } - - @Override - public void beforeTestExecution(ExtensionContext context) { - localTransaction.begin(); - } - - @Override - public void afterTestExecution(ExtensionContext context) { - localTransaction.rollback(); - } - - public boolean supportsParameter( - ParameterContext parameterContext, ExtensionContext extensionContext) { - return parameterContext.getParameter().getType().isAssignableFrom(DbConfig.class); - } - - public Object resolveParameter( - ParameterContext parameterContext, ExtensionContext extensionContext) { - return config; - } -} diff --git a/dao-style-text/.gitignore b/example-criteria/.gitignore similarity index 100% rename from dao-style-text/.gitignore rename to example-criteria/.gitignore diff --git a/example-criteria/build.gradle.kts b/example-criteria/build.gradle.kts new file mode 100644 index 00000000..28eb840b --- /dev/null +++ b/example-criteria/build.gradle.kts @@ -0,0 +1,8 @@ +plugins { + java +} + +dependencies { + implementation(project(":common")) + testImplementation(project(":common-test")) +} diff --git a/jpms-java/src/main/java/example/jpms_java/entity/NameAndSalaryDto.java b/example-criteria/src/main/java/example/criteria/entity/NameAndSalaryDto.java similarity index 80% rename from jpms-java/src/main/java/example/jpms_java/entity/NameAndSalaryDto.java rename to example-criteria/src/main/java/example/criteria/entity/NameAndSalaryDto.java index 30ee3f7a..dac5af3f 100644 --- a/jpms-java/src/main/java/example/jpms_java/entity/NameAndSalaryDto.java +++ b/example-criteria/src/main/java/example/criteria/entity/NameAndSalaryDto.java @@ -1,6 +1,6 @@ -package example.jpms_java.entity; +package example.criteria.entity; -import example.jpms_java.domain.Salary; +import example.common.domain.Salary; public class NameAndSalaryDto { diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/repository/EmployeeRepository.java b/example-criteria/src/main/java/example/criteria/repository/EmployeeRepository.java similarity index 96% rename from dsl-style-java/src/main/java/example/dsl_style_java/repository/EmployeeRepository.java rename to example-criteria/src/main/java/example/criteria/repository/EmployeeRepository.java index 07f92af3..ef213efa 100644 --- a/dsl-style-java/src/main/java/example/dsl_style_java/repository/EmployeeRepository.java +++ b/example-criteria/src/main/java/example/criteria/repository/EmployeeRepository.java @@ -1,11 +1,11 @@ -package example.dsl_style_java.repository; - -import example.dsl_style_java.domain.Age; -import example.dsl_style_java.domain.Salary; -import example.dsl_style_java.entity.Department_; -import example.dsl_style_java.entity.Employee; -import example.dsl_style_java.entity.Employee_; -import example.dsl_style_java.entity.NameAndSalaryDto; +package example.criteria.repository; + +import example.common.domain.Age; +import example.common.domain.Salary; +import example.common.entity.Department_; +import example.common.entity.Employee; +import example.common.entity.Employee_; +import example.criteria.entity.NameAndSalaryDto; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; diff --git a/dao-style-basic/src/main/resources/logback.xml b/example-criteria/src/main/resources/logback.xml similarity index 100% rename from dao-style-basic/src/main/resources/logback.xml rename to example-criteria/src/main/resources/logback.xml diff --git a/dsl-style-java/src/test/java/example/dsl_style_java/AggregateFunctionTest.java b/example-criteria/src/test/java/example/criteria/AggregateFunctionTest.java similarity index 79% rename from dsl-style-java/src/test/java/example/dsl_style_java/AggregateFunctionTest.java rename to example-criteria/src/test/java/example/criteria/AggregateFunctionTest.java index 10b20b5c..298aad68 100644 --- a/dsl-style-java/src/test/java/example/dsl_style_java/AggregateFunctionTest.java +++ b/example-criteria/src/test/java/example/criteria/AggregateFunctionTest.java @@ -1,8 +1,9 @@ -package example.dsl_style_java; +package example.criteria; import static org.junit.jupiter.api.Assertions.assertEquals; -import example.dsl_style_java.repository.EmployeeRepository; +import example.common.test.TestEnvironment; +import example.criteria.repository.EmployeeRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.seasar.doma.jdbc.Config; diff --git a/dsl-style-java/src/test/java/example/dsl_style_java/BatchDeleteTest.java b/example-criteria/src/test/java/example/criteria/BatchDeleteTest.java similarity index 74% rename from dsl-style-java/src/test/java/example/dsl_style_java/BatchDeleteTest.java rename to example-criteria/src/test/java/example/criteria/BatchDeleteTest.java index e9faedc7..c7fe2e98 100644 --- a/dsl-style-java/src/test/java/example/dsl_style_java/BatchDeleteTest.java +++ b/example-criteria/src/test/java/example/criteria/BatchDeleteTest.java @@ -1,7 +1,8 @@ -package example.dsl_style_java; +package example.criteria; -import example.dsl_style_java.entity.Employee; -import example.dsl_style_java.repository.EmployeeRepository; +import example.common.entity.Employee; +import example.common.test.TestEnvironment; +import example.criteria.repository.EmployeeRepository; import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/dsl-style-java/src/test/java/example/dsl_style_java/BatchInsertTest.java b/example-criteria/src/test/java/example/criteria/BatchInsertTest.java similarity index 76% rename from dsl-style-java/src/test/java/example/dsl_style_java/BatchInsertTest.java rename to example-criteria/src/test/java/example/criteria/BatchInsertTest.java index 6646c60b..52c2e121 100644 --- a/dsl-style-java/src/test/java/example/dsl_style_java/BatchInsertTest.java +++ b/example-criteria/src/test/java/example/criteria/BatchInsertTest.java @@ -1,9 +1,10 @@ -package example.dsl_style_java; +package example.criteria; -import example.dsl_style_java.domain.Age; -import example.dsl_style_java.domain.Salary; -import example.dsl_style_java.entity.Employee; -import example.dsl_style_java.repository.EmployeeRepository; +import example.common.domain.Age; +import example.common.domain.Salary; +import example.common.entity.Employee; +import example.common.test.TestEnvironment; +import example.criteria.repository.EmployeeRepository; import java.util.Arrays; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/dsl-style-java/src/test/java/example/dsl_style_java/BatchUpdateTest.java b/example-criteria/src/test/java/example/criteria/BatchUpdateTest.java similarity index 76% rename from dsl-style-java/src/test/java/example/dsl_style_java/BatchUpdateTest.java rename to example-criteria/src/test/java/example/criteria/BatchUpdateTest.java index eaef7da1..ba95736a 100644 --- a/dsl-style-java/src/test/java/example/dsl_style_java/BatchUpdateTest.java +++ b/example-criteria/src/test/java/example/criteria/BatchUpdateTest.java @@ -1,8 +1,9 @@ -package example.dsl_style_java; +package example.criteria; -import example.dsl_style_java.domain.Salary; -import example.dsl_style_java.entity.Employee; -import example.dsl_style_java.repository.EmployeeRepository; +import example.common.domain.Salary; +import example.common.entity.Employee; +import example.common.test.TestEnvironment; +import example.criteria.repository.EmployeeRepository; import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/dsl-style-java/src/test/java/example/dsl_style_java/DeleteTest.java b/example-criteria/src/test/java/example/criteria/DeleteTest.java similarity index 81% rename from dsl-style-java/src/test/java/example/dsl_style_java/DeleteTest.java rename to example-criteria/src/test/java/example/criteria/DeleteTest.java index f05fc800..621d7da9 100644 --- a/dsl-style-java/src/test/java/example/dsl_style_java/DeleteTest.java +++ b/example-criteria/src/test/java/example/criteria/DeleteTest.java @@ -1,9 +1,10 @@ -package example.dsl_style_java; +package example.criteria; import static org.junit.jupiter.api.Assertions.assertNotNull; -import example.dsl_style_java.entity.Employee; -import example.dsl_style_java.repository.EmployeeRepository; +import example.common.entity.Employee; +import example.common.test.TestEnvironment; +import example.criteria.repository.EmployeeRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.seasar.doma.jdbc.Config; diff --git a/dsl-style-java/src/test/java/example/dsl_style_java/InsertTest.java b/example-criteria/src/test/java/example/criteria/InsertTest.java similarity index 78% rename from dsl-style-java/src/test/java/example/dsl_style_java/InsertTest.java rename to example-criteria/src/test/java/example/criteria/InsertTest.java index 3f46a11d..5140a9f5 100644 --- a/dsl-style-java/src/test/java/example/dsl_style_java/InsertTest.java +++ b/example-criteria/src/test/java/example/criteria/InsertTest.java @@ -1,10 +1,11 @@ -package example.dsl_style_java; +package example.criteria; -import example.dsl_style_java.domain.Age; -import example.dsl_style_java.domain.Salary; -import example.dsl_style_java.entity.Employee; -import example.dsl_style_java.entity.JobType; -import example.dsl_style_java.repository.EmployeeRepository; +import example.common.domain.Age; +import example.common.domain.Salary; +import example.common.entity.Employee; +import example.common.entity.JobType; +import example.common.test.TestEnvironment; +import example.criteria.repository.EmployeeRepository; import java.time.LocalDateTime; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/dsl-style-java/src/test/java/example/dsl_style_java/SelectTest.java b/example-criteria/src/test/java/example/criteria/SelectTest.java similarity index 94% rename from dsl-style-java/src/test/java/example/dsl_style_java/SelectTest.java rename to example-criteria/src/test/java/example/criteria/SelectTest.java index 581ec523..708e0ea2 100644 --- a/dsl-style-java/src/test/java/example/dsl_style_java/SelectTest.java +++ b/example-criteria/src/test/java/example/criteria/SelectTest.java @@ -1,15 +1,16 @@ -package example.dsl_style_java; +package example.criteria; import static java.util.stream.Collectors.toList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import example.dsl_style_java.domain.Age; -import example.dsl_style_java.domain.Salary; -import example.dsl_style_java.entity.Employee; -import example.dsl_style_java.entity.NameAndSalaryDto; -import example.dsl_style_java.repository.EmployeeRepository; +import example.common.domain.Age; +import example.common.domain.Salary; +import example.common.entity.Employee; +import example.common.test.TestEnvironment; +import example.criteria.entity.NameAndSalaryDto; +import example.criteria.repository.EmployeeRepository; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; @@ -138,7 +139,7 @@ public void testStream() { s.map(Employee::getSalary) .filter(Objects::nonNull) .reduce(new Salary(0), Salary::add)); - assertEquals(Integer.valueOf(21975), sum.getValue()); + assertEquals(Integer.valueOf(21975), sum.value()); } @Test diff --git a/dsl-style-java/src/test/java/example/dsl_style_java/UpdateTest.java b/example-criteria/src/test/java/example/criteria/UpdateTest.java similarity index 81% rename from dsl-style-java/src/test/java/example/dsl_style_java/UpdateTest.java rename to example-criteria/src/test/java/example/criteria/UpdateTest.java index ff24fc7b..87ec33f0 100644 --- a/dsl-style-java/src/test/java/example/dsl_style_java/UpdateTest.java +++ b/example-criteria/src/test/java/example/criteria/UpdateTest.java @@ -1,10 +1,11 @@ -package example.dsl_style_java; +package example.criteria; import static org.junit.jupiter.api.Assertions.assertNotNull; -import example.dsl_style_java.entity.Employee; -import example.dsl_style_java.entity.JobType; -import example.dsl_style_java.repository.EmployeeRepository; +import example.common.entity.Employee; +import example.common.entity.JobType; +import example.common.test.TestEnvironment; +import example.criteria.repository.EmployeeRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.seasar.doma.jdbc.Config; diff --git a/dsl-style-java/.gitignore b/example-jpms/.gitignore similarity index 100% rename from dsl-style-java/.gitignore rename to example-jpms/.gitignore diff --git a/jpms-java/build.gradle.kts b/example-jpms/build.gradle.kts similarity index 67% rename from jpms-java/build.gradle.kts rename to example-jpms/build.gradle.kts index 815d3f33..37c88536 100644 --- a/jpms-java/build.gradle.kts +++ b/example-jpms/build.gradle.kts @@ -8,7 +8,7 @@ tasks { val aptOptions = extensions.getByType() aptOptions.processorArgs = mapOf( - "doma.domain.converters" to "example.jpms_java.domain.DomainConverterProvider", + "doma.domain.converters" to "example.jpms.domain.DomainConverterProvider", ) } } @@ -16,3 +16,7 @@ tasks { application { mainClass.set("example.jpms_java.Main") } + +dependencies { + implementation(project(":common")) +} diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/DbConfig.java b/example-jpms/src/main/java/example/jpms/DbConfig.java similarity index 97% rename from dsl-style-java/src/main/java/example/dsl_style_java/DbConfig.java rename to example-jpms/src/main/java/example/jpms/DbConfig.java index 76e1c368..6a12efb9 100644 --- a/dsl-style-java/src/main/java/example/dsl_style_java/DbConfig.java +++ b/example-jpms/src/main/java/example/jpms/DbConfig.java @@ -1,4 +1,4 @@ -package example.dsl_style_java; +package example.jpms; import java.util.Objects; import javax.sql.DataSource; diff --git a/jpms-java/src/main/java/example/jpms_java/DbContext.java b/example-jpms/src/main/java/example/jpms/DbContext.java similarity index 95% rename from jpms-java/src/main/java/example/jpms_java/DbContext.java rename to example-jpms/src/main/java/example/jpms/DbContext.java index efd02418..8edec33a 100644 --- a/jpms-java/src/main/java/example/jpms_java/DbContext.java +++ b/example-jpms/src/main/java/example/jpms/DbContext.java @@ -1,4 +1,4 @@ -package example.jpms_java; +package example.jpms; import java.util.Objects; import org.seasar.doma.jdbc.tx.LocalTransaction; diff --git a/jpms-java/src/main/java/example/jpms_java/DbContextFactory.java b/example-jpms/src/main/java/example/jpms/DbContextFactory.java similarity index 96% rename from jpms-java/src/main/java/example/jpms_java/DbContextFactory.java rename to example-jpms/src/main/java/example/jpms/DbContextFactory.java index 72edaacc..fdd3c9cf 100644 --- a/jpms-java/src/main/java/example/jpms_java/DbContextFactory.java +++ b/example-jpms/src/main/java/example/jpms/DbContextFactory.java @@ -1,4 +1,4 @@ -package example.jpms_java; +package example.jpms; import org.seasar.doma.jdbc.dialect.H2Dialect; import org.seasar.doma.jdbc.tx.LocalTransactionDataSource; diff --git a/jpms-java/src/main/java/example/jpms_java/Main.java b/example-jpms/src/main/java/example/jpms/Main.java similarity index 80% rename from jpms-java/src/main/java/example/jpms_java/Main.java rename to example-jpms/src/main/java/example/jpms/Main.java index 62ab1087..46b15404 100644 --- a/jpms-java/src/main/java/example/jpms_java/Main.java +++ b/example-jpms/src/main/java/example/jpms/Main.java @@ -1,8 +1,8 @@ -package example.jpms_java; +package example.jpms; -import example.jpms_java.dao.EmployeeDaoImpl; -import example.jpms_java.dao.ScriptDaoImpl; -import example.jpms_java.repository.EmployeeRepository; +import example.jpms.dao.EmployeeDaoImpl; +import example.jpms.dao.ScriptDaoImpl; +import example.jpms.repository.EmployeeRepository; public class Main { diff --git a/jpms-java/src/main/java/example/jpms_java/dao/EmployeeDao.java b/example-jpms/src/main/java/example/jpms/dao/EmployeeDao.java similarity index 80% rename from jpms-java/src/main/java/example/jpms_java/dao/EmployeeDao.java rename to example-jpms/src/main/java/example/jpms/dao/EmployeeDao.java index 8449e83d..eb1a7087 100644 --- a/jpms-java/src/main/java/example/jpms_java/dao/EmployeeDao.java +++ b/example-jpms/src/main/java/example/jpms/dao/EmployeeDao.java @@ -1,6 +1,6 @@ -package example.jpms_java.dao; +package example.jpms.dao; -import example.jpms_java.entity.Employee; +import example.jpms.entity.Employee; import org.seasar.doma.Dao; import org.seasar.doma.Select; import org.seasar.doma.Sql; diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/dao/ScriptDao.java b/example-jpms/src/main/java/example/jpms/dao/ScriptDao.java similarity index 80% rename from dsl-style-java/src/main/java/example/dsl_style_java/dao/ScriptDao.java rename to example-jpms/src/main/java/example/jpms/dao/ScriptDao.java index b0821a85..7f0dc724 100644 --- a/dsl-style-java/src/main/java/example/dsl_style_java/dao/ScriptDao.java +++ b/example-jpms/src/main/java/example/jpms/dao/ScriptDao.java @@ -1,4 +1,4 @@ -package example.dsl_style_java.dao; +package example.jpms.dao; import org.seasar.doma.Dao; import org.seasar.doma.Script; diff --git a/jpms-java/src/main/java/example/jpms_java/domain/Age.java b/example-jpms/src/main/java/example/jpms/domain/Age.java similarity index 87% rename from jpms-java/src/main/java/example/jpms_java/domain/Age.java rename to example-jpms/src/main/java/example/jpms/domain/Age.java index 4e558c2d..e252e7a5 100644 --- a/jpms-java/src/main/java/example/jpms_java/domain/Age.java +++ b/example-jpms/src/main/java/example/jpms/domain/Age.java @@ -1,4 +1,4 @@ -package example.jpms_java.domain; +package example.jpms.domain; public class Age { private final int value; diff --git a/jpms-java/src/main/java/example/jpms_java/domain/AgeConverter.java b/example-jpms/src/main/java/example/jpms/domain/AgeConverter.java similarity index 91% rename from jpms-java/src/main/java/example/jpms_java/domain/AgeConverter.java rename to example-jpms/src/main/java/example/jpms/domain/AgeConverter.java index 6daa4efe..4f977f71 100644 --- a/jpms-java/src/main/java/example/jpms_java/domain/AgeConverter.java +++ b/example-jpms/src/main/java/example/jpms/domain/AgeConverter.java @@ -1,4 +1,4 @@ -package example.jpms_java.domain; +package example.jpms.domain; import org.seasar.doma.ExternalDomain; import org.seasar.doma.jdbc.domain.DomainConverter; diff --git a/dao-style-file/src/main/java/example/dao_style_file/domain/DomainConverterProvider.java b/example-jpms/src/main/java/example/jpms/domain/DomainConverterProvider.java similarity index 75% rename from dao-style-file/src/main/java/example/dao_style_file/domain/DomainConverterProvider.java rename to example-jpms/src/main/java/example/jpms/domain/DomainConverterProvider.java index 71b08d41..81f113ee 100644 --- a/dao-style-file/src/main/java/example/dao_style_file/domain/DomainConverterProvider.java +++ b/example-jpms/src/main/java/example/jpms/domain/DomainConverterProvider.java @@ -1,4 +1,4 @@ -package example.dao_style_file.domain; +package example.jpms.domain; import org.seasar.doma.DomainConverters; diff --git a/jpms-java/src/main/java/example/jpms_java/domain/Salary.java b/example-jpms/src/main/java/example/jpms/domain/Salary.java similarity index 97% rename from jpms-java/src/main/java/example/jpms_java/domain/Salary.java rename to example-jpms/src/main/java/example/jpms/domain/Salary.java index 200952b2..0e9b0aa0 100644 --- a/jpms-java/src/main/java/example/jpms_java/domain/Salary.java +++ b/example-jpms/src/main/java/example/jpms/domain/Salary.java @@ -1,4 +1,4 @@ -package example.jpms_java.domain; +package example.jpms.domain; import org.seasar.doma.Domain; diff --git a/jpms-java/src/main/java/example/jpms_java/entity/Department.java b/example-jpms/src/main/java/example/jpms/entity/Department.java similarity index 95% rename from jpms-java/src/main/java/example/jpms_java/entity/Department.java rename to example-jpms/src/main/java/example/jpms/entity/Department.java index 63cbad61..e5b03ebe 100644 --- a/jpms-java/src/main/java/example/jpms_java/entity/Department.java +++ b/example-jpms/src/main/java/example/jpms/entity/Department.java @@ -1,4 +1,4 @@ -package example.jpms_java.entity; +package example.jpms.entity; import java.util.ArrayList; import java.util.List; diff --git a/jpms-java/src/main/java/example/jpms_java/entity/Employee.java b/example-jpms/src/main/java/example/jpms/entity/Employee.java similarity index 96% rename from jpms-java/src/main/java/example/jpms_java/entity/Employee.java rename to example-jpms/src/main/java/example/jpms/entity/Employee.java index 0d966d6d..93108435 100644 --- a/jpms-java/src/main/java/example/jpms_java/entity/Employee.java +++ b/example-jpms/src/main/java/example/jpms/entity/Employee.java @@ -1,7 +1,7 @@ -package example.jpms_java.entity; +package example.jpms.entity; -import example.jpms_java.domain.Age; -import example.jpms_java.domain.Salary; +import example.jpms.domain.Age; +import example.jpms.domain.Salary; import java.time.LocalDate; import java.time.LocalDateTime; import org.seasar.doma.Column; diff --git a/dao-style-file/src/main/java/example/dao_style_file/entity/EmployeeListener.java b/example-jpms/src/main/java/example/jpms/entity/EmployeeListener.java similarity index 96% rename from dao-style-file/src/main/java/example/dao_style_file/entity/EmployeeListener.java rename to example-jpms/src/main/java/example/jpms/entity/EmployeeListener.java index 3701cb7c..7be7dfac 100644 --- a/dao-style-file/src/main/java/example/dao_style_file/entity/EmployeeListener.java +++ b/example-jpms/src/main/java/example/jpms/entity/EmployeeListener.java @@ -1,4 +1,4 @@ -package example.dao_style_file.entity; +package example.jpms.entity; import java.time.LocalDateTime; import org.seasar.doma.jdbc.entity.EntityListener; diff --git a/dao-style-file/src/main/java/example/dao_style_file/entity/JobType.java b/example-jpms/src/main/java/example/jpms/entity/JobType.java similarity index 67% rename from dao-style-file/src/main/java/example/dao_style_file/entity/JobType.java rename to example-jpms/src/main/java/example/jpms/entity/JobType.java index 746d801b..3e276b18 100644 --- a/dao-style-file/src/main/java/example/dao_style_file/entity/JobType.java +++ b/example-jpms/src/main/java/example/jpms/entity/JobType.java @@ -1,4 +1,4 @@ -package example.dao_style_file.entity; +package example.jpms.entity; public enum JobType { SALESMAN, diff --git a/dsl-style-java/src/main/java/example/dsl_style_java/entity/NameAndSalaryDto.java b/example-jpms/src/main/java/example/jpms/entity/NameAndSalaryDto.java similarity index 78% rename from dsl-style-java/src/main/java/example/dsl_style_java/entity/NameAndSalaryDto.java rename to example-jpms/src/main/java/example/jpms/entity/NameAndSalaryDto.java index fce8ad16..fdd57919 100644 --- a/dsl-style-java/src/main/java/example/dsl_style_java/entity/NameAndSalaryDto.java +++ b/example-jpms/src/main/java/example/jpms/entity/NameAndSalaryDto.java @@ -1,6 +1,6 @@ -package example.dsl_style_java.entity; +package example.jpms.entity; -import example.dsl_style_java.domain.Salary; +import example.jpms.domain.Salary; public class NameAndSalaryDto { diff --git a/jpms-java/src/main/java/example/jpms_java/repository/EmployeeRepository.java b/example-jpms/src/main/java/example/jpms/repository/EmployeeRepository.java similarity index 96% rename from jpms-java/src/main/java/example/jpms_java/repository/EmployeeRepository.java rename to example-jpms/src/main/java/example/jpms/repository/EmployeeRepository.java index e635ceb7..b92d431d 100644 --- a/jpms-java/src/main/java/example/jpms_java/repository/EmployeeRepository.java +++ b/example-jpms/src/main/java/example/jpms/repository/EmployeeRepository.java @@ -1,11 +1,11 @@ -package example.jpms_java.repository; - -import example.jpms_java.domain.Age; -import example.jpms_java.domain.Salary; -import example.jpms_java.entity.Department_; -import example.jpms_java.entity.Employee; -import example.jpms_java.entity.Employee_; -import example.jpms_java.entity.NameAndSalaryDto; +package example.jpms.repository; + +import example.jpms.domain.Age; +import example.jpms.domain.Salary; +import example.jpms.entity.Department_; +import example.jpms.entity.Employee; +import example.jpms.entity.Employee_; +import example.jpms.entity.NameAndSalaryDto; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; diff --git a/jpms-java/src/main/java/module-info.java b/example-jpms/src/main/java/module-info.java similarity index 72% rename from jpms-java/src/main/java/module-info.java rename to example-jpms/src/main/java/module-info.java index e08db60a..78e8c6f6 100644 --- a/jpms-java/src/main/java/module-info.java +++ b/example-jpms/src/main/java/module-info.java @@ -2,5 +2,5 @@ requires org.seasar.doma.core; requires org.seasar.doma.slf4j; - opens example.jpms_java.entity; + opens example.jpms.entity; } diff --git a/dao-style-basic/src/main/resources/META-INF/example/dao_style_basic/dao/ScriptDao/create.script b/example-jpms/src/main/resources/META-INF/example/jpms/dao/ScriptDao/create.script similarity index 100% rename from dao-style-basic/src/main/resources/META-INF/example/dao_style_basic/dao/ScriptDao/create.script rename to example-jpms/src/main/resources/META-INF/example/jpms/dao/ScriptDao/create.script diff --git a/dao-style-basic/src/main/resources/META-INF/example/dao_style_basic/dao/ScriptDao/drop.script b/example-jpms/src/main/resources/META-INF/example/jpms/dao/ScriptDao/drop.script similarity index 100% rename from dao-style-basic/src/main/resources/META-INF/example/dao_style_basic/dao/ScriptDao/drop.script rename to example-jpms/src/main/resources/META-INF/example/jpms/dao/ScriptDao/drop.script diff --git a/dao-style-file/src/main/resources/logback.xml b/example-jpms/src/main/resources/logback.xml similarity index 100% rename from dao-style-file/src/main/resources/logback.xml rename to example-jpms/src/main/resources/logback.xml diff --git a/jpms-java/src/test/java/example/jpms_java/AggregateFunctionTest.java b/example-jpms/src/test/java/example/jpms/AggregateFunctionTest.java similarity index 85% rename from jpms-java/src/test/java/example/jpms_java/AggregateFunctionTest.java rename to example-jpms/src/test/java/example/jpms/AggregateFunctionTest.java index 8bba14ba..d847823e 100644 --- a/jpms-java/src/test/java/example/jpms_java/AggregateFunctionTest.java +++ b/example-jpms/src/test/java/example/jpms/AggregateFunctionTest.java @@ -1,8 +1,8 @@ -package example.jpms_java; +package example.jpms; import static org.junit.jupiter.api.Assertions.assertEquals; -import example.jpms_java.repository.EmployeeRepository; +import example.jpms.repository.EmployeeRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.seasar.doma.jdbc.Config; diff --git a/jpms-java/src/test/java/example/jpms_java/BatchDeleteTest.java b/example-jpms/src/test/java/example/jpms/BatchDeleteTest.java similarity index 79% rename from jpms-java/src/test/java/example/jpms_java/BatchDeleteTest.java rename to example-jpms/src/test/java/example/jpms/BatchDeleteTest.java index d93ee151..0a2eb392 100644 --- a/jpms-java/src/test/java/example/jpms_java/BatchDeleteTest.java +++ b/example-jpms/src/test/java/example/jpms/BatchDeleteTest.java @@ -1,7 +1,7 @@ -package example.jpms_java; +package example.jpms; -import example.jpms_java.entity.Employee; -import example.jpms_java.repository.EmployeeRepository; +import example.jpms.entity.Employee; +import example.jpms.repository.EmployeeRepository; import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/jpms-java/src/test/java/example/jpms_java/BatchInsertTest.java b/example-jpms/src/test/java/example/jpms/BatchInsertTest.java similarity index 79% rename from jpms-java/src/test/java/example/jpms_java/BatchInsertTest.java rename to example-jpms/src/test/java/example/jpms/BatchInsertTest.java index ed64f536..eeee89d6 100644 --- a/jpms-java/src/test/java/example/jpms_java/BatchInsertTest.java +++ b/example-jpms/src/test/java/example/jpms/BatchInsertTest.java @@ -1,9 +1,9 @@ -package example.jpms_java; +package example.jpms; -import example.jpms_java.domain.Age; -import example.jpms_java.domain.Salary; -import example.jpms_java.entity.Employee; -import example.jpms_java.repository.EmployeeRepository; +import example.jpms.domain.Age; +import example.jpms.domain.Salary; +import example.jpms.entity.Employee; +import example.jpms.repository.EmployeeRepository; import java.util.Arrays; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/jpms-java/src/test/java/example/jpms_java/BatchUpdateTest.java b/example-jpms/src/test/java/example/jpms/BatchUpdateTest.java similarity index 80% rename from jpms-java/src/test/java/example/jpms_java/BatchUpdateTest.java rename to example-jpms/src/test/java/example/jpms/BatchUpdateTest.java index dc3b9f45..d1d76f86 100644 --- a/jpms-java/src/test/java/example/jpms_java/BatchUpdateTest.java +++ b/example-jpms/src/test/java/example/jpms/BatchUpdateTest.java @@ -1,8 +1,8 @@ -package example.jpms_java; +package example.jpms; -import example.jpms_java.domain.Salary; -import example.jpms_java.entity.Employee; -import example.jpms_java.repository.EmployeeRepository; +import example.jpms.domain.Salary; +import example.jpms.entity.Employee; +import example.jpms.repository.EmployeeRepository; import java.util.List; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/jpms-java/src/test/java/example/jpms_java/DeleteTest.java b/example-jpms/src/test/java/example/jpms/DeleteTest.java similarity index 85% rename from jpms-java/src/test/java/example/jpms_java/DeleteTest.java rename to example-jpms/src/test/java/example/jpms/DeleteTest.java index 6c6ff626..d19249e3 100644 --- a/jpms-java/src/test/java/example/jpms_java/DeleteTest.java +++ b/example-jpms/src/test/java/example/jpms/DeleteTest.java @@ -1,9 +1,9 @@ -package example.jpms_java; +package example.jpms; import static org.junit.jupiter.api.Assertions.assertNotNull; -import example.jpms_java.entity.Employee; -import example.jpms_java.repository.EmployeeRepository; +import example.jpms.entity.Employee; +import example.jpms.repository.EmployeeRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.seasar.doma.jdbc.Config; diff --git a/jpms-java/src/test/java/example/jpms_java/InsertTest.java b/example-jpms/src/test/java/example/jpms/InsertTest.java similarity index 80% rename from jpms-java/src/test/java/example/jpms_java/InsertTest.java rename to example-jpms/src/test/java/example/jpms/InsertTest.java index db61dbf9..71f9fce5 100644 --- a/jpms-java/src/test/java/example/jpms_java/InsertTest.java +++ b/example-jpms/src/test/java/example/jpms/InsertTest.java @@ -1,10 +1,10 @@ -package example.jpms_java; +package example.jpms; -import example.jpms_java.domain.Age; -import example.jpms_java.domain.Salary; -import example.jpms_java.entity.Employee; -import example.jpms_java.entity.JobType; -import example.jpms_java.repository.EmployeeRepository; +import example.jpms.domain.Age; +import example.jpms.domain.Salary; +import example.jpms.entity.Employee; +import example.jpms.entity.JobType; +import example.jpms.repository.EmployeeRepository; import java.time.LocalDateTime; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/jpms-java/src/test/java/example/jpms_java/SelectTest.java b/example-jpms/src/test/java/example/jpms/SelectTest.java similarity index 96% rename from jpms-java/src/test/java/example/jpms_java/SelectTest.java rename to example-jpms/src/test/java/example/jpms/SelectTest.java index 55ee183e..8db3610e 100644 --- a/jpms-java/src/test/java/example/jpms_java/SelectTest.java +++ b/example-jpms/src/test/java/example/jpms/SelectTest.java @@ -1,15 +1,15 @@ -package example.jpms_java; +package example.jpms; import static java.util.stream.Collectors.toList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import example.jpms_java.domain.Age; -import example.jpms_java.domain.Salary; -import example.jpms_java.entity.Employee; -import example.jpms_java.entity.NameAndSalaryDto; -import example.jpms_java.repository.EmployeeRepository; +import example.jpms.domain.Age; +import example.jpms.domain.Salary; +import example.jpms.entity.Employee; +import example.jpms.entity.NameAndSalaryDto; +import example.jpms.repository.EmployeeRepository; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; diff --git a/jpms-java/src/test/java/example/jpms_java/TestEnvironment.java b/example-jpms/src/test/java/example/jpms/TestEnvironment.java similarity index 93% rename from jpms-java/src/test/java/example/jpms_java/TestEnvironment.java rename to example-jpms/src/test/java/example/jpms/TestEnvironment.java index 99daa4ff..dea8e111 100644 --- a/jpms-java/src/test/java/example/jpms_java/TestEnvironment.java +++ b/example-jpms/src/test/java/example/jpms/TestEnvironment.java @@ -1,7 +1,7 @@ -package example.jpms_java; +package example.jpms; -import example.jpms_java.dao.ScriptDao; -import example.jpms_java.dao.ScriptDaoImpl; +import example.jpms.dao.ScriptDao; +import example.jpms.dao.ScriptDaoImpl; import org.junit.jupiter.api.extension.AfterAllCallback; import org.junit.jupiter.api.extension.AfterTestExecutionCallback; import org.junit.jupiter.api.extension.BeforeAllCallback; diff --git a/jpms-java/src/test/java/example/jpms_java/UpdateTest.java b/example-jpms/src/test/java/example/jpms/UpdateTest.java similarity index 83% rename from jpms-java/src/test/java/example/jpms_java/UpdateTest.java rename to example-jpms/src/test/java/example/jpms/UpdateTest.java index c0fe2855..ca952cb8 100644 --- a/jpms-java/src/test/java/example/jpms_java/UpdateTest.java +++ b/example-jpms/src/test/java/example/jpms/UpdateTest.java @@ -1,10 +1,10 @@ -package example.jpms_java; +package example.jpms; import static org.junit.jupiter.api.Assertions.assertNotNull; -import example.jpms_java.entity.Employee; -import example.jpms_java.entity.JobType; -import example.jpms_java.repository.EmployeeRepository; +import example.jpms.entity.Employee; +import example.jpms.entity.JobType; +import example.jpms.repository.EmployeeRepository; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.seasar.doma.jdbc.Config; diff --git a/jpms-java/.gitignore b/example-sql-annotation/.gitignore similarity index 100% rename from jpms-java/.gitignore rename to example-sql-annotation/.gitignore diff --git a/dao-style-file/build.gradle.kts b/example-sql-annotation/build.gradle.kts similarity index 53% rename from dao-style-file/build.gradle.kts rename to example-sql-annotation/build.gradle.kts index bcba03e3..8b415dd6 100644 --- a/dao-style-file/build.gradle.kts +++ b/example-sql-annotation/build.gradle.kts @@ -7,7 +7,12 @@ tasks { val aptOptions = extensions.getByType() aptOptions.processorArgs = mapOf( - "doma.domain.converters" to "example.dao_style_file.domain.DomainConverterProvider", + "doma.domain.converters" to "example.common.domain.DomainConverterProvider", ) } } + +dependencies { + implementation(project(":common")) + testImplementation(project(":common-test")) +} diff --git a/dao-style-text/src/main/java/example/dao_style_text/dao/EmployeeDao.java b/example-sql-annotation/src/main/java/example/sql/annotation/EmployeeDao.java similarity index 96% rename from dao-style-text/src/main/java/example/dao_style_text/dao/EmployeeDao.java rename to example-sql-annotation/src/main/java/example/sql/annotation/EmployeeDao.java index ca6bbb4f..ef55cf69 100644 --- a/dao-style-text/src/main/java/example/dao_style_text/dao/EmployeeDao.java +++ b/example-sql-annotation/src/main/java/example/sql/annotation/EmployeeDao.java @@ -1,9 +1,9 @@ -package example.dao_style_text.dao; +package example.sql.annotation; -import example.dao_style_text.domain.Age; -import example.dao_style_text.domain.Salary; -import example.dao_style_text.entity.Department; -import example.dao_style_text.entity.Employee; +import example.common.domain.Age; +import example.common.domain.Salary; +import example.common.entity.Department; +import example.common.entity.Employee; import java.sql.Timestamp; import java.util.List; import java.util.function.BiFunction; diff --git a/example-sql-annotation/src/main/java/example/sql/annotation/OrderDao.java b/example-sql-annotation/src/main/java/example/sql/annotation/OrderDao.java new file mode 100644 index 00000000..178aa53a --- /dev/null +++ b/example-sql-annotation/src/main/java/example/sql/annotation/OrderDao.java @@ -0,0 +1,74 @@ +package example.sql.annotation; + +import example.common.entity.Category; +import example.common.entity.Order; +import example.common.entity.OrderItem; +import example.common.entity.Payment; +import example.common.entity.Product; +import example.common.entity.User; +import java.util.function.BiFunction; +import org.seasar.doma.AggregateStrategy; +import org.seasar.doma.AssociationLinker; +import org.seasar.doma.Dao; +import org.seasar.doma.Select; +import org.seasar.doma.Sql; + +@Dao +public interface OrderDao { + + @Sql( + """ + select /*%expand */* + from `order` o + left outer join payment pa on o.id = pa.order_id + left outer join `user` u on o.user_id = u.id + left outer join order_item oi on o.id = oi.order_id + left outer join product pr on oi.product_id = pr.id + left outer join product_category pc on pr.id = pc.product_id + left outer join category c on pc.category_id = c.id + where o.id = /* id */0 + """) + @Select(aggregateStrategy = OrderAggregateStrategy.class) + Order selectById(Integer id); +} + +@AggregateStrategy(root = Order.class, tableAlias = "o") +interface OrderAggregateStrategy { + @AssociationLinker(propertyPath = "payment", tableAlias = "pa") + BiFunction payment = + (order, payment) -> { + order.payment = payment; + payment.order = order; + return order; + }; + + @AssociationLinker(propertyPath = "user", tableAlias = "u") + BiFunction user = + (order, user) -> { + order.user = user; + return order; + }; + + @AssociationLinker(propertyPath = "orderItemList", tableAlias = "oi") + BiFunction orderItemList = + (order, orderItem) -> { + order.orderItemList.add(orderItem); + orderItem.order = order; + return order; + }; + + @AssociationLinker(propertyPath = "orderItemList.product", tableAlias = "pr") + BiFunction orderItemList$product = + (orderItem, product) -> { + orderItem.product = product; + return orderItem; + }; + + @AssociationLinker(propertyPath = "orderItemList.product.categoryList", tableAlias = "c") + BiFunction orderItemList$product$category = + (product, category) -> { + product.categoryList.add(category); + category.productList.add(product); + return product; + }; +} diff --git a/example-sql-annotation/src/main/java/example/sql/annotation/ReviewDao.java b/example-sql-annotation/src/main/java/example/sql/annotation/ReviewDao.java new file mode 100644 index 00000000..042303bc --- /dev/null +++ b/example-sql-annotation/src/main/java/example/sql/annotation/ReviewDao.java @@ -0,0 +1,44 @@ +package example.sql.annotation; + +import example.common.entity.Product; +import example.common.entity.Review; +import example.common.entity.User; +import java.util.List; +import java.util.function.BiFunction; +import org.seasar.doma.AggregateStrategy; +import org.seasar.doma.AssociationLinker; +import org.seasar.doma.Dao; +import org.seasar.doma.Select; +import org.seasar.doma.Sql; + +@Dao +public interface ReviewDao { + @Sql( + """ + select /*%expand */* + from review r + left outer join product pr on r.product_id = pr.id + left outer join `user` u on r.user_id = u.id + order by r.id + """) + @Select(aggregateStrategy = ReviewAggregateStrategy.class) + List selectAll(); +} + +@AggregateStrategy(root = Review.class, tableAlias = "r") +interface ReviewAggregateStrategy { + + @AssociationLinker(propertyPath = "product", tableAlias = "pr") + BiFunction product = + (review, product) -> { + review.product = product; + return review; + }; + + @AssociationLinker(propertyPath = "user", tableAlias = "u") + BiFunction user = + (review, user) -> { + review.user = user; + return review; + }; +} diff --git a/dao-style-text/src/main/resources/logback.xml b/example-sql-annotation/src/main/resources/logback.xml similarity index 100% rename from dao-style-text/src/main/resources/logback.xml rename to example-sql-annotation/src/main/resources/logback.xml diff --git a/dao-style-text/src/test/java/example/dao_style_text/DeleteTest.java b/example-sql-annotation/src/test/java/example/sql/annotation/DeleteTest.java similarity index 81% rename from dao-style-text/src/test/java/example/dao_style_text/DeleteTest.java rename to example-sql-annotation/src/test/java/example/sql/annotation/DeleteTest.java index a334ab68..0d9133f2 100644 --- a/dao-style-text/src/test/java/example/dao_style_text/DeleteTest.java +++ b/example-sql-annotation/src/test/java/example/sql/annotation/DeleteTest.java @@ -1,9 +1,8 @@ -package example.dao_style_text; +package example.sql.annotation; import static org.junit.jupiter.api.Assertions.assertEquals; -import example.dao_style_text.dao.EmployeeDao; -import example.dao_style_text.dao.EmployeeDaoImpl; +import example.common.test.TestEnvironment; import java.util.Objects; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/dao-style-text/src/test/java/example/dao_style_text/InsertTest.java b/example-sql-annotation/src/test/java/example/sql/annotation/InsertTest.java similarity index 73% rename from dao-style-text/src/test/java/example/dao_style_text/InsertTest.java rename to example-sql-annotation/src/test/java/example/sql/annotation/InsertTest.java index 2f0d5764..06c258c2 100644 --- a/dao-style-text/src/test/java/example/dao_style_text/InsertTest.java +++ b/example-sql-annotation/src/test/java/example/sql/annotation/InsertTest.java @@ -1,13 +1,12 @@ -package example.dao_style_text; +package example.sql.annotation; import static org.junit.jupiter.api.Assertions.assertEquals; -import example.dao_style_text.dao.EmployeeDao; -import example.dao_style_text.dao.EmployeeDaoImpl; -import example.dao_style_text.domain.Age; -import example.dao_style_text.domain.Salary; -import example.dao_style_text.entity.Employee; -import example.dao_style_text.entity.JobType; +import example.common.domain.Age; +import example.common.domain.Salary; +import example.common.entity.Employee; +import example.common.entity.JobType; +import example.common.test.TestEnvironment; import java.time.LocalDateTime; import java.util.Objects; import org.junit.jupiter.api.Test; diff --git a/example-sql-annotation/src/test/java/example/sql/annotation/SelectAggregateTest.java b/example-sql-annotation/src/test/java/example/sql/annotation/SelectAggregateTest.java new file mode 100644 index 00000000..309458ed --- /dev/null +++ b/example-sql-annotation/src/test/java/example/sql/annotation/SelectAggregateTest.java @@ -0,0 +1,84 @@ +package example.sql.annotation; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import example.common.entity.OrderItem; +import example.common.entity.Product; +import example.common.test.TestEnvironment; +import java.math.BigDecimal; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.seasar.doma.jdbc.Config; + +@ExtendWith(TestEnvironment.class) +public class SelectAggregateTest { + + @Test + public void selectOrderAggregate(Config config) { + OrderDao dao = new OrderDaoImpl(config); + var order = dao.selectById(2); + + assertNotNull(order); + assertEquals("Shipped", order.status); + + assertNotNull(order.payment); + assertEquals(new BigDecimal("1398.98"), order.payment.amount); + + assertNotNull(order.user); + assertEquals("Bob", order.user.name); + + assertEquals(1, order.orderItemList.size()); + OrderItem orderItem = order.orderItemList.get(0); + assertEquals(order, orderItem.order); + assertEquals(2, orderItem.quantity); + + Product product = orderItem.product; + assertNotNull(product); + assertEquals("Smartphone", product.name); + + assertEquals(2, product.categoryList.size()); + List categoryNames = product.categoryList.stream().map(c -> c.name).toList(); + assertTrue(categoryNames.contains("Electronics")); + assertTrue(categoryNames.contains("Gadgets")); + } + + @Test + public void selectReviewAggregate(Config config) { + ReviewDao dao = new ReviewDaoImpl(config); + var reviewList = dao.selectAll(); + assertEquals(3, reviewList.size()); + { + var review = reviewList.get(0); + assertNotNull(review); + var user = review.user; + assertNotNull(user); + assertEquals("Alice", user.name); + var product = review.product; + assertNotNull(product); + assertEquals("Laptop", product.name); + } + { + var review = reviewList.get(1); + assertNotNull(review); + var user = review.user; + assertNotNull(user); + assertEquals("Bob", user.name); + var product = review.product; + assertNotNull(product); + assertEquals("Smartphone", product.name); + } + { + var review = reviewList.get(2); + assertNotNull(review); + var user = review.user; + assertNotNull(user); + assertEquals("Charlie", user.name); + var product = review.product; + assertNotNull(product); + assertEquals("Tablet", product.name); + } + } +} diff --git a/dao-style-text/src/test/java/example/dao_style_text/SelectTest.java b/example-sql-annotation/src/test/java/example/sql/annotation/SelectTest.java similarity index 92% rename from dao-style-text/src/test/java/example/dao_style_text/SelectTest.java rename to example-sql-annotation/src/test/java/example/sql/annotation/SelectTest.java index c2171287..a0a86b7d 100644 --- a/dao-style-text/src/test/java/example/dao_style_text/SelectTest.java +++ b/example-sql-annotation/src/test/java/example/sql/annotation/SelectTest.java @@ -1,15 +1,14 @@ -package example.dao_style_text; +package example.sql.annotation; import static java.util.stream.Collectors.*; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import example.dao_style_text.dao.EmployeeDao; -import example.dao_style_text.dao.EmployeeDaoImpl; -import example.dao_style_text.domain.Age; -import example.dao_style_text.domain.Salary; -import example.dao_style_text.entity.Department; -import example.dao_style_text.entity.Employee; +import example.common.domain.Age; +import example.common.domain.Salary; +import example.common.entity.Department; +import example.common.entity.Employee; +import example.common.test.TestEnvironment; import java.sql.Timestamp; import java.util.List; import java.util.Objects; @@ -142,7 +141,7 @@ public void testStream() { s.map(Employee::getSalary) .filter(Objects::nonNull) .reduce(new Salary(0), Salary::add)); - assertEquals(Integer.valueOf(21975), sum.getValue()); + assertEquals(Integer.valueOf(21975), sum.value()); } @Test diff --git a/dao-style-text/src/test/java/example/dao_style_text/UpdateTest.java b/example-sql-annotation/src/test/java/example/sql/annotation/UpdateTest.java similarity index 78% rename from dao-style-text/src/test/java/example/dao_style_text/UpdateTest.java rename to example-sql-annotation/src/test/java/example/sql/annotation/UpdateTest.java index 8c87b9dd..95067085 100644 --- a/dao-style-text/src/test/java/example/dao_style_text/UpdateTest.java +++ b/example-sql-annotation/src/test/java/example/sql/annotation/UpdateTest.java @@ -1,10 +1,9 @@ -package example.dao_style_text; +package example.sql.annotation; import static org.junit.jupiter.api.Assertions.assertEquals; -import example.dao_style_text.dao.EmployeeDao; -import example.dao_style_text.dao.EmployeeDaoImpl; -import example.dao_style_text.entity.JobType; +import example.common.entity.JobType; +import example.common.test.TestEnvironment; import java.util.Objects; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/example-sql-file/.gitignore b/example-sql-file/.gitignore new file mode 100644 index 00000000..b01581f4 --- /dev/null +++ b/example-sql-file/.gitignore @@ -0,0 +1,13 @@ +.classpath +.factorypath +.project +.settings +/.apt_generated +/bin +/build +.gradle +.idea +out +/.apt_generated_tests/ +.vscode +.sdkmanrc diff --git a/dsl-style-java/build.gradle.kts b/example-sql-file/build.gradle.kts similarity index 53% rename from dsl-style-java/build.gradle.kts rename to example-sql-file/build.gradle.kts index c572e6a0..8b415dd6 100644 --- a/dsl-style-java/build.gradle.kts +++ b/example-sql-file/build.gradle.kts @@ -7,7 +7,12 @@ tasks { val aptOptions = extensions.getByType() aptOptions.processorArgs = mapOf( - "doma.domain.converters" to "example.dsl_style_java.domain.DomainConverterProvider", + "doma.domain.converters" to "example.common.domain.DomainConverterProvider", ) } } + +dependencies { + implementation(project(":common")) + testImplementation(project(":common-test")) +} diff --git a/dao-style-file/src/main/java/example/dao_style_file/dao/EmployeeDao.java b/example-sql-file/src/main/java/example/sql/file/dao/EmployeeDao.java similarity index 90% rename from dao-style-file/src/main/java/example/dao_style_file/dao/EmployeeDao.java rename to example-sql-file/src/main/java/example/sql/file/dao/EmployeeDao.java index 5987c699..1f877d7d 100644 --- a/dao-style-file/src/main/java/example/dao_style_file/dao/EmployeeDao.java +++ b/example-sql-file/src/main/java/example/sql/file/dao/EmployeeDao.java @@ -1,9 +1,9 @@ -package example.dao_style_file.dao; +package example.sql.file.dao; -import example.dao_style_file.domain.Age; -import example.dao_style_file.domain.Salary; -import example.dao_style_file.entity.Department; -import example.dao_style_file.entity.Employee; +import example.common.domain.Age; +import example.common.domain.Salary; +import example.common.entity.Department; +import example.common.entity.Employee; import java.time.LocalDateTime; import java.util.List; import java.util.function.BiFunction; diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/delete.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/delete.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/delete.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/delete.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/insert.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/insert.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/insert.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/insert.sql diff --git a/dao-style-basic/src/main/resources/META-INF/example/dao_style_basic/dao/EmployeeDao/selectAll.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectAll.sql similarity index 100% rename from dao-style-basic/src/main/resources/META-INF/example/dao_style_basic/dao/EmployeeDao/selectAll.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectAll.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectAllEmployeeDepartment.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectAllEmployeeDepartment.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectAllEmployeeDepartment.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectAllEmployeeDepartment.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByAge.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByAge.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByAge.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByAge.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByAgeRange.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByAgeRange.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByAgeRange.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByAgeRange.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByAges.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByAges.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByAges.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByAges.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByExample.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByExample.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByExample.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByExample.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByHiredateRange.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByHiredateRange.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByHiredateRange.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByHiredateRange.sql diff --git a/dao-style-basic/src/main/resources/META-INF/example/dao_style_basic/dao/EmployeeDao/selectById.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectById.sql similarity index 100% rename from dao-style-basic/src/main/resources/META-INF/example/dao_style_basic/dao/EmployeeDao/selectById.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectById.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByName.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByName.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByName.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByName.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByNameWithInfixMatching.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByNameWithInfixMatching.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByNameWithInfixMatching.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByNameWithInfixMatching.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByNameWithPrefixMatching.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByNameWithPrefixMatching.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByNameWithPrefixMatching.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByNameWithPrefixMatching.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByNameWithSuffixMatching.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByNameWithSuffixMatching.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByNameWithSuffixMatching.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByNameWithSuffixMatching.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByNames.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByNames.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByNames.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByNames.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByNotEmptyName.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByNotEmptyName.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectByNotEmptyName.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectByNotEmptyName.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectBySalary.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectBySalary.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectBySalary.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectBySalary.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectSummedSalary.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectSummedSalary.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/selectSummedSalary.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/selectSummedSalary.sql diff --git a/dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/update.sql b/example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/update.sql similarity index 100% rename from dao-style-file/src/main/resources/META-INF/example/dao_style_file/dao/EmployeeDao/update.sql rename to example-sql-file/src/main/resources/META-INF/example/sql/file/dao/EmployeeDao/update.sql diff --git a/dsl-style-java/src/main/resources/logback.xml b/example-sql-file/src/main/resources/logback.xml similarity index 100% rename from dsl-style-java/src/main/resources/logback.xml rename to example-sql-file/src/main/resources/logback.xml diff --git a/dao-style-basic/src/test/java/example/dao_style_basic/dao/DeleteTest.java b/example-sql-file/src/test/java/example/sql/file/DeleteTest.java similarity index 74% rename from dao-style-basic/src/test/java/example/dao_style_basic/dao/DeleteTest.java rename to example-sql-file/src/test/java/example/sql/file/DeleteTest.java index b3162de1..7612b59a 100644 --- a/dao-style-basic/src/test/java/example/dao_style_basic/dao/DeleteTest.java +++ b/example-sql-file/src/test/java/example/sql/file/DeleteTest.java @@ -1,8 +1,11 @@ -package example.dao_style_basic.dao; +package example.sql.file; import static org.junit.jupiter.api.Assertions.assertEquals; -import example.dao_style_basic.entity.Employee; +import example.common.entity.Employee; +import example.common.test.TestEnvironment; +import example.sql.file.dao.EmployeeDao; +import example.sql.file.dao.EmployeeDaoImpl; import java.util.Objects; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/dao-style-file/src/test/java/example/dao_style_file/InsertTest.java b/example-sql-file/src/test/java/example/sql/file/InsertTest.java similarity index 73% rename from dao-style-file/src/test/java/example/dao_style_file/InsertTest.java rename to example-sql-file/src/test/java/example/sql/file/InsertTest.java index 693170a2..33337eb9 100644 --- a/dao-style-file/src/test/java/example/dao_style_file/InsertTest.java +++ b/example-sql-file/src/test/java/example/sql/file/InsertTest.java @@ -1,13 +1,14 @@ -package example.dao_style_file; +package example.sql.file; import static org.junit.jupiter.api.Assertions.assertEquals; -import example.dao_style_file.dao.EmployeeDao; -import example.dao_style_file.dao.EmployeeDaoImpl; -import example.dao_style_file.domain.Age; -import example.dao_style_file.domain.Salary; -import example.dao_style_file.entity.Employee; -import example.dao_style_file.entity.JobType; +import example.common.domain.Age; +import example.common.domain.Salary; +import example.common.entity.Employee; +import example.common.entity.JobType; +import example.common.test.TestEnvironment; +import example.sql.file.dao.EmployeeDao; +import example.sql.file.dao.EmployeeDaoImpl; import java.time.LocalDateTime; import java.util.Objects; import org.junit.jupiter.api.Test; diff --git a/dao-style-file/src/test/java/example/dao_style_file/SelectTest.java b/example-sql-file/src/test/java/example/sql/file/SelectTest.java similarity index 92% rename from dao-style-file/src/test/java/example/dao_style_file/SelectTest.java rename to example-sql-file/src/test/java/example/sql/file/SelectTest.java index f0692d66..aeecab04 100644 --- a/dao-style-file/src/test/java/example/dao_style_file/SelectTest.java +++ b/example-sql-file/src/test/java/example/sql/file/SelectTest.java @@ -1,15 +1,16 @@ -package example.dao_style_file; +package example.sql.file; import static java.util.stream.Collectors.toList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import example.dao_style_file.dao.EmployeeDao; -import example.dao_style_file.dao.EmployeeDaoImpl; -import example.dao_style_file.domain.Age; -import example.dao_style_file.domain.Salary; -import example.dao_style_file.entity.Department; -import example.dao_style_file.entity.Employee; +import example.common.domain.Age; +import example.common.domain.Salary; +import example.common.entity.Department; +import example.common.entity.Employee; +import example.common.test.TestEnvironment; +import example.sql.file.dao.EmployeeDao; +import example.sql.file.dao.EmployeeDaoImpl; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; @@ -143,7 +144,7 @@ public void testStream() { s.map(Employee::getSalary) .filter(Objects::nonNull) .reduce(new Salary(0), Salary::add)); - assertEquals(Integer.valueOf(21975), sum.getValue()); + assertEquals(Integer.valueOf(21975), sum.value()); } @Test diff --git a/dao-style-file/src/test/java/example/dao_style_file/UpdateTest.java b/example-sql-file/src/test/java/example/sql/file/UpdateTest.java similarity index 73% rename from dao-style-file/src/test/java/example/dao_style_file/UpdateTest.java rename to example-sql-file/src/test/java/example/sql/file/UpdateTest.java index 1bca5f26..8c2f2053 100644 --- a/dao-style-file/src/test/java/example/dao_style_file/UpdateTest.java +++ b/example-sql-file/src/test/java/example/sql/file/UpdateTest.java @@ -1,11 +1,12 @@ -package example.dao_style_file; +package example.sql.file; import static org.junit.jupiter.api.Assertions.assertEquals; -import example.dao_style_file.dao.EmployeeDao; -import example.dao_style_file.dao.EmployeeDaoImpl; -import example.dao_style_file.entity.Employee; -import example.dao_style_file.entity.JobType; +import example.common.entity.Employee; +import example.common.entity.JobType; +import example.common.test.TestEnvironment; +import example.sql.file.dao.EmployeeDao; +import example.sql.file.dao.EmployeeDaoImpl; import java.util.Objects; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/jpms-java/src/main/resources/META-INF/example/jpms_java/dao/ScriptDao/create.script b/jpms-java/src/main/resources/META-INF/example/jpms_java/dao/ScriptDao/create.script deleted file mode 100644 index e0427f99..00000000 --- a/jpms-java/src/main/resources/META-INF/example/jpms_java/dao/ScriptDao/create.script +++ /dev/null @@ -1,20 +0,0 @@ -create sequence employee_seq start with 100 increment by 1; -create table department (id integer not null primary key,name varchar(255) not null, version integer not null); -create table employee (id integer not null primary key,name varchar(255) not null,age integer not null,salary integer,job_type varchar(20),hiredate timestamp, department_id integer, version integer not null, insertTimestamp timestamp, updateTimestamp timestamp); -insert into department values(1,'ACCOUNTING',1); -insert into department values(2,'RESEARCH',1); -insert into department values(3,'SALES',1); -insert into employee values(1,'ALLEN',30,1600,'SALESMAN','2008-01-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(2,'WARD',32,1250,'ANALYST','2008-02-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(3,'JONES',38,2975,'MANAGER','2008-03-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(4,'MARTIN',40,1250,'SALESMAN','2008-04-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(5,'BLAKE',50,2850,'SALESMAN','2008-05-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(6,'CLARK',23,2450,'MANAGER','2008-06-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(7,'SCOTT',28,3000,'SALESMAN','2008-07-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(8,'KING',38,5000,'CLERK','2008-08-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(9,'TURNER',33,1500,'ANALYST','2008-09-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(10,'ADAMS',62,1100,'SALESMAN','2008-10-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(11,'JAMES',44,950,'CLERK','2008-11-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); -insert into employee values(12,'FORD',55,3000,'ANALYST','2008-12-20 12:34:56',3,1,CURRENT_TIMESTAMP,null); -insert into employee values(13,'MILLER',51,1300,'MANAGER','2009-01-20 12:34:56',1,1,CURRENT_TIMESTAMP,null); -insert into employee values(14,'SMITH',410,800,'PRESIDENT','2009-02-20 12:34:56',2,1,CURRENT_TIMESTAMP,null); diff --git a/jpms-java/src/main/resources/META-INF/example/jpms_java/dao/ScriptDao/drop.script b/jpms-java/src/main/resources/META-INF/example/jpms_java/dao/ScriptDao/drop.script deleted file mode 100644 index 87f8d3a2..00000000 --- a/jpms-java/src/main/resources/META-INF/example/jpms_java/dao/ScriptDao/drop.script +++ /dev/null @@ -1,3 +0,0 @@ -drop sequence employee_seq; -drop table employee; -drop table department; diff --git a/jpms-java/src/main/resources/logback.xml b/jpms-java/src/main/resources/logback.xml deleted file mode 100644 index b9f60d32..00000000 --- a/jpms-java/src/main/resources/logback.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - - - \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 55b535e0..3be78f35 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,6 +1,7 @@ rootProject.name = "simple-examples" -include("dao-style-basic") -include("dao-style-file") -include("dao-style-text") -include("dsl-style-java") -include("jpms-java") +include("example-sql-file") +include("example-sql-annotation") +include("example-criteria") +include("example-jpms") +include("common") +include("common-test")