Spring

Spring JDBC MyBatis 설정법

shika 2022. 2. 12. 17:47

먼저 Properties파일을 작성해주자.

db.classname = oracle.jdbc.OracleDriver
db.url = jdbc:oracle:thin:@localhost:1521:xe
db.username = dong
db.password = 1234

db.properties 파일은 이런식으로 설정한다.

 

그 다음 Mapper를 만들어준다

Mapper란 쿼리문을 작성하는 파일이라고 생각하면 된다.

public interface MapperInterface {

	@Insert("insert into spring_mvc_table (data1, data2, data3) values (#{data1}, #{data2}, #{data3})")
	void insert_data(DataBean dataBean);
	
	@Select("select data1, data2, data3 from spring_mvc_table")
	List<DataBean> select_data();
}

인터페이스로 Mapper를 이렇게 만들어준다.

 

그다음 BasciDataSource Bean을 정의해준다.

BasciDataSource는 접속 정보를 관리하는 객체이다.

(ServletAppContext.java에 생성해준다)

이건 처음에 만들어준 .properties 파일과 연결되야 하므로

ServletAppContext에 .properties의 경로를 읽는

@PropertySource("/WEB-INF/properties/db.properties")

이것을 추가해주고

//Spring MVC 프로젝트에 관련된 설정을 하는 클래스
@Configuration
// Controller 어노테이션이 셋팅되어 있는 클래스를 Controller로 등록한다
@EnableWebMvc
//스캔할 패키지를 지정한다
@ComponentScan("kr.co.softcampus.controller")
@PropertySource("/WEB-INF/properties/db.properties")
public class ServletAppContext implements WebMvcConfigurer{
	
	@Value("${db.classname}")
	private String db_classname;
	
	@Value("${db.url}")
	private String db_url;
	
	@Value("${db.username}")
	private String db_username;
	
	@Value("${db.password}")
	private String db_password;
	
	// 데이터베이스 접속 정보 관리
		@Bean
		public BasicDataSource dataSource() {
			BasicDataSource source = new BasicDataSource();
			source.setDriverClassName(db_classname);
			source.setUrl(db_url);
			source.setUsername(db_username);
			source.setPassword(db_password);
			
			return source;
		}
		
		// 쿼리문과 접속 관리하는 객체
		@Bean
		public SqlSessionFactory factory(BasicDataSource source) throws Exception{
			SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
			factoryBean.setDataSource(source);
			SqlSessionFactory factory = factoryBean.getObject();
			return factory;
		}
		
		// 쿼리문 실행을 위한 객체
		@Bean
		public MapperFactoryBean<MapperInterface> test_mapper(SqlSessionFactory factory) throws Exception{
			MapperFactoryBean<MapperInterface> factoryBean = new MapperFactoryBean<MapperInterface>(MapperInterface.class);
			factoryBean.setSqlSessionFactory(factory); //바로위의 @Bean속 factory의 반환객체를 주입하는 것이다.
			return factoryBean;
		}
}

이렇게 작성해준다.

 

위의 코드가 길지만 전부 지금 다 구현한것이다.

@Value 4개와 @Bean3개 

전부 다 천천히 보면서 이해해보도록 하자.

 

그리고 sql문에서 create table을 해주자.

create table spring_mvc_table(
	data1 varchar2(100) not null,
	data2 varchar2(100) not null,
	data3 varchar2(100) not null
);

그 후 내가 만든 테이블의 컬럼과 동일한 data1, data2 를 

프로퍼티로 하는

클래스를 하나 생성한다.

public class DataBean {
	private String data1;
	private String data2;
	private String data3;
	
	public String getData1() {
		return data1;
	}
	public void setData1(String data1) {
		this.data1 = data1;
	}
	public String getData2() {
		return data2;
	}
	public void setData2(String data2) {
		this.data2 = data2;
	}
	public String getData3() {
		return data3;
	}
	public void setData3(String data3) {
		this.data3 = data3;
	}
}

꼭 db의 테이블 명과 클래스의 프로퍼티 명이 동일해야한다.

 

그 이후 

컨트롤러에

@Controller
public class TestController {
	
	@Autowired
	MapperInterface mapper1;
	
	@GetMapping("/input_data")
	public String input_data() {
		return "input_data";
	}
	
	@PostMapping("/input_pro")
	public String input_pro(DataBean dataBean) {
		mapper1.insert_data(dataBean);
		return "input_pro";
	}
	
	@GetMapping("/read_data")
	public String read_data(Model model) {
		List<DataBean> list = mapper1.select_data();
		model.addAttribute("list", list);
		return "read_data";
	}
	
}

그 후 input_data.jsp를 

<body>
	<form action='input_pro' method='post'>
		data1 : <input type='text' name='data1'/><br/>
		data2 : <input type='text' name='data2'/><br/>
		data3 : <input type='text' name='data3'/><br/>
		<button type='submit'>확인</button>
	</form>
</body>

이런식으로 만들어주자.

 

여기서 name이 data1, data2 등과 동일하므로

DataBean과 연결이 되게 된다.

 

그래서 입력하면 

@PostMapping("/input_pro")
public String input_pro(DataBean dataBean) {
mapper1.insert_data(dataBean);
return "input_pro";
}

에서 MapperInterface의 insert인 

@Insert("insert into spring_mvc_table (data1, data2, data3) values (#{data1}, #{data2}, #{data3})")
void insert_data(DataBean dataBean);

과 연결되어서

data 1 2 3 의 값이 들어가게 된다.

 

그래서 이후에 인터페이스의

@Select("select data1, data2, data3 from spring_mvc_table")
List<DataBean> select_data();

를 통해서

값을 확인 할 수 있는것이다.

 

이걸 감산 코드는 컨트롤러의 

@GetMapping("/read_data")
	public String read_data(Model model) {
		List<DataBean> list = mapper1.select_data();
		model.addAttribute("list", list);
		return "read_data";
	}

이다.

 

그 이후 페이지를 실행해서 data를 입력해주고

jsp의 

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<body>
	<c:forEach var='obj' items='${list }'>
		${obj.data1 }, ${obj.data2 }, ${obj.data3 }<br/>
	   
	</c:forEach>
</body>

이것을 통해서 data를 뽑아 올 수 있다.

 

그럼 

이런 식으로 내가 만든 데이터들을

모두 살펴볼 수 있다.

 

많이 복잡하고 처음 xml에 설치프로그램 깔고

이런것은 생략했는데

꼭 전체적인 흐름은 여러번 보고

이해하도록 하자.

 

mybatis를 이용해서 spring , db와의 연결을

편하게 할 수 있을것이다.