스프링 프레임워크에서 datasource) 얻는 방법 - DBCP 이용
commons DBCP.jar, commons-pool.jar 필요! (메이븐에서 링크 가져오자.)
+ 오라클 경로에서 ojdbc6.jar도 라이브러리에 추가
Spring Jdbc도 메이븐에서 가져오고, pom.xml에서 version을 ${spring-framework.verson}으로 해주기.
package site.levinni.jdbc1;
Student.java
package site.levinni.jdbc1;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
private Integer studno;
private String name;
private Integer deptno;
private Integer profno;
}
null값이 올 수 있기 때문에(studno는 pk라 not null이지만) int 타입대신 Integer 사용! ->참조자료형 사용
int로 하면 null 대신 0이 들어감.
StudentDao.java
package site.levinni.jdbc1;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import lombok.Setter;
@Setter
public class StudentDao {
//CRUD
private JdbcTemplate template;
public Student findBy(int studno) {
return template.queryForObject(
"SELECT STUDNO, NAME, DEPTNO, PROFNO FROM STUDENT WHERE STUDNO = ?",
new Object[] {studno}, new RowMapper<Student>(){
@Override
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
// TODO Auto-generated method stub
Student student = new Student();
student.setStudno(rs.getInt(1));
student.setName(rs.getString(2));
student.setDeptno(rs.getInt(3));
student.setProfno(rs.getInt(4));
return student;
}
});
}
public List<Map<String, Object>> list() {
return template.queryForList("SELECT * FROM STUDENT");
}
public List<Student> list2(){
return template.query(
"SELECT STUDNO, NAME, DEPTNO, PROFNO FROM STUDENT",
new RowMapper<Student>(){
@Override
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
// TODO Auto-generated method stub
Student student = new Student();
student.setStudno(rs.getInt(1));
student.setName(rs.getString(2));
student.setDeptno(rs.getInt(3));
student.setProfno(rs.getInt(4));
return student;
}
});
// return template.queryForList("SELECT STUDNO, NAME, DEPTNO, PROFNO FROM STUDENT", Student.class);
}
public int Write(Student student) {
return template.update("INSERT INTO STUDENT(STUDNO, NAME, DEPTNO, PROFNO) VALUES (?,?,?,?)",
student.getStudno(), student.getName(), student.getDeptno(), student.getProfno());
}
public String getTimeNow() {
return template.queryForObject("SELECT SYSDATE FROM DUAL", String.class);
}
}
단일 행 추가기 때문에 int 타입으로! 해봄.
List의 제네릭을 vo의 타입으로 받고 SELECT 절로 받아온 열의 항목들을 VO 타입으로 바인딩 해 줌.
(이 코드에선 STUDNO, NAME, DEPTNO, PROFNO을 Student 타입으로 바인딩해줘서 return student;에 연결 됨.
StudentApp.java
package site.levinni.jdbc1;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class StudentApp {
// 빈을 통한 접근 >> dao
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("jdbc1.xml");
StudentDao dao = ctx.getBean("dao", StudentDao.class);
System.out.println(dao.findBy(10102));
dao.list().forEach(System.out::println);
System.out.println("===절취선===");
// dao.Write(new Student(30303, "가가가", 101, 9901));
dao.list().forEach(System.out::println);
System.out.println("===절취선===");
System.out.println(dao.getTimeNow());
}
}

jdbc1.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="site.levinni.jdbc1.StudentDao" id="dao">
<property name="template" ref="jdbcTemplate"/>
</bean>
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean class="org.apache.commons.dbcp.BasicDataSource" id="dataSource">
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>jdbc:oracle:thin:@localhost:1521/xe</value>
</property>
<property name="username">
<value>student</value>
</property>
<property name="password">
<value>1234</value>
</property>
</bean>
</beans>
ORM(Object-relational mapping)
- 객체와 관계와의 설정. => 관계형 데이터베이스를 의미
- 생성한 객체를 영구적으로 저장하기 위해 파일이나 DB에 연결. 즉 DB의 테이블에 저장한다는 것.
- 테이블에 객체가 가지고있던 정보를 입력하고, 이 테이블들을 SQL 질의어를 통해 관계 설정을 해주는데,
여기서 문제는 이 테이블과 객체간의 이질성이 발생한다는 것임.
- 본질적인 목적! : vo에 있는 내용들을 테이블에 쉽게 담자!!
MyBatis
'스프링 Spring' 카테고리의 다른 글
| 21. 04. 02. (0) | 2021.04.03 |
|---|---|
| 21. 04. 01. (0) | 2021.04.01 |
| AOP 끝 21. 03. 31. (0) | 2021.03.31 |
| AOP 21. 03. 30. (0) | 2021.03.30 |
| IoC 21. 03. 29. (0) | 2021.03.29 |