Spring JDBC
Spring프레임워크는 JDBC프로그래밍을 위해 JdbcTemplate 클래스를 제공하고있다.
JdbcTemplate 클래스는 SQL쿼리문을 손쉽게 구현할 수 있도록 구현되어있다. (이걸 사용하면 prepareStatement.. 이런걸 복잡하게 안써도됨 / 최근에는 jpa로 가는추세)
1. 라이브러리 추가
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
2. 드라이버 추가
oracle만 maven 리포지포리에서 추가가안됨. 따로해줘야함.
@Configuration
@ComponentScan(basePackages = { "beans", "dao" })
public class DbConfig {
@Bean
public BasicDataSource source() {
BasicDataSource source = new BasicDataSource();
source.setDriverClassName("oracle.jdbc.OracleDriver");
source.setUrl("jdbc:oracle:thin:@182.162.100.161:5211:ORCLCDB");
source.setUsername("shin");
source.setPassword("shin123");
return source;
}
// 외부라이브러리를 빈등록할때는 @Bean 등록하고
// 내가 만든 클래스를 빈등록할때는 해당클래스에 @Component
// Component되어있는 클래스는 알아서 집어넣어주기떄문에 @Autowired할필요가없음.
@Bean
public JdbcTemplate db(BasicDataSource source) {
JdbcTemplate db = new JdbcTemplate(source);
return db;
}
}
Mapper 클래스
- select문 데이터를 가져올때 어떤 컬럼의 값을 bean어디에 주입할것인지 결정해주는 역할을 함. (Mybatis쓰면 안써도됨)
@Component
public class MapperClass implements org.springframework.jdbc.core.RowMapper<JdbcTableDto> {
@Override
public JdbcTableDto mapRow(ResultSet rs, int rowNum) throws SQLException {
JdbcTableDto dto = new JdbcTableDto();
dto.setInt_data(rs.getInt("int_data"));
dto.setStr_data(rs.getString("str_data"));
return dto;
}
}
@Component
public class JdbcDao {
@Autowired
private JdbcTemplate jt;
@Autowired
private MapperClass mapper;
public void insert_data(JdbcTableDto dto) {
String sql = "insert into jdbc_table values(?, ?)";
jt.update(sql, dto.getInt_data(), dto.getStr_data());
}
public List<JdbcTableDto> select_data() {
String sql = "select int_data, str_data from jdbc_table";
List<JdbcTableDto> list = jt.query(sql, mapper);
return list;
}
public void update_data(JdbcTableDto dto) {
String sql = "update jdbc_table set str_date = ? where int_data = ?";
jt.update(sql, dto.getStr_data(), dto.getInt_data());
}
public void delete_data(int int_data) {
String sql = "delete from jdbc_table where int_data = ?";
jt.update(sql, int_data);
}
}
Mybatis
Spring framework에서 제공하는 JDBC라이브러리를 보다 쉽게 작업할 수 있도록 만든 라이브러리
Mapper의 역할을 확장하여 쿼리문작성을 모두 Mapper에서 할수있도록 지원
<!-- mybatis 자체 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- mybatis를 spring 프레임워크에서 쓰이기 위한 바인더 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
아예 복사해놓고 쓰는걸 추천
// SqlSessionFactory : jdbc를 처리하는 객체
@Bean
public SqlSessionFactory factory(BasicDataSource source) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(source);
SqlSessionFactory factory = bean.getObject();
return factory;
}
// Mapper
@Bean
public MapperFactoryBean<MapperInterface> getMapper(SqlSessionFactory factory) throws Exception {
MapperFactoryBean<MapperInterface> bean = new MapperFactoryBean<MapperInterface>(MapperInterface.class);
bean.setSqlSessionFactory(factory);
return bean;
}
'IT > 스프링' 카테고리의 다른 글
mvc (0) | 2023.03.26 |
---|---|
Spring boot (0) | 2023.03.26 |
Spring (0) | 2023.03.26 |
Spring이란 & @Transactional (0) | 2022.01.24 |
Spring boot를 이용해서 자바프로그램을 짜보자 (0) | 2022.01.24 |
댓글