JDBC实践-代码分层以及重构

2017-12-06 18:40:29

  1. 在com.ungly包下,新建立db,dao,service包
  2. 在db包下建立DBAccess.java文件,具体内容如下
package com.ungly.db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBAccess {

    public Connection getSqlCon() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/lession1", "root", "123456");
        return con;
    }
}
  1. 在dao包下建立UserDao.java文件,具体内容为
package com.ungly.dao;

import com.ungly.bean.User;
import com.ungly.db.DBAccess;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * 和user表相关的数据库操作
 */

public class UserDao {

    /**
     * 根据查询条件查询消息列表
     */
    public List<User> queryUserList(String username)
    {
        List<User> userList = new ArrayList<>();
        Connection conn = null;
        PreparedStatement preparedStatement = null;
        try {
            DBAccess dbAccess = new DBAccess();
            conn = dbAccess.getSqlCon();
            StringBuilder sql = new StringBuilder("select id,username from user where 1=1");
            List<String> paramList = new ArrayList<>();
            if(username != null && !"".equals(username.trim()))
            {
                sql.append(" and username=?");
                paramList.add(username);
            }
            preparedStatement = conn.prepareStatement(sql.toString());
            for (int i = 0; i < paramList.size(); i++) {
                preparedStatement.setString(i+1,paramList.get(i));
            }
            ResultSet resultSet = preparedStatement.executeQuery();
            while (resultSet.next())
            {
                User user = new User();
                userList.add(user);
                user.setId(resultSet.getString("id"));
                user.setUsername(resultSet.getString("username"));
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                conn.close();
                preparedStatement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return userList;
    }
}


  1. 在service包下.建立ListService.java文件,具体内容为
package com.ungly.service;

import com.ungly.bean.User;
import com.ungly.dao.UserDao;

import java.util.List;

/**
 * 与用户表相关的业务功能
 */
public class ListService {

    public List<User> queryUserList(String username)
    {
        UserDao userDao = new UserDao();
        return userDao.queryUserList(username);
    }
}
  1. 重写ListServlet.java文件,具体内容变更为
package com.ungly.servlet;

import com.ungly.service.ListService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * 页面初始化控制
 */
@WebServlet(name = "ListServlet",urlPatterns = "/List")
public class ListServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8"); //设置编码
        String username = request.getParameter("username"); //接收username参数
        request.setAttribute("username",username); //使用request域,向页面传值
        ListService listService = new ListService();
        request.setAttribute("userList",listService.queryUserList(username));
        request.getRequestDispatcher("/WEB-INF/jsp/front/list.jsp").forward(request,response);
    }
}

其中dao层负责数据库操作,service层负责相应的数据处理,servlet层负责接收以及传递用户数据