diff --git a/src/main/java/cokr/xit/foundation/AbstractEntity.java b/src/main/java/cokr/xit/foundation/AbstractEntity.java
new file mode 100644
index 0000000..81dec31
--- /dev/null
+++ b/src/main/java/cokr/xit/foundation/AbstractEntity.java
@@ -0,0 +1,139 @@
+package cokr.xit.foundation;
+
+/**정보를 데이터베이스 테이블에 저장하는 엔티티(Entity) 클래스들이 상속하는 베이스 클래스.
+ * 상속받는 클래스는 다음 항목들에 대한 정의를 갖는다.
+ *
- 등록자 {@link #getCreatedBy() 아이디} / {@link #getCreatedAt() 일시}
+ * - 수정자 {@link #getModifiedBy() 아이디} / {@link #getLastModified() 일시}
+ * - 제거(삭제)자 {@link #getRemovedBy() 아이디} / {@link #getRemovedAt() 일시}
+ * - {@link #getUseYN() 사용여부}
+ *
+ * 이 중 다음 항목들에 해당하는 컬럼은 필수로 테이블에 정의하고 저장한다.
+ * - 등록자 아이디 / 일시
+ * - 수정자 아이디 / 일시
+ * - 사용여부
+ *
+ * @author mjkhan
+ */
+public abstract class AbstractEntity {
+ private String createdBy;
+ private String createdAt;
+ private String modifiedBy;
+ private String lastModified;
+ private String removedBy;
+ private String removedAt;
+ private String useYN;
+
+ /**등록자 아이디를 반환한다.
+ * @return 등록자 아이디
+ */
+ public String getCreatedBy() {
+ return createdBy;
+ }
+
+ /**등록자 아이디를 설정한다.
+ * @param userID 등록자 아이디
+ */
+ public void setCreatedBy(String userID) {
+ this.createdBy = userID;
+ }
+
+ /**등록일시를 반환한다.
+ * @return 등록일시(yyyyMMddhhmmss)
+ */
+ public String getCreatedAt() {
+ return createdAt;
+ }
+
+ /**등록일시를 설정한다.
+ * @param createAt 등록일시(yyyyMMddhhmmss)
+ */
+ public void setCreatedAt(String createAt) {
+ this.createdAt = createAt;
+ }
+
+ /**수정자 아이디를 반환한다.
+ * @return 수정자 아이디
+ */
+ public String getModifiedBy() {
+ return modifiedBy;
+ }
+
+ /**수정자 아이디를 설정한다.
+ * @param userID 수정자 아이디
+ */
+ public void setModifiedBy(String userID) {
+ this.modifiedBy = userID;
+ }
+
+ /**수정일시를 반환한다.
+ * @return 수정일시(yyyyMMddhhmmss)
+ */
+ public String getLastModified() {
+ return lastModified;
+ }
+
+ /**수정일시를 설정한다.
+ * @param lastModified 수정일시(yyyyMMddhhmmss)
+ */
+ public void setLastModified(String lastModified) {
+ this.lastModified = lastModified;
+ }
+
+ /**제거(삭제)자 아이디를 반환한다.
+ * @return 제거(삭제)자 아이디
+ */
+ public String getRemovedBy() {
+ return removedBy;
+ }
+
+ /**제거(삭제)자 아이디를 설정한다.
+ * @param userID 제거(삭제)자 아이디
+ */
+ public void setRemovedBy(String userID) {
+ this.removedBy = userID;
+ }
+
+ /**제거(삭제)일시를 반환한다.
+ * @return 제거(삭제)일시(yyyyMMddhhmmss)
+ */
+ public String getRemovedAt() {
+ return removedAt;
+ }
+
+ /**제거(삭제)일시를 설정한다.
+ * @param removedAt 제거(삭제)일시(yyyyMMddhhmmss)
+ */
+ public void setRemovedAt(String removedAt) {
+ this.removedAt = removedAt;
+ }
+
+ /**사용여부를 반환한다.
+ * @return 사용여부
+ * - 사용 중이면 true
+ * - 그렇지 않으면 false
+ *
+ */
+ public boolean inUse() {
+ return "Y".equals(getUseYN());
+ }
+
+ /**사용여부를 반환한다.
+ * @return 사용여부
+ * - 사용 중이면 Y
+ * - 그렇지 않으면 N
+ *
+ */
+ public String getUseYN() {
+ return useYN;
+ }
+
+ /**사용여부를 설정한다.
+ * @param useYN 사용여부
+ * - 사용 중이면 Y
+ * - 그렇지 않으면 N
+ *
+ */
+ public void setUseYN(String useYN) {
+ this.useYN = useYN;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/cokr/xit/foundation/User.java b/src/main/java/cokr/xit/foundation/User.java
index 84e1d52..39e880e 100644
--- a/src/main/java/cokr/xit/foundation/User.java
+++ b/src/main/java/cokr/xit/foundation/User.java
@@ -4,7 +4,7 @@ import java.io.Serializable;
/**사용자 정보.
*/
-public class User implements Serializable {
+public class User extends AbstractEntity implements Serializable {
private static final long serialVersionUID = 1L;
private static final String UNKNOWN = "anonymous";
public static final User unknown = new User().seal();
diff --git a/src/main/java/cokr/xit/foundation/component/AbstractDao.java b/src/main/java/cokr/xit/foundation/component/AbstractDao.java
index 59bab3e..0af8d08 100644
--- a/src/main/java/cokr/xit/foundation/component/AbstractDao.java
+++ b/src/main/java/cokr/xit/foundation/component/AbstractDao.java
@@ -132,6 +132,11 @@ public abstract class AbstractDao extends EgovAbstractMapper {
return ApplicationException.get(t);
}
+ /**리스트의 각 row의 필드 이름을 camel case로 변환한다.
+ * @param 리스트 유형
+ * @param list 리스트
+ * @return 리스트
+ */
protected static >> T underscoredToCamelCase(T list) {
if (list.isEmpty())
return list;
diff --git a/src/main/java/cokr/xit/foundation/component/AbstractMapper.java b/src/main/java/cokr/xit/foundation/component/AbstractMapper.java
index 625669e..ec93220 100644
--- a/src/main/java/cokr/xit/foundation/component/AbstractMapper.java
+++ b/src/main/java/cokr/xit/foundation/component/AbstractMapper.java
@@ -8,12 +8,12 @@ import cokr.xit.foundation.data.DataObject;
* 애플리케이션의 매퍼 인터페이스는 이 인터페이스를 상속받아 정의하고,
* 이름은 (업무객체 이름 || 테이블 이름) + 'Mapper'로 한다.
* {@code @Mapper} 어노테이션을 적용하고 카멜 표기법으로 이름을 설정한다. 다음은 그 예다.
- * package cokr.xit.example.business.dao;
+ * package cokr.xit.example.business.dao;
* import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
* {@code @Mapper("tableBMapper")}
* public interface TableBMapper extends AbstractMapper {
* ...
- * }
+ * }
* 매퍼 파일의 작성
* 매퍼 파일은 매퍼 인터페이스가 실행하는 SQL문을 저장한다.
*
- 매퍼 파일의 이름은 매퍼 인터페이스의 이름을 카멜 표기법으로 표시하고, ‘Mapper’를 ‘-mapper‘로 분리한다.
diff --git a/src/main/java/cokr/xit/foundation/component/AbstractServiceBean.java b/src/main/java/cokr/xit/foundation/component/AbstractServiceBean.java
index 5e9b5d3..da06484 100644
--- a/src/main/java/cokr/xit/foundation/component/AbstractServiceBean.java
+++ b/src/main/java/cokr/xit/foundation/component/AbstractServiceBean.java
@@ -20,12 +20,12 @@ import cokr.xit.foundation.UserInfo;
* 애플리케이션의 서비스 구현체는 이 클래스를 상속받아 정의하고, 이름은 '서비스 인터페이스' + 'ServiceBean'으로 한다.
* 그리고 @Service 어노테이션을 명시하고, 카멜 표기법으로 표시한 업무 인터페이스의 이름을 지정한다.
* 다음은 그 예이다.
- *
package cokr.xit.example.business.service.bean;
+ * package cokr.xit.example.business.service.bean;
* ...
* {@code @Service("businessService")}
* public class BusinessServiceBean extends AbstractServiceBean implements BusinessService {
* ...
- * }
+ * }
* 정의한 서비스 구현체는 다음과 같이 @Resource 어노테이션으로 이름을 명시해 주입한다.
* @Resource(name = "businessService")
* BusinessService businessService;