일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 스프링 NamedParameterJDBCTemplate
- predestory
- AOP-관점지향프로그래밍
- JSP
- spring mybatis연동
- 스프링
- AOP-관점지향 프로그래밍(Aspect Oriented Programming)
- 스프링 생성자
- #Java
- #스프링 셋팅
- 스프링 데이터베이스
- Spring
- 스프링 의존성주입
- 스프링 mybatiis
- 스프링 의존성
- 스프링 autowired
- 스프링 마이바티스연동
- #데이터 베이스
- #JSP
- 스프링 setter
- srping 데이터베이스연동
- 스프링 데이터베이스연동
- 데이터베이스연동
- 관점지향 프로그래밍
- 스프링 팩토리
- 스프링 DB연동
- #인테리어
- 스프링 마이바티스
- #출처는 페이스북
- JSP-서블릿
- Today
- Total
재미있게 코딩합시다
3. 스프링(Spring) - 데이터베이스와의 연동 본문
일반적인 웹 어플리케이션의 구조.
DB와 연동하기
코딩하는것에 앞서서
프로젝트에 메이븐과 Spring-core,spring-context, spring-jdbc, spring-mysql
을 셋팅을 햇음을 알려드립니다.
java에서 기본 JDBC를 사용하면서 불편했던점..
- PreparedStatement 구문이 편하지만
바인딩 에 대해서 타입, 위치를 개발자가 직접 다 지정해줘야한다.
-ResultSet에서 값을 줏어올때도 타입과 위치를 개발자가 직접세팅을해줘야햇다
-PreparedStatment구문 객체랑 ResultSet객체 사용후 close도 해줘야합니다.
하지만 스프링에서는
Dao가 Connection을 직접 제어하지 않고 Connection을 관리해주는 한단계 높은
응용계층의 객체를 사용합니다. =>> session 입니다.
Spring-JDBC에서는 제공하는
Connection을 관리하는 작업을 대신 해주는
Session 역할을 해주는 객체 :
이름 : jdbTemplate
저역활을 하는 친구들이 Connetction을 어떻게 연결할지에 대한 정보들을
Java.sql.DataSource 인터페이스를 구현하는 객체가 도와줍니다.
DataSource구현체 : DB에 연결하기 위한 정보들의 집합.
스프링컨테이너에 DataSource 구현체를 Bean으로 등록
(DB 접속정보를 넣는다)(url,username,password)
JdbcTemplate을 빈으로 등록.
(DataSource를 넣어서 )
JdbcTemplate을 사용하는 Dao 작성.
작성한 Dao를 컨테이너에 빈으로 등록(JdbcTemplate넣어서)
<!-- DataSource구현체 빈으로 등록 -->
<!-- 어떻게 디비에 접속할건지에 대한 정보 + 커넥션을 어떻게 관리할건지 -->
-<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property value="com.mysql.jdbc.Driver" name="driverClassName"/>
<property value="jdbc:mysql://localhost:3306/bitcamp" name="url"/>
<property value="root" name="username"/>
<property value="mysql" name="password"/>
</bean>
<!-- JdbcTemplate은 Connection에 sql을 먹이고, 결과받아오는 역할 -->
<!-- 우리가 만드는 Dao는 JdbcTemplate이 sql을 날리기 위해 필요한 정보 전달 & 결과값받기 -->
-<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
-<bean id="memberDao" class="MemberDao">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
</beans>
DriverManagerDateSource ==>스프링에서 제공하는 연습용의 아주 단순한 DataSource 구현제
여기까지 ApplicationContext.xml 설정 끝
먼저 database에 사용될 model 들을 설정해줘야하므로
toString, getter, setter 들을 설정해준다.
package a;
import java.util.Date;
public class Member {
private String id;
private String pw;
private String name;
private String email;
private String regDate;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getRegDate() {
return regDate;
}
public void setRegDate(String regDate) {
this.regDate = regDate;
}
@Override
public String toString() {
return "Member [id=" + id + ", pw=" + pw + ", name=" + name + ", email=" + email + ", regDate=" + regDate
+ "]";
}
}
inset와 delete update selectone selectAll 들이 들어잇는
Dao도 정의 해주기
package a;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
//dao가 구현하고 싶은 기능은
//하나의 member객체에 대한 테이블에 insert,update
//특정 id에 대해 delete하는거
//특정 id에 대해 하나의 레코드를 select하는거
//모든 레코드 select하는거
public class MemberDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void insertMember(Member member) {
String sql = "insert into member values(?,?,?,?,?)";
jdbcTemplate.update(sql,member.getId(),
member.getPw(),member.getName(),
member.getEmail(),member.getRegDate());
}
public void updateMember(Member member) {
String sql = "update member set m_pw = ?,"
+"m_name = ?" + "m_email" + "m_reg_date"
+ "where m_id = ?";
jdbcTemplate.update(sql,
member.getPw(),member.getName(),
member.getEmail(),member.getRegDate(),
member.getId());
}
public void deleteMember(String id) {
String sql = "delete from member where m_id = ?";
jdbcTemplate.update(sql,id);
}
//결과값 받아오기
RowMapper<Member> rowMapper = new RowMapper<Member>() {
@Override
public Member mapRow(ResultSet rs, int index) throws SQLException {
Member member = new Member();
member.setId(rs.getString("m_id"));
member.setPw(rs.getString("m_pw"));
member.setName(rs.getString("m_name"));
member.setEmail(rs.getString("m_email"));
member.setRegDate(rs.getString("m_reg_date"));
return member;
}
};
//위의 결과값 받아오는것을 바탕으로 selectone selectAll 만든다.
public Member selectOne(String id) {
String sql = "select * from member where m_id = ?";
return jdbcTemplate.queryForObject(sql, rowMapper, id);
}
public List<Member> selectAll(){
String sql = "select * from member";
return jdbcTemplate.query(sql, rowMapper);
}
}
JAVA에서와 Spring에서 DAO가 다른점
1.데이터타입신경X,
2.직접구문객체 얻어쓴다
3.쓰고닫고 하지않아도 상관없다
4.예외처리 안해도된다.
그리고
//결과값 받아오기밑의 코드들은
resultSet이 결과 테이블을 탑색할 때
하나의 레코드를 하나의 모델객체로 어떻게 변환할지를
ProwMapper 인터페이스가 정의하는 메소드에 구현하면 된다.mapRow();
그럼 나중에 select 할때 마다 이 객체를 활용해서 결과값을 매핑해준다.
Test 클래스를 만들어서 실행해보기
package a;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Test {
public static void main(String [] args) {
ApplicationContext context= new FileSystemXmlApplicationContext("src/a/applicationContext.xml");
MemberDao dao = context.getBean("memberDao",MemberDao.class);
Member member = new Member();
member.setId("kim");
member.setPw("123");
member.setName("kimminseo");
member.setEmail("1");
member.setRegDate("2019-01-04");
dao.insertMember(member);
// dao.deleteMember("kim");
System.out.println(dao.selectOne("kim"));
for(Member m : dao.selectAll())
System.out.println(m);
}
}
'IT > Spring(스프링)' 카테고리의 다른 글
스프링 - mybatis (마이바티스) (0) | 2019.01.07 |
---|---|
4.스프링(Spring)-NamedParameterJDBCTemplate (0) | 2019.01.04 |
2.스프링(Spring)-어노테이션, @postConstruct, @ preDestory (0) | 2019.01.03 |
1.Spring(스프링) -의존성 주입(Dependency Injection, DI) (0) | 2019.01.02 |
Spring(스프링) 설정 (0) | 2019.01.02 |