ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] mariadb 와 연결하기
    Web/Servlet && Spring 2019. 8. 25. 21:16

    JDBC - Java에서 제공하는 API로 Java에서 사용되는 모든 데이터 접근 기반 기술

    DB연결을 여닫고 예외 처리하는 코드 실행하는 것이 번거롭다.

     

    반면에...

     

    Spring JDBC는 DB사용 중 저수준의 세부사항을 담당한다(ex. SQL문실행, 예외처리, 트랜잭션처리, 연결 닫기 등)

    - JDBC Template (Spring에서 제공하는 class)

     - 개발자는 핵심적인 것만 담당(SQL문) 나머지는 프레임워크에서 담당하겟다.

     - Spring설정 파일에 DataSource를 설정하고 공유된 DataSource Bean을 DAO클래스에 의존성 주입하여 사용

     

    DAO(Data Access Object) - 실제로 DB에 접근하는 객체, CRUD를 사용

    DTO(Data Transfer Object) - DAO에서 데이터 베이스에서 가져온 데이터와 자바의 객체와 매핑 시켜 주는것

     

    Spring은 DAO를 통해서 JDBC, Hibernate, JPA, JDO, MyBatis와 같은 데이터 엑세스 기술을 쉽게 사용 가능하다.


    Spring과 mariadb의 연결 방법

     

    pom.xml에 태그 추가

    <!-- DB: Maven Repository에서 spring-JDBC, mysql connector/J 검색하여 복붙  -->
    		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    
    		<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>8.0.17</version>
    		</dependency>

     

    servlet-context..xml 데이터베이스 연결 객체를 사용하기 위한 빈 추가

    <!-- 데이터 베이스 연결을 위한 객체를 사용하기 위해 빈을 만든다. 세터 주입법을 사용한다. -->
    	<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    	<!-- mariadb와 mysql은 커넥터를 같은 것을 사용할 수 있다. -->
    		<beans:property name="driverClassName" value="com.mysql.jdbc.Driver"></beans:property>
    		<!-- 마리아가 버젼이 높아지면서 servertimezone=UTC를 맞춰줘야 한다. -->
    		<beans:property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/>
    		<beans:property name="username" value="root"/>
    		<beans:property name="password" value="0000"/>
    	</beans:bean>

    StudentDAO.java

    	private JdbcTemplate jdbcTemplate;
    
    	// DataSource는 sql것으로 임포트
    	// 세터 주입방식
    	@Autowired
    	public void setDataSource(DataSource dataSource) {
    		this.jdbcTemplate = new JdbcTemplate(dataSource);
    	}
    	
    	public void create(Student student) {
    		String sql="INSERT INTO Student(id, name, age) values(?,?,?)";
    		jdbcTemplate.update(sql, student.getId(), student.getName(), student.getAge());
    	}

    Student.java 자바빈 생성

    StudentController.java

    @RequestMapping(value="/student02.do",method=RequestMethod.GET)
    public ModelAndView student02(){
    	return new ModelAndView("student/student","student",new Student());//경로, 키, 벨류
    }
    
    @RequestMapping(value="/add/student.do",method=RequestMethod.POST)
    public String result(@ModelAttribute Student student, Model model){
    	model.addAttribute("student", student); 
    	studentDAO.create(student);
    	return "student/result";
    }

    student.jsp

    <%-- tablib추가 --%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
    <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    
    <h2>학생정보등록</h2>
    	<%--form태그는 스프링에서 관리되는 태그 --%>
    	<%--commandName은 어떤 모델을 사용할지 --%>
    	<form:form method="POST" action="/tok/add/student.do" commandName="student">
    		<table>
    			<tr>
    				<td>
    					<form:label path="id">id</form:label>
    				</td>
    				<td>
    					<form:input path="id"/>
    				</td>
    			</tr>
    			<tr>
    				<td><form:label path="name">이름</form:label></td>
    				<td>
    					<form:input path="name"/>
    					<%--path=name은 name과 id를 name값을 넣는다. --%>
    				</td>
    			</tr>
    			<tr>
    				<td><form:label path="age">나이</form:label></td>
    				<td>
    					<form:input path="age"/>
    				</td>
    			</tr>
    			<tr>
    				<td colspan="2"><input type="submit" value="저장"></td>
    			</tr>
    		</table>
    	</form:form>

    result.jsp

    <h3>학생상세정보</h3>
    	<table>
    		<tr>
    			<td>ID: </td>
    			<td>${student.id }</td>
    		</tr>
    		<tr>
    			<td>이름: </td>
    			<td>${student.name }</td>
    		</tr>
    		<tr>
    			<td>나이: </td>
    			<td>${student.age }</td>
    		</tr>
    	</table>
    반응형

    'Web > Servlet && Spring' 카테고리의 다른 글

    [Spring] ContextLoaderListener에러  (0) 2019.08.27
    [Spring] 부적합한 열유형:1111 에러  (0) 2019.08.27
    [Spring] return 타입 정리  (0) 2019.08.25
    [Spring] ModelAndView사용법  (0) 2019.08.25
    [Spring] @ModelAttribute 사용법  (0) 2019.08.25

    댓글

Designed by Tistory.