-
mybatis(java)웹페이지 제작을 위한 스프링공부 2020. 5. 16. 00:51
java 언어를 이용하여 데이터베이스와 연동하는 프로그램을 만들 수 있는 기술을 jdbc라고 부릅니다.
mybatis는 jdbc 프로그래밍을 보다 쉽게 하기 위해 설계된 라이브러리 입니다.
mybatis는 spring framework에서 이용할 수 있도록 라이브러리를 제공하고 있습니다.
라이브러리 추가
데이터베이스 드라이버 jar
spring jdbc
dbcp
mybatis
mybatis-spring
oracle jdbc 관련된 자료파일을 repository에 셋팅하고 다운(oracle jdbc 관련 라이브러리 자료들이 서버에서 다운로드가 모두 되지않는 오류가 발생) mysql과 같은 경우 maven 서버에서 받으면 자료파일이 제대로 다운로드가 되는데 orcle같은경우 이런 오류가 자주발생 -> (해결방안으로 oracle jsbc driver을 그냥 넣어주면됨)
오라클 설치한 경로의 \app\user\product\11.2.0\dbhome_1\jdbc\lib 에 oracle6를 프로젝트 webcontent의 WEB-INF의 lib에 직접 넣어줌
<!-- spring jdbc --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.3.RELEASE</version> </dependency> <!-- dbcp --> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.7.0</version> </dependency> <!-- mybatis --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <!-- mybatis spring --> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.4</version> </dependency>
properties 파일 작성
데이터베이스 접속 정보를 가지고 있는 properties파일을 작성합니다
db.classname = oracle.jdbc.OracleDriver db.url = jdbc:oracle:thin:@localhost:1521:orcl db.username = scott db.password = 1234
mapper 만들기
mapper는 쿼리문을 작성하는 파일입니다, 이것은 먼저 작성하는 이유는 나중에 jdbc mybatis셋팅을 할때 mapper파일중 어떤파일을 사용할지 정해줘야하기때문!
BasicDataSource Bean 정의
BasicDataSource는 접속 정보를 관리하는 객체입니다
config - servletappcontext 에서 데이터베이스 접속정보를 사용해야하기때문에 properties파일을 읽어옴
@PropertySource("/WEB-INF/properties/db.properties")
주입받기
@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; }
sqlsessionfactory bean 정의
sqlsessionfactory는 접속,쿼리 관리 등을 하는 객체입니다.(나중에 쿼리를 실행할때 이것을 주입받아 실행)
// 쿼리문과 접속 관리하는 객체 @Bean public SqlSessionFactory factory(BasicDataSource source/*위의 basicdatasource객체가 자동주입*/) throws Exception{ SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(source); SqlSessionFactory factory = factoryBean.getObject(); return factory; }
다음
(
mapper주입
@autowired
MapperInterface mapper1;
쿼리 실행
mapper1.insert_data(dataBean1)
)
실습
데이터를 담을 테이블생성! 오라클 SQLdeveloper사용
create table spring_mvc_table( data1 varchar2(100) not null, data2 varchar2(100) not null, data3 varchar2(100) not null );
데이터를 저장하고 담을 bean객체(DataBean) 생성
package kr.co.softcampus.beans; 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; } }
데이터값을 입력하고 출력할 jsp 생성
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <a href='input_data'>input_data</a> <a href='read_data'>read_data</a> </body> </html>
input_data.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <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> </html>
input_pro.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>저장완료</h1> </body> </html>
read_data.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <c:forEach var='obj' items='${list }'> ${obj.data1 }, ${obj.data2 }, ${obj.data3 }<br/> </c:forEach> </body> </html>
mapper에 쿼리문 작성
package kr.co.softcampus.database; import java.util.List; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import kr.co.softcampus.beans.DataBean; public interface MapperInterface { @Insert("insert into spring_mvc_table (data1, data2, data3) values (#{data1}, #{data2}, #{data3})") void insert_data(DataBean dataBean);//insert 쿼리를 날릴때 이 메소드를 호출 dataBean객체에 있는 data1값을 #data1에 넣고 data2값을 #data2에 data3값을 #data3에 넣어줍니다 @Select("select data1, data2, data3 from spring_mvc_table") List<DataBean> select_data();//select_data가 호출되면 위의 select 쿼리문을 실행함 그럼 데이터를 가져옴 가져오는 데이터의 로우가 1개이상이면 list }
controller
package kr.co.softcampus.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import kr.co.softcampus.beans.DataBean; import kr.co.softcampus.database.MapperInterface; @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"; } }
'웹페이지 제작을 위한 스프링공부' 카테고리의 다른 글
restcontroller (0) 2020.05.19 mybatis(xml) (0) 2020.05.16 interceptor (0) 2020.05.12 Validator (0) 2020.05.12 JSR-308 (0) 2020.05.12