auto_increment - primary key에만 걸 수 있음
mapper에서 insert구문으로 해당 테이블에 값을 입력하면 해당 row에서 primary key 메인키(주요키)로서 auto_increment 설정이 걸려서 따로입력을하지않더라도 값이 일정으로 증가하면서 값을 자동으로 넣어주는데.
해당 값은 입력 후, unique값을 조회하지 않으면 auto_increment가 걸려서 자동으로 입력됐던 값을 알 수가 없음.
mapper에서 insert 후, 해당 값을 가져오는 방법
1. DB에 값을 입력하는 코드들을 짜서 수행한다.
2. mapper.xml에서 DB에 입력할 떄 아래와 같은 사항을 insert구문에 입력해준다
<insert id="insertStudentInfo"
useGeneratedKeys="true" keyProperty="studentInfo.student_id"
parameterType="kr.~~~.~~~.vo.StudentVO">
insert into student
(teacher_student_id, parent_student_phone, student_name, student_zipcode, student_number_address,student_road_address,
student_reference_address, student_detail_address, student_birthdate,
student_school, student_note, student_registration_date, student_gender,
student_phone, student_image_path)
values
(#{teacher_id}, #{studentInfo.parent_student_phone}, #{studentInfo.student_name}, #{studentInfo.student_zipcode}, #{studentInfo.student_number_address},
#{studentInfo.student_road_address}, #{studentInfo.student_reference_address}, #{studentInfo.student_detail_address},
#{studentInfo.stringBirth}, #{studentInfo.student_school}, #{studentInfo.student_note},
#{studentInfo.stringRegister}, #{studentInfo.student_gender},
#{studentInfo.student_phone}, #{studentInfo.student_image_path});
</insert>
insert구문에서 문법을 지키고, 본인이 넣어야할 값들을 알아서 쿼리를 짠 뒤, 아래의 내용을 함께 적어줌
useGeneratedKeys="true"
=> insert구문 수행 뒤, 생성된 키를 다시 받아올 것인지? true
keyProperty="studentInfo.student_id"
=>입력하는 객체의 어떤 값을 받아오려고 하는지 / param을 썼다면 앞에 param.알고자하는 AI걸린 변수명
parameterType="kr.portfolio.forfree.vo.StudentVO"
=> AI걸린변수값을 getter() 메소드를 이용해서 부를 수 있게해주는 객체의 타입
3. insert를 실행시키라는 주문을 하는 클래스(serviceImp)로가서 insert를 실행시킨 이후의 라인에서,
해당 값을 담고있는 객체명.getAI걸렸던변수명(); 을 진행하면 값이 불러와짐. (예: studentInfo.getStudent_id();)
다른건 아무것도 안해도 됨.
@Override
public Integer insertStudentInfo(StudentVO studentInfo, TeacherVO loginUser) {
System.out.println("서비스임프1");
if(loginUser == null) {
return null;
}
if(studentInfo.getStudent_name() == null ||
studentInfo.getStudent_name().trim().length()==0) {
return null;
}
if(studentInfo.getStringBirth().trim().length()==0) {
studentInfo.setStringBirth(null);
}
if(studentInfo.getStringRegister().trim().length()==0) {
studentInfo.setStringRegister(null);
}
studentDao.insertStudentInfo(studentInfo, loginUser.getTeacher_id());
int studentId= studentInfo.getStudent_id();
System.out.println(studentId);
return studentId;
}
4. 만약, 해당 값을 controller로 이동시켜야 한다면?
service, serviceImp, dao 의 해당 코드 선언부의 리턴타입을 AI걸린게 넘어올수있는 타입으로 넣어주면됨.
service
public Integer insertStudentInfo(StudentVO studentInfo, TeacherVO loginUser);
serviceImp
public Integer insertStudentInfo(StudentVO studentInfo, TeacherVO loginUser) {
~~~~~실행코드
studentDao.insertStudentInfo(studentInfo, loginUser.getTeacher_id());
int studentId= studentInfo.getStudent_id();
return studentId;
dao (*돌려받을 값의 타입을 맞춰줘야함. AI걸린 int형식의 고유번호id값을 받을때 int나 Integer로)
Integer insertStudentInfo(
@Param("studentInfo")StudentVO studentInfo, @Param("teacher_id")Integer teacher_id);
controller
Integer newStudentId = studentService.insertStudentInfo(studentInfo, loginUser);
System.out.println("컨트롤러 3 id : "+ newStudentId); //해당값이 콘솔에 출력됨
'괴발개발 > Spring Framework' 카테고리의 다른 글
부트스트랩 focus 해제하기 (0) | 2021.09.16 |
---|---|
이미지 첨부파일 : 첨부파일 이미지 미리보기 (0) | 2021.09.16 |
jsp의 date/month 타입을 스프링controller로 가져올 때 (0) | 2021.09.11 |
에러: Cannot invoke "java.util.Date.getTime()" because "date" is null (0) | 2021.09.11 |
나이 계산(생년월일, 년도, 만 나이) (0) | 2021.09.08 |