[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);
}
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 보안 위험이 발생 한다고 한다.
Author And Source
이 문제에 관하여([Capstone]동적 table구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lciminsu/Capstone동적-table구현저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)