0. 테이블, 시퀀스, 샘플 데이터 넣기
데이터 넣을 때는 꼭 commit; 작업 실행하기
1. pom.xml에 DB 연동 라이브러리 추가
<!-- DB 연동 라이브러리들 추가 -->
<!-- jdbc 추가 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.0.RELEASE</version>
</dependency>
<!-- 커넥션풀 추가 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- 오라클은 스프링에서 드라이버 제공을 안해주기 때문에 따로 지정 -->
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
+ ojdbc6.jar 파일 .m2 경로에 넣기
왜? 스프링에서 오라클 드라이버는 제공해주지 않기 때문에 따로 폴더에 넣어줘야함
아니면, OJDBC 사설 저장소 추가하는 방법도 있음 -> 하지만, 사설 저장소이기 때문에 오류가 발생하면 저장소 주소를 변경해줘야함
그래서, 편하게 직접 .jar 파일 넣어주기
2. appctx.xml
DB 접속 정보를 객체에 저장하고, 그 객체를 DAO에 전달
커넥션 풀 설정
-> 이미 디비 접속이 되어있는 애들을 모아놓음. 다썼다 close하면 끊어버리는게 아니라 풀장에 돌려주는 것.
-> 다양한 옵션을 적용할 수 있음
3. MemberDAO 클래스
public class MemberDAO {
private JdbcTemplate jdbcTemplate;
public MemberDAO(DataSource dataSource) { // xml에서 의존 주입해주기
System.out.println("MemberDAO 객체 생성");
jdbcTemplate = new JdbcTemplate(dataSource); // jdbcTemplate도 만들어야됨!!
}
public Member selectByEmail(String email) {
List<Member> result = jdbcTemplate.query(
"select * from member where email=?", new MemberRowMapper(), email);
return result.isEmpty() ? null : result.get(0);
}
public List<Member> selectAll() {
List<Member> result = jdbcTemplate.query(
"select * from member", new MemberRowMapper());
return result;
}
public int count() {
Integer cnt = jdbcTemplate.queryForObject(
"select count(*) from member", Integer.class);
return cnt;
}
public void update(Member member) {
jdbcTemplate.update(
"update member set name = ?, password = ? where email = ?",
member.getName(), member.getPassword(), member.getEmail());
}
// KeyHolder
public void insert(Member member) { // 사용자한테 ID 값은 전달받지 않음. 즉 id=null인 상태
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
new PreparedStatementCreator() { // 익명클래스 생성
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement pstmt = con.prepareStatement(
"insert into member (id, email, password, name, regdate)" +
"values (MEMBER_SEQ.nextval, ?, ?, ?, ?)",
new String[] {"ID"}); // 배열을 String으로 전달. 지금은 ID만 전달. 홀딩시킬 값을 저장
pstmt.setString(1, member.getEmail());
pstmt.setString(2, member.getPassword());
pstmt.setString(3, member.getName());
pstmt.setTimestamp(4, new Timestamp(member.getRegisterDate().getTime()));
return pstmt;
}
}, keyHolder); // 최종 ID 값을 keyHolder에 저장
Number keyValue = keyHolder.getKey();
member.setId(keyValue.longValue());
}
public void delete(String email, String password) {
jdbcTemplate.update("delete member where email = ? and password = ?",
email, password);
}
public void memberDelete(Member member) {
Member pmember = selectByEmail(member.getEmail());
if(pmember == null) {
System.out.println("회원 정보가 없습니다.");
} else if(pmember.getPassword().equals(member.getPassword())) {
jdbcTemplate.update("delete member where id = ?", pmember.getId());
} else {
System.out.println("비밀번호가 일치하지 않습니다.");
}
}
}
4. MemberRowMapper 클래스
- select() 메서드에서 사용
5. Main 메서드
public class MainForMemberDao {
private static MemberDAO memberDao;
public static void main(String[] args) {
GenericXmlApplicationContext ctx =
new GenericXmlApplicationContext("classpath:appctx.xml");
memberDao = ctx.getBean("memberDao", MemberDAO.class);
selectByEmail("test@naver.com");
selectAll();
count();
update();
insert();
delete(); // 내꺼
memberDelete(); // 강사님꺼
}
private static void memberDelete() {
System.out.println("-----delete Test");
Member member = new Member(
"test2@naver.com",
"2222",
"test2",
new Date());
memberDao.memberDelete(member);
}
private static void delete() {
System.out.println("-----delete Test");
memberDao.delete("0928172624@test.com", "0928172624");
}
private static void insert() {
System.out.println("-----insert Test");
//SimpleDateFormat dateFormat = new SimpleDateFormat("MMddHHmmss");
//String prefix = dateFormat.format(new Date());
Member member =
new Member(
"test5@naver.com",
"5555",
"test5",
new Date());
memberDao.insert(member);
System.out.println(member.getId() + "번 데이터 추가"); // ID값을 알 수 있게 됨
}
private static void update() {
System.out.println("-----update Test");
Member member = memberDao.selectByEmail("test@naver.com");
String oldPwd = member.getPassword();
String newPwd = Double.toHexString(Math.random());
member.changePassword(oldPwd, newPwd);
memberDao.update(member);
System.out.println("암호 변경: " + oldPwd + "->" + newPwd);
}
private static void count() {
System.out.println("-----count Test");
int cnt = memberDao.count();
System.out.println("멤버 수: " + cnt);
}
private static void selectAll() {
System.out.println("-----selectAll Test");
List<Member> ls = memberDao.selectAll();
for(Member tmp:ls) {
System.out.println(tmp);
}
}
private static void selectByEmail(String email) {
System.out.println("-----selectByEmail Test");
Member member = memberDao.selectByEmail(email);
System.out.println(member);
}
}
'SPRING > Configuration' 카테고리의 다른 글
spring legacy project 구조 (0) | 2020.10.10 |
---|---|
[스프링] Eclipse & Oracle 연결 - C3P0 설정 (0) | 2020.10.07 |
메이븐 라이브러리 에러 (0) | 2020.09.23 |
게시판 - 프로젝트 환경설정 및 DB 연결 (0) | 2020.09.07 |
Eclipse & Oracle 연결 - mybatis 설정 (0) | 2020.09.02 |