POJO (Plain Old Java Object)
자바에서 여러가지를 상속받은 객체를 하나 생성할 뿐인데 모든 부모객체도 생성해야하다보니 점차 프로젝트가 무거워지게 되었는데
최대한 가볍게 써보자 순수한 자바를 이용한 옛날 방식을 이용해보자라는 내용으로 등장한 것이 POJO 이며 이를 통해 탄생한게 스프링
스프링도 가볍지만 않지만 이전에 비해서는 상대적으로 가볍다고 한다. 이후로 모든 프레임 워크들이 POJO 를 지향하며 만들게 되었다고 한다.
ORM (Object Relational Mapping)
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑 해주는 것
ibatis
mybatis의 전신 현재는 사용되지않고 mybatis로 사용함
Spring framework
pom.xml - dependency
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>index.do</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>sts01</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sts01</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
create config file
handler mapping & view resolve

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/lecture"></property>
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<bean id="deptDao" scope="singleton" class="com.bit.sts01.model.DeptDao">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- handler mapping -->
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<bean name="/index.do" scope="singleton" class="com.bit.sts01.controller.IndexController">
</bean>
<bean name="/list.do" class="com.bit.sts01.controller.ListController">
<property name="dao" ref="deptDao"></property>
</bean>
<bean name="/add.do" class="com.bit.sts01.controller.AddController">
<property name="dao" ref="deptDao"></property>
</bean>
<bean name="/detail.do" class="com.bit.sts01.controller.EditController">
<property name="dao" ref="deptDao"></property>
</bean>
<!-- View Resolve -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
DeptDao
package com.bit.sts01.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
public class DeptDao {
DataSource dataSource;
// dataSource를 주입 받기
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public DeptDao() {}
public List<DeptVo> findAll() throws SQLException{
String sql = "select * from dept";
List<DeptVo> list = new ArrayList<DeptVo>();
try(Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();){
while(rs.next()) {
list.add(new DeptVo(rs.getInt("deptno"), rs.getNString("dname"), rs.getNString("loc")));
}
}
return list;
}
public void insertOne(int deptno, String dname, String loc) throws SQLException {
String sql = "insert into dept value (?,?,?)";
try(Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);){
pstmt.setInt(1, deptno);
pstmt.setNString(2, dname);
pstmt.setNString(3, loc);
pstmt.executeUpdate();
}
}
public Object findOne(int deptno) throws SQLException {
String sql = "select * from dept where deptno=?";
try(Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);
){
pstmt.setInt(1, deptno);
ResultSet rs = pstmt.executeQuery();
if(rs.next()) {
return new DeptVo(rs.getInt("deptno"), rs.getNString("dname"), rs.getNString("loc"));
}
}
return null;
}
public void updateOne(int deptno, String dname, String loc) throws SQLException {
String sql = "update dept set dname=?, loc=? where deptno=?";
try(Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);){
pstmt.setNString(1, dname);
pstmt.setNString(2, loc);
pstmt.setInt(3, deptno);
pstmt.executeUpdate();
}
}
}
Controller
----------- IndexController
public class IndexController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
return mav;
}
}
----------- AddController
public class AddController implements Controller {
DeptDao dao;
public void setDao(DeptDao dao) {
this.dao = dao;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView();
if("GET".equals(request.getMethod())) {
mav.setViewName("dept/add");
} else {
request.setCharacterEncoding("utf-8");
int deptno = Integer.parseInt(request.getParameter("deptno"));
String dname = request.getParameter("dname");
String loc = request.getParameter("loc");
dao.insertOne(deptno, dname, loc);
mav.setViewName("redirect:list.do");
}
return mav;
}
}
-------------- ListController
public class ListController implements Controller {
DeptDao dao;
// dao 주입 받기
public void setDao(DeptDao dao) {
this.dao = dao;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView();
mav.addObject("list", dao.findAll());
mav.setViewName("dept/list");
return mav;
}
}
-------------- EditController
public class EditController implements Controller {
DeptDao dao;
// dao 주입 받기
public void setDao(DeptDao dao) {
this.dao = dao;
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView();
request.setCharacterEncoding("utf-8");
int deptno = Integer.parseInt(request.getParameter("deptno"));
String dname = request.getParameter("dname");
String loc = request.getParameter("loc");
String viewName = "dept/detail";
if(request.getMethod().equals("GET")) {
mav.addObject("bean", dao.findOne(deptno));
} else {
viewName = "redirect:list.do";
dao.updateOne(deptno, dname, loc);
}
mav.setViewName(viewName);
return mav;
}
}
'회고록(TIL&WIL)' 카테고리의 다른 글
TIL 2023.03.03 docker tomcat 배포 (0) | 2023.03.06 |
---|---|
TIL 2023.03.02 Spring framework ver 2.X (IoC-DI, AOP, Junit) (0) | 2023.03.06 |
TIL 2023.02.23 Java Web 12 (Struts frame work example, (feat.MongoDB)) (0) | 2023.02.24 |
TIL 2023.02.22 Java Web 11 (JdbcTemplate, MongoDB replica set) (0) | 2023.02.22 |
TIL 2023.02.21 Java web 10 (EL표현식, JSTL, framework - DispatcherServlet) (0) | 2023.02.21 |