[개발] Spring 과정
//데이터베이스 생성
create databases test;
create users;
cerate user '#{데이터베이스 계정아이디}'@'%' identified '#{데이터베이스 계정 비밀번호}';

//환경설정
applicationContext.xml
	jndi
	transction
		annotaion 설정
			-- rollbakc 처리; 3개처리중 2개성공 1 이상있을때
	sqlSessionFactory
		db connection
		mybatisConfig.xml route
		mapper route
	sqlSession
		
			
//root-context.xml에 설정해주기		
xmlns:tx= "http://www.springframework.org/schema/tx"
xmlns:jndi= "http://www.springframework.org/schema/jee"

//jndi설정 = 서버측 WAS(tomcat)에서 데이터베이스를 관리해주겠다.
<jndi:jndi-lookup jndi-name="jdbc/test" resource-ref ="true" id ="dataSourceNm">
    
//transcation 설정
<bean id ="txManagerDB" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSourve" ref ="dataSourceNm" />
</bean>
<tx:annotation-driven transaction-manager="txManagerDb" />
    
    
//server -> tomcat #{버전} -> server.xml -> context안에 설정
 <Resource auth="Container" 
	driverClassName="com.mysql.cj.jdbc.Driver" name="jdbc/text"
	username="#{데이터베이스 계정ID}"
    password="#{데이터베이스 계정PW}"
	type="javax.sql.DataSource"
	url="jdbc:mysql://127.0.0.1:3306/#{데이터베이스이름}?serverTimezone=UTC">

Spring 과정

로그인 처리 방법

  1. 컨트롤러 -> view를 통해 데이터 받아오기
    1. 비동기 방식일때 @RsponseBody 적어준다.
  2. 비동기식으로 중복체크 == 값을 줌;

  3. 숫자 반환으로 case를 나누어 처리한다.

    • 0001 - 비밀번호 틀림
    • 0002 - 일치하는 아이디 없음
    • 0003 - 5번 비밀번호 틀림(계정 비활성화)
    • 0009 - 로그인 성공–> 계정 세션에 담기

AJAX 방식 3가지

  1. SERIALIZE 해서 객체로 받기
  2. JSON객체를 만들어서 주고받기
  3. FORM태그로해서 주고받기

session

@ResponseBody  //ajax통신시 추가
@RequestMapping(value = "/loginChk", method = RequestMethod.POST)
public void Method(HttpServletRequest request, HttpServletResponse response, UserVO vo){
    //세션 유지시간 -> 파라미터(초단위)
    request.getSession().setMaxInactiveInterval(6000);
    //세션 추가
    request.getSession().setAttribute("userInfo", user);
    //세션 제거
    request.getSession().removeAttribute("userInfo");
    //세션 가져오기
    UserVO user = request.getSession().getAttribute("userInfo")
}


//httpSession과 다른점은?

Mapper.xml = Query문 처리

${}  = Statement

- 쿼리를 값이 매핑으로 인식
- String 연산자로 '+' 이어 붙임
- 그때그때마다 컴파일한다
ex) (테이블명같이 변동이 안되는곳에 사용)
	SELECT * FROM ${user};이면
	-> SELECT * FROM users이렇게 고정되어 보낸진다.

#{}  = PreparedStatement (Statement 자식)

- 쿼리가 ? 인식
- 쿼리를 db 보내면 한번만 컴파일하는데 메모리에 올려놈(재사용가능하다)
- statement보다 더유리함
ex) SELECT * FROM ${user};이면
	-> SELECT * FROM ?  인식한다.

사진업로드

Transactional

@Transactional
public static void function{
	....
}

sqlSession Batch처리

try catch

제약조건삭제(mysql)

### 제약조건확인
select * from information_schema.table_constraints where information_schema.table_constraints.table_schema = "#{dbName}";

### 제약조건 삭제
ALTER TABLE #{table} DROP CONSTRAINT #{제약조건삭제};

table 내용날리기

##헷갈리지말자!!

##테이블 안에 데이터초기화
delete from #{table명};

##테이블삭제
truncate table users;

##테이블삭제
drop table users;

두 table을 join해서 출력하고싶을때

  1. mapper에서 조인하고 vo에서 필요한 부분만 변수를 두어서 객체로 관리한다.
    • ex) user와 board의 객체의 연결되는 객체를 얻고싶을 때!
  2. vo끼리 서로 상속(extends) 받으면된다,