본문 바로가기
IT/스프링

JDBC & Mybatis 설정법

by 모띠 2022. 1. 24.

 

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

댓글