From 4f81cb0447e01df7cd4389e5bcf953111b3194a0 Mon Sep 17 00:00:00 2001 From: hylee Date: Tue, 25 Apr 2023 10:56:34 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20Idgen=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itn/mjonApi/cmn/context/ContextIdgen.java | 41 +++++++++ .../mjonApi/cmn/idgen/mapper/IdgenMapper.java | 8 +- .../cmn/idgen/mapper/domain/IdgenVO.java | 14 +--- .../cmn/idgen/service/IdgenService.java | 16 ++++ .../idgen/service/impl/IdgenServiceImpl.java | 84 +++++++++++++++++++ .../mjon/member/mapper/MyMsgMapper.java | 34 ++++---- .../service/impl/MemberServiceImpl.java | 3 +- src/main/resources/application.properties | 4 + .../mapper/{ => member}/MyMsgMapper.xml | 26 +++--- 9 files changed, 186 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/itn/mjonApi/cmn/context/ContextIdgen.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/idgen/service/IdgenService.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/idgen/service/impl/IdgenServiceImpl.java rename src/main/resources/mapper/{ => member}/MyMsgMapper.xml (96%) diff --git a/src/main/java/com/itn/mjonApi/cmn/context/ContextIdgen.java b/src/main/java/com/itn/mjonApi/cmn/context/ContextIdgen.java new file mode 100644 index 0000000..1e5ed6b --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/context/ContextIdgen.java @@ -0,0 +1,41 @@ +package com.itn.mjonApi.cmn.context; + +import com.itn.mjonApi.cmn.idgen.service.impl.IdgenServiceImpl; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * packageName : com.itn.mjonApi.cmn.context + * fileName : ContextIdgen + * author : hylee + * date : 2023-04-24 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-04-24 hylee 최초 생성 + * + * + * ==사용 방법== + * - 사용할 class에 아래(예시)와 같이 추가하여 testApi.getNextStringId(); 와 같이 호출하면 됨 + * @Resource(name = "testApi") + * private IdgenService testApi; + * + */ +@Configuration +public class ContextIdgen { + /* + * 예시 testApi + * */ + @Bean(name="testApi") + public IdgenServiceImpl testApi(){ + IdgenServiceImpl idgenServiceImpl = new IdgenServiceImpl(); + idgenServiceImpl.setCipers(11); // cipers: prefix를 제외한 아이디의 길이 지정 + idgenServiceImpl.setFillChar('0'); // fillChar: 0을 대신하여 표현되는 문자 + idgenServiceImpl.setPrefix("TESTAPI_ID_"); // prefix: 아이디의 앞에 고정적으로 붙이고자 하는 설정값 지정 + idgenServiceImpl.setTableName("TESTAPI"); // tableName - dataSoure 에 설정된 DB에 SEQ 테이블에 tableName 컬럼에 참조할 값 + return idgenServiceImpl; + } + + +} diff --git a/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/IdgenMapper.java b/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/IdgenMapper.java index efcb300..5041e9b 100644 --- a/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/IdgenMapper.java +++ b/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/IdgenMapper.java @@ -1,6 +1,7 @@ package com.itn.mjonApi.cmn.idgen.mapper; import com.itn.mjonApi.cmn.idgen.mapper.domain.IdgenVO; +import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @@ -9,6 +10,9 @@ import java.util.List; @Mapper public interface IdgenMapper { -// @Select("select * from ids") - List findByTableName(String tableName); + @Select("select * from ids where TABLE_NAME = #{tableName}") + IdgenVO findByTableName(String tableName); + + @Insert("INSERT INTO IDS VALUES (#{tableName}, #{nextId}) ON DUPLICATE KEY UPDATE NEXT_ID=#{nextId}") + void save(IdgenVO idgenVO); } diff --git a/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/IdgenVO.java b/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/IdgenVO.java index 0e3baca..a456a6b 100644 --- a/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/IdgenVO.java +++ b/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/IdgenVO.java @@ -15,16 +15,8 @@ import java.io.Serializable; public class IdgenVO implements Serializable { private static final long serialVersionUID = -7865729705175845268L; - private Integer msgId; /*auto_increment comment '문자 고유아이디' primary key*/ - private String mberId; /*comment '회원 아이디'*/ - private String esntlId; /*null comment '회원고유 아이디'*/ - private String subject; /*null comment '문자 제목'*/ - private String smsTxt; /*null comment '문자 내용'*/ - private String smsLen; /*null comment '문자 길이'*/ - private String atchFileId1; /*null comment '첨부파일번호'*/ - private String atchFileId2; /*null comment '첨부파일번호'*/ - private String atchFileId3; /*null comment '첨부파일번호'*/ - private String regdate; /*null comment '등록일자'*/ - private String msgType; /*default 'S' null comment '문자종류'*/ + + private String tableName; + private int nextId; } diff --git a/src/main/java/com/itn/mjonApi/cmn/idgen/service/IdgenService.java b/src/main/java/com/itn/mjonApi/cmn/idgen/service/IdgenService.java new file mode 100644 index 0000000..fbf2943 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/idgen/service/IdgenService.java @@ -0,0 +1,16 @@ +package com.itn.mjonApi.cmn.idgen.service; + +/** + * packageName : com.itn.mjonApi.cmn.idgen.service + * fileName : IdgenService + * author : hylee + * date : 2023-04-24 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-04-24 hylee 최초 생성 + */ +public interface IdgenService { + public String getNextStringId(); +} diff --git a/src/main/java/com/itn/mjonApi/cmn/idgen/service/impl/IdgenServiceImpl.java b/src/main/java/com/itn/mjonApi/cmn/idgen/service/impl/IdgenServiceImpl.java new file mode 100644 index 0000000..e09546c --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/idgen/service/impl/IdgenServiceImpl.java @@ -0,0 +1,84 @@ +package com.itn.mjonApi.cmn.idgen.service.impl; + +import com.itn.mjonApi.cmn.idgen.mapper.IdgenMapper; +import com.itn.mjonApi.cmn.idgen.mapper.domain.IdgenVO; +import com.itn.mjonApi.cmn.idgen.service.IdgenService; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * packageName : com.itn.mjonApi.cmn.context + * fileName : ContextIdgen + * author : hylee + * date : 2023-04-24 + * description : 전자정부 IDS 구현 + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-04-24 hylee 최초 생성 + */ +@Slf4j +@Setter +public class IdgenServiceImpl implements IdgenService { + + private String prefix; + private int cipers; + private char fillChar; + private String tableName; + + @Autowired + private IdgenMapper idgenMapper; + + + @Override + public String getNextStringId() { + + String prefixTemp = prefix; + + // 기존에 있는 tableName인지 확인 + IdgenVO idgenVO = idgenMapper.findByTableName(tableName); + + // select 한 idgen이 없으면 초기 셋팅 + if(idgenVO == null){ + idgenVO = new IdgenVO(); + idgenVO.setNextId(1); + idgenVO.setTableName(tableName); + }else{ + // select 한 idgen이 있으면 +1 + idgenVO.setNextId(idgenVO.getNextId()+1); + } + + // nextId를 제외한 String 만들기 + prefixTemp = this.getMakeNextIdFirstString(prefixTemp, idgenVO); + + // upsert 쿼리 실행 + idgenMapper.save(idgenVO); + + // nextId 값 만들기 + String nextId = prefixTemp + String.valueOf(idgenVO.getNextId()); + + log.info(" userId : [{}]", nextId); + return nextId; + } + + /** + * + * @param prefixTemp + * @param idgenVO + * @author hylee + * @discription nextId를 제외한 String 만들기 + * @date 2023-04-24 + * @return + */ + private String getMakeNextIdFirstString(String prefixTemp, IdgenVO idgenVO) { + // fillChar 값이 들어갈 자리값 계산 + int fillCharSize = cipers - (int)(Math.log10(idgenVO.getNextId())+1); + // prefix와 NextId를 제외한 자리에 fillchar값 넣기 + for(int i=0; i findAll(); - - @Select("select * from MJ_MYMSG") - List findAll_2(); -} +package com.itn.mjonApi.mjon.member.mapper; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.IdgenVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +@Mapper +public interface MyMsgMapper { + + /**/ + List findAll(); + + @Select("select * from MJ_MYMSG") + List findAll_2(); +} diff --git a/src/main/java/com/itn/mjonApi/mjon/member/service/impl/MemberServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/member/service/impl/MemberServiceImpl.java index a8652af..c68ef2d 100644 --- a/src/main/java/com/itn/mjonApi/mjon/member/service/impl/MemberServiceImpl.java +++ b/src/main/java/com/itn/mjonApi/mjon/member/service/impl/MemberServiceImpl.java @@ -1,5 +1,6 @@ package com.itn.mjonApi.mjon.member.service.impl; +import com.itn.mjonApi.cmn.idgen.service.IdgenService; import com.itn.mjonApi.cmn.msg.RestResponse; import com.itn.mjonApi.mjon.member.mapper.MyMsgMapper; import com.itn.mjonApi.cmn.idgen.mapper.domain.IdgenVO; @@ -8,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; @@ -17,7 +19,6 @@ public class MemberServiceImpl implements MemberService { @Autowired MyMsgMapper myMsgMapper; - @Override public RestResponse findAll() { List MyMsgListVO = myMsgMapper.findAll(); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 99f4e71..f05530d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -14,3 +14,7 @@ logging.level.jdbc.sqltiming=info logging.level.jdbc.audit=off logging.level.jdbc.resultset=off logging.level.jdbc.resultsettable=off + + +spring.devtools.restart.enabled=true +spring.devtools.livereload.enabled=true diff --git a/src/main/resources/mapper/MyMsgMapper.xml b/src/main/resources/mapper/member/MyMsgMapper.xml similarity index 96% rename from src/main/resources/mapper/MyMsgMapper.xml rename to src/main/resources/mapper/member/MyMsgMapper.xml index 10a435f..d8515af 100644 --- a/src/main/resources/mapper/MyMsgMapper.xml +++ b/src/main/resources/mapper/member/MyMsgMapper.xml @@ -1,14 +1,14 @@ - - - - - - - - + + + + + + + + \ No newline at end of file