[Capstone]동적 table구현

📖2022.04.13

1. 동아리 생성페이지에서 동아리 등록

2. 동아리 페이지 생성 후 해당 동아리에 대한 table 동적으로 생성.

1-1 동아리 등록

public class CircleController {

    @Autowired
    @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
    private CircleDAO circleDAO;

    @Autowired
    @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
    private FindDAO findDAO;

    @GetMapping("circle/register/CoCircle")
    public int insertCircle(@RequestBody InputCircleDTO inputCircleDTO
                                                 )throws  Exception{

        FindDTO findDTO = new FindDTO();
        findDTO.setCollege(inputCircleDTO.getCollege());
        findDTO.setInterest(inputCircleDTO.getInterest());
        findDTO.setRegion(inputCircleDTO.getRegion());
        int a = findDAO.findCollegecode(findDTO);
        int b = findDAO.findInterestcode(findDTO);
        final CoCircleDTO param = new CoCircleDTO(0,a,b, inputCircleDTO.getCircle_name(), inputCircleDTO.getPurpose(), null, inputCircleDTO.getUrl());
        circleDAO.createTable(inputCircleDTO.getUrl());
        return circleDAO.insertCoCircle(param);
    }
    @GetMapping("circle/register/UniCircle")
    public int insertUniCircle(@RequestBody InputCircleDTO inputCircleDTO) throws Exception{
        FindDTO findDTO = new FindDTO();
        findDTO.setInterest(inputCircleDTO.getInterest());
        findDTO.setRegion(inputCircleDTO.getRegion());
        int a = findDAO.findInterestcode(findDTO);
        int b = findDAO.findRegioncode(findDTO);
        final UniCircleDTO param = new UniCircleDTO(0,a,b, inputCircleDTO.getCircle_name(), inputCircleDTO.getPurpose(), null, inputCircleDTO.getUrl());
        return circleDAO.insertUniCircle(param);
    }

--> CoCircle과 UniCircle의 차이점은 교내동아리이냐 대외연합동아리이냐 차이임. 따라서 받는 값이 거의 비슷하지만 차CoCircle은 학교를 받고 UniCircle은 지역을 받음

--> InputCircleDTO를 새로 만들어 준 이유는 CoCirleDTO에 학교값,UniCircleDTO에 지역값 은 int형이기 때문에 InputCircleDTO에서 먼저 String으로 받고 메소드 내에서 int형으로 변환 후 입력하기 위함.
(솔직히 효율적인 방법은 아닌거 같은데 다른 방법을 아직은 모르겠음.)

2-1 동아리 생성에서 받은 url을 바탕으로 #{url}_tb라는 새로운 테이블을 만들기

  • index <-- primary key ,auto_increment
  • id <--
  • manage_num (회원등급)
  • user_nickname (회원 닉네임)
  • deleted ='N' (탈퇴했는지 여부)

--> [mybatis] mapper에서 입력받은 url이름_tb라는 테이블을 create문으로 구현하려고 했다.

 <update id="createTable" parameterType="String" >
        CREATE table if not exists ${url}(
            `index` int NOT NULL ,
            `user_id` varchar(45) NULL,
            `manage_num` varchar (45) NULL,
            `user_nickname` varchar (45) NULL,
            `deleted` varchar(1) NULL,
            PRIMARY KEY (`index`))


    </update>

처음에는 #{}값으로 받아서 syntax에러가 떴다.

#{ }
값에 ' '가 자동으로 붙음
PreparedStatement 통해 악의적인 쿼리주입을 예방할 수 있음
보완차원에서 유리
주로 사용자의 입력을 전달할때 사용

$ { }
' '가 자동으로 붙지않음
Statement 방법으로 파라매터가 출력되어서 전달됌
의도적인 쿼리주입을 막을 수 없음
SQL injection 보안 위험 발생 가능
주로 table명 column명 전달시 사용
#{},${}차이

${}로 받으면서 당장의 에러는 해결했지만 SQL injection 보안 위험이 발생 한다고 한다.

SQL injection이란??

좋은 웹페이지 즐겨찾기