기록
  • 1211 WebServer 4일차
    2023년 12월 11일 16시 07분 14초에 업로드 된 글입니다.
    작성자: 삶은고구마


    명시적 초기화

    clean ->이전에 빌드된 파일을 없앤다.


    module - mybatis 이어서..

     

    모듈 구조

     

    entity 

    멤버 클래스 Member

    enum 클래스 Gender , Role

     

    참고 용 블로그:

    https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%97%B4%EA%B1%B0%ED%98%95Enum-%ED%83%80%EC%9E%85-%EB%AC%B8%EB%B2%95-%ED%99%9C%EC%9A%A9-%EC%A0%95%EB%A6%AC

     

    ☕ 자바 Enum 열거형 타입 문법 & 응용 💯 정리

    Enum 열거 타입 먼저 Enum은 "Enumeration"의 약자다. Enumeration은 "열거, 목록, 일람표" 라는 뜻을 가지고 있으며, 보통 한글로는 열거형이라고 부른다. 즉, 열거형(enum)은 요소, 멤버라 불리는 명명된 값

    inpa.tistory.com

     

    상수 대신 enum을 사용하는 이유

    아이디, 멤버 타입, 성별 필드를 가진 멤버객체를 생성시..

    평소처럼 상수를 사용하면.. 혼용될 가능성이 높다.

    public static final String TPYE = "M"; //MANAGER 의 뜻

    public static final String GENDER = "M";  //MALE 의 뜻 

    해당필드에는 String만 오면 ok인데다가, 

    type과 gender변수는 같은 문자열을 갖고 있으므로 둘의 위치가 바뀌어도 test 시 이상이 없다고 판별된다.

    혹은 엉뚱한 String값이 오거나, 값이 없어도 문제가 없다고 판단할 때도있음. 

     

     

    그럼 언제 enum을 사용할까?

    1.필드값을 좀 더 명확하게 구분하고/사용하고싶을 때.

    2.DB에서 check 제약조건이 걸려있는 경우에 나는 성별 컬럼에 Male / Female만 쓰겠다. 

      할 때.

    그 동안 상수를 사용했는데 앞으로는 enum클래스를 사용해야겠다..

      //상수 변수를 사용하면 전혀 다른 의미로 사용된 변수인데도
        //변수의 값이 같으면 유효성검증에서 이상이 없다 판단
        //
        @Test
        public void test1()
        {
    //        Member member = new Member("sinsa",Gender.M,Gender.F); //컴파일오류
            Member member = new Member("sinsa",Type.M,Gender.F);
            assertThat(member.type).isEqualTo(Type.M);
            assertThat(member.gender).isEqualTo(Gender.F);
    
            Member admin = new Member("damgom",Type.A,Gender.M);
            assertThat(admin.type).isEqualTo(Type.A);
            assertThat(admin.gender).isEqualTo(Gender.M);
        }

     

     

    annotaion - disable 시 해당 코드블럭은 작동하지 않는다.

     @Disabled
        @DisplayName("회원 비밀번호 수정하기")
        @Test
        public void test10()
        {
            String id = "honggd";
            //일단, honggd란 id를 가진 멤버를 조회한다...
            Member member = memberService.findById(id);
    
            //새 패스워드를 해당 멤버 객체에 set한다.
            String newPassword = "9999";
            member.setPassword(newPassword);
    
            int result = memberService.updateMember(member);
            assertThat(result).isGreaterThan(0);
    
            //다시 멤버 조회를 해서 newPassword와 getPassword가 일치하는지 확인.
            Member member2 = memberService.findById(id);
            assertThat(member2.getPassword()).isEqualTo(newPassword);
        }

    결과

     

     

    TestMethodOrder로 Test 순서를 지정 할 수 있다. 

    테스트 할 클래스 상단에 TestMethodOrder를 선언한 후, 

    원하는 순서대로 Order(순번)을 지정해주면 된다.

    @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    public class MemberServiceTest {
    
        MemberService memberService; //test 대상(fixture)
        .
        .
        .
        @Order(1)
        @DisplayName("회원 가입")
        @Test
        public void test7() {
    
            String id = "honggd";
            .
            .
        }
        @Order(2)
        @DisplayName("회원 가입 시 오류 체크")
        @Test
        public void test8() {
    	.
        .

     

    https://effortguy.tistory.com/120

     

    [Java] JUnit 5 사용법 (7) - 테스트 순서 (@TestMethodOrder)

    이번 시간엔 JUnit 5 의 테스트 간 순서를 정하는 방법에 대해 알아보겠습니다. JUnit 5의 테스트 순서 @TestMethodOrder에 쓰여져있는 주석으로 설명드리겠습니다. "@TestMethodOrder가 선언되어있지 않다면

    effortguy.tistory.com

    member-mapper.xml - sql문 작성

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="member">
    <!--    <select id="findById" resultType="com.sh.mybatis.member.model.entity.Member">-->
        <select id="findById" resultType="member">
    
    
    <!--   멀티 라인 가능
           #{id} 전달된 id값으로 치환 java jdbc에선 ?로 사용했었음.
           id="findById" 에서 id는 태그 식별자
           resultType ResultSet이 한행이 변환될 타입 (fullname or alias)
           위에 패키지명까지 합쳐서 풀로 적는게 fullname
           1211
           full name에서 alias로 변경. (config에서 별칭설정해줘야한다)
    -->
            select
                *
            from
                member
            where
                id = #{id}
        </select>
    
        <!--
            1.resultType은 꼭 작성하자.
            2.resultType의 속성은 한 행과 매칭되는 타입을 작성한다.
            3.내가 받고 싶은건 리스트이지만, member 한행 한행이 모여서 list가 되는 것
    
            -->
        <select id="findAll" resultType="member">
            select
            *
            from
                member
            order by
                reg_date desc
    
        </select>
    
    
        <select id="findByName" resultType="member">
            select
            *
            from
                member
            where
                name like '%' ||#{name} ||'%'
    
        </select>
    
        <select id="findByGender" resultType="member">
            select
            *
            from
            member
            where
            gender = #{gender}
        </select>
    
    
        <!--    select문에만 resultType 명시, insert에는 기본이라 안적어도 됨
                insert시 넘어가는건 member객체라 필드값만 적어주면 ok
        -->
        <insert id="insertMember">
            insert into
                member
            values(
                #{id},#{password},#{name},#{role},#{gender},#{birthday},
                #{email},#{phone},#{hobby, typeHandler=ListStringTypeHandler},default,default
            )
        </insert>
    
        <update id = "updateMember">
            update
                member
            set
                name = #{name},
                password = #{password},
                role = #{role},
                gender = #{gender},
                birthday = #{birthday},
                email = #{email},
                phone = #{phone}
            where
                id = #{id}
        </update>
    
        <delete id="deleteMember">
            delete
            from
                member
            where
                id = #{id}
        </delete>
    </mapper>

     

     


    mvc 패턴 연습

    1.모듈 생성

     

     

    2.구조

    오타나서 helloo가 되어버림.

     

     

    3.이번 모듈에서는 header / main(content) / footer 영역을 나눌 수 있다.

     

    예제로 받은 index.jsp를 3등분으로 나누자.

    1.머리를 가져가는 header.jsp 👱🏻‍♀️

    2.몸통을 가진 index.jsp (main) 

    3.다리를 가져간 footer.jsp 🦵🏻

     

    3등분 한 뒤 index.jsp를 확인하면 나누기 전과 동일한 구조로 웹 브라우저에 출력된다.

     

    '공부 > web-server' 카테고리의 다른 글

    1214 WebServer 7일차  (1) 2023.12.14
    1212 WEB SERVER 5일차  (0) 2023.12.12
    1208 WEB SERVER 3일차  (0) 2023.12.08
    1207 WEB SERVER 2일차  (2) 2023.12.07
    1205 정규화&UML  (0) 2023.12.05
    댓글