본문 바로가기
CLASS/SPRING,JSTL

#2-2 / spring + database 연결,회원가입 JSTL+spring+Datasource

by hingu 2024. 7. 9.
⚡ database 연결에 따른 결과값 출력

* 2가지 방식 => 맘에드는 방식으로 사용^_^
1. XML형태의 DB연결
2. properties+JSTL => spring legacy 프로젝트일 때 사용 , 차후에 진행


XML형태의 DB연결 시 필요한 라이브러리 (필수)   - from) pom.xml
1. mysql-connector-java
2. spring-jdbc : @ 이용하여 resource 형태로 db연결하여 구성
3. commons-dbcp ( dbcp란? Database Connection Pool ) : spring,spring-boot에서만 사용가능
   => 다운법 :  https://dev-eunse.tistory.com/193 의 22번,23번 (mybatis는 해당 예제에서 필요 없음)
        mybatis : java에 DAO + SQL colomn 을 서로 연동하여 사용할수 있는 기능

- mainpage2.java
package webspring;

@Controller
public class mainpage2 {
	
	//Database 연결 => Spring
	@Autowired
	//Database 접속정보 xml 파일 로드 (dbInfo : 우리가 dbconfig.xml에 적은 id)
	BasicDataSource dbInfo; 
	
	@GetMapping("/datalist.do") //jsp 찾음
	public String datalist() {
		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			con = this.dbInfo.getConnection();
			String sql = "select count(*) as ctn from user";
			ps = con.prepareStatement(sql);
			rs = ps.executeQuery();
			rs.next();
			
			System.out.println(rs.getString("ctn")); //data 갯수 출력됨
			
			ps.close();
			rs.close();
			
		}catch(Exception e) {
			System.out.println(e);
			System.out.println("database 접속 오류");
		} //이제 con은 안닫아줘두댐
		
		return null;
	}
    
}


@Autowired 
모든 메소드에 사용할수 있는 객체 및 Bean을 사용할 수 있도록 의존성 여부 실행
딱 한번만 작성
단점
: 외부 class 를 호출하여 Database를 연결하면 오류발생함
: Controller에서만 사용 가능함 (걍 일반 Module에서는 사용 불가 ! )
  - 값을 인자값으로 넘기면 사용 가능함  : https://dev-eunse.tistory.com/198 여기 예제에서 해봄 


- dbconfig.xml (bean 파일에 생성)
WEB-INF안에 beans 파일 생성 - dbconfig.xml : beans, context,mvc,jdbc 모두 최신 버전으로 체크

//~~ 하단에 

<bean id="dbInfo" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="cohttp://m.mysql.cj.jdbc.Driver"></property>
    <property name="url" value="jdbc:mysql://localhost:3306/cms"></property>
    <property name="username" value="hana"></property> //db id
    <property name="password" value="hana1234"></property> //db 비번
</bean>

 

이 db 씀

 

 


⚡ datasource를 이용하여 해당 정보를 db에 insert 
=> 상단에서 setting한 datasource를 이용

-member.jsp
<body>
	<form id="frm" method="post" action="./memberok.do">
		아이디 : <input type="text" name="data"><br>
		패스워드 : <input type="password" name="data"><br>
		이름 : <input type="text" name="data"><br><br>
		<input type="button" value="간편회원가입" onclick="join()">
	</form>
</body>

<script>
function join(){
	frm.submit();
}
</script>


- mainpage2.java

package webspring;

@Controller
public class mainpage2 {	
	/*
	 datasource를 이용하여 해당 정보를 db에 insert 하시오.
	 */
	@RequestMapping(value="/memberok.do",method=RequestMethod.POST)
	public String memberok(String data[]) {
		//모든 name값 동일하게 쓸 경우 단점 : 이름 다 같아서 검토할수가 없음
		System.out.println(data[0]);
		Connection con = null;
		PreparedStatement ps = null;
		
		try {
			con = this.dbInfo.getConnection();
			String sql = "insert into user values ('0',?,?,?,now())";
			ps = con.prepareStatement(sql);
			ps.setString(1, data[0]);
			ps.setString(2, data[1]);
			ps.setString(3, data[2]);
			int result = ps.executeUpdate();
			if(result>0) {
				System.out.println("회원가입 완료");
			}
			
			ps.close();
			
		}catch(Exception e) {
			
		}
		
		return null;
	}

}

=> name값을 배열로 받을 경우(input name값 동일한게 여러개)
     필수로 값을 받겠다라는 어노테이션을 사용하지 못함!  @RequestParam

해당 예제에서 view를 출력하고싶다면? ->  memberok.jsp 를 만들면 댐 

 

🔽

⚡ 위 문제를 dao(getter,setter) 이용  => 짱많이쓰는 방법ㅋ

- member.jsp
<body>
	<form id="frm" method="post" action="./memberok2.do">
		아이디 : <input type="text" name="uid"><br>
		패스워드 : <input type="password" name="upass"><br>
		이름 : <input type="text" name="uname"><br><br>
		<input type="button" value="간편회원가입" onclick="join()">
	</form>
</body>

<script>
function join(){
	frm.submit();
}
</script>

=> name값 database에 있는 필드명이랑 똑같이 맞춤


- member_dao.java 생성
getter,setter : library 사용  - https://dev-eunse.tistory.com/193 21번
package webspring;

import lombok.Getter;
import lombok.Setter;

@Setter
@Getter
public class member_dao {
	int uidx;
	String uid,upass,uname,ujoin;
}

=> getter,setter 사용시  column명만 동일하게 맞춰서 위 member_dao.java 에 추가해주면 됨!!


- mainpage2.java

package webspring;

@Controller
public class mainpage2 {	
	@RequestMapping(value="/memberok2.do",method=RequestMethod.POST)
	public String memberok(@ModelAttribute("mb") member_dao dao) {
		//mb는 그냥 이름 - 아무거나 써도 됨
		
		try {
			Connection con = dbInfo.getConnection();
			String sql = "insert into user values('0',?,?,?,now())";
			
			PreparedStatement ps = con.prepareStatement(sql);
			ps.setString(1, dao.getUid());
			ps.setString(2, dao.getUpass());
			ps.setString(3, dao.getUname());
			
			int result = ps.executeUpdate();
			if(result>0) {
				System.out.println("회원가입 완료");
			}
			
			ps.close();
		}catch(Exception e) {
			System.out.println("database 오류!");
		}		
		
		return null;
	}

}


@ModelAttribute  : dao와 함께 사용하는 형태의 class