Spring JDBC MyBatis 설정법
먼저 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와의 연결을
편하게 할 수 있을것이다.