⚡ 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>
❓
⚡ 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.javapackage 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.javapackage 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
'CLASS > SPRING,JSTL' 카테고리의 다른 글
#3-2 / coupon delete,update (spring + database) (0) | 2024.07.10 |
---|---|
#3-1 / coupon insert,select (spring + database) (0) | 2024.07.10 |
#2-1 / spring 규칙2, JSTL 사용법 기초 (0) | 2024.07.09 |
#1-2 / @ , spring 규칙1 (0) | 2024.07.08 |
#1-1 / [Spring maven project] start, setting - 70% 세팅완... (0) | 2024.07.08 |