JSP
[JSP] 49. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (8)
Song hyun
2024. 7. 10. 14:42
728x90
반응형
[JSP] 49. <JSP와 MVC 패턴을 사용한 to-do 프로젝트> (8)
1. TodoDAOImpl
package com.tenco.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import com.mysql.cj.protocol.Resultset;
public class TodoDAOImpl implements TodoDAO {
private DataSource dataSource;
public TodoDAOImpl() {
try {
InitialContext ctx = new InitialContext();
dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/MyDB");
} catch (NamingException e) {
e.printStackTrace();
}
}
@Override
public void addTodo(TodoDTO dto, int principalId) {
String sql = " INSERT INTO todos "
+ "(user_id,title,description,due_date,completed) values (?,?,?,?,?); ";
try(Connection conn=dataSource.getConnection()) {
conn.setAutoCommit(false);
try (PreparedStatement pstmt = conn.prepareStatement(sql)){
pstmt.setInt(1, principalId);
pstmt.setString(2, dto.getTitle());
pstmt.setDate(3, dto.getDueDate());
pstmt.setBoolean(3, dto.isCompleted());
pstmt.executeUpdate();
conn.commit();
} catch (Exception e) {
conn.rollback();
}
conn.commit();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public TodoDTO getTodoById(int id) {
String sql=" SELECT * FROM todos where id = ? ";
TodoDTO dto=null;
try (Connection conn=dataSource.getConnection()){
PreparedStatement pstmt=conn.prepareStatement(sql);
pstmt.setInt(1, id);
try (ResultSet rs = pstmt.executeQuery()){
if(rs.next()) {
dto=new TodoDTO();
dto.setId(rs.getInt("id"));
dto.setUserId(rs.getInt("user_id"));
dto.setTitle(rs.getString("title"));
dto.setDescription(rs.getString("description"));
dto.setDueDate(rs.getDate("due_date"));
dto.setCompleted(rs.getBoolean("completed"));
}
} catch (Exception e) {
e.printStackTrace();
}
pstmt.executeQuery();
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
@Override
public List<TodoDTO> getTodosByUserId(int userId) {
String sql=" select * from todos where user_id= ? ";
List<TodoDTO> todos=new ArrayList<TodoDTO>();
try (Connection conn=dataSource.getConnection()){
conn.setAutoCommit(false);
try (PreparedStatement pstmt=conn.prepareStatement(sql)){
pstmt.setInt(1, userId);
ResultSet rs=pstmt.executeQuery();
if(rs.next()) {
TodoDTO dto=new TodoDTO();
dto.setId(rs.getInt("id"));
dto.setUserId(userId);
dto.setTitle(rs.getString("title"));
dto.setDescription(rs.getString("description"));
dto.setDueDate(rs.getDate("dueDate"));
dto.setCompleted(rs.getBoolean("completed"));
todos.add(dto);
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("UserList : "+todos.toString());
return todos;
}
@Override
public List<TodoDTO> getAllTodos() {
String sql=" select * from todos ";
List<TodoDTO> todos= new ArrayList<TodoDTO>();
try(Connection conn=dataSource.getConnection()) {
conn.setAutoCommit(false);
try (PreparedStatement pstmt=conn.prepareStatement(sql)){
ResultSet rs=pstmt.executeQuery();
if(rs.next()) {
TodoDTO dto=new TodoDTO();
dto.setId(rs.getInt("id"));
dto.setUserId(rs.getInt("userId"));
dto.setTitle(rs.getString("title"));
dto.setDescription(rs.getString("description"));
dto.setDueDate(rs.getDate("dueDate"));
dto.setCompleted(rs.getBoolean("completed"));
todos.add(dto);
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("UserList All : "+todos.toString());
return todos;
}
@Override
public void updateTodo(TodoDTO dto, int principalId) {
int rowCount=0;
String sql=" update todos set title = ? , description = ? where user_id = ? ;";
try (Connection conn=dataSource.getConnection()){
conn.setAutoCommit(false);
try (PreparedStatement pstmt=conn.prepareStatement(sql)){
pstmt.setString(1, dto.getTitle());
pstmt.setString(2, dto.getDescription());
pstmt.setInt(3, principalId);
rowCount=pstmt.executeUpdate();
conn.commit();
} catch (Exception e) {
conn.rollback();
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("수정 "+rowCount);
}
@Override
public void deleteTodo(int id, int principalId) {
int rowCount=0;
String sql = " delete from todos where user_id = ? ";
try (Connection conn=dataSource.getConnection()){
conn.setAutoCommit(false);
try (PreparedStatement pstmt=conn.prepareStatement(sql)){
pstmt.setInt(1, principalId);
rowCount=pstmt.executeUpdate();
conn.commit();
} catch (Exception e) {
conn.rollback();
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("수정 "+rowCount);
}
}
2. TestController
package com.tenco.controller;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import com.tenco.model.TodoDAO;
import com.tenco.model.TodoDAOImpl;
import com.tenco.model.TodoDTO;
import com.tenco.model.UserDAO;
import com.tenco.model.UserDAOImpl;
import com.tenco.model.UserDTO;
@WebServlet("/test/*")
public class TestController extends HttpServlet {
private static final long serialVersionUID = 1L;
private UserDAO userDAO;
private TodoDAO todoDAO;
public TestController() {
super();
}
@Override
public void init() throws ServletException {
userDAO=new UserDAOImpl();
todoDAO=new TodoDAOImpl();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action=request.getPathInfo();
switch (action) {
case "/byId": {
// http://localhost:8080/mvc/test/byId
//userDAO.getUserById(1);
//userDAO.getUserByUsername("티모");
//List<UserDTO> list=userDAO.getAllUsers();
//if(list.size()==0)
UserDTO dto=UserDTO.builder().password("999").email("h@naver.com").build();
int count= userDAO.updateUser(dto, 3);
System.out.println("카운트 :"+count);
break;
}
case "/todoById": {
TodoDTO result = todoDAO.getTodoById(1);
System.out.println(result);
break;
}
default:
break;
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
728x90
반응형