JSP&Servlet(9)——JSP+JavaBean+Servlet中的MVC

MVC

MVC指MVC模式的某种框架,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。最典型的MVC就是JSP + servlet+ JavaBean的模式。

视图

视图是用户看到并与之交互的界面。

MVC好处是它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

模型

模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

控制器

控制器接受用户的输入并调用模型和视图去完成用户的需求,所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

javabean、servlet、jsp分别对应M(odel)、C(ontroller)、V(iew)

在本项目中的目录结构如下图:

这个项目结构图和JSP&Servlet(8)——使用Servlet实现增删改查中的项目结构图基本上是一致的。

在这里,UserDao是一个接口,实现各种数据的接口,里面只有方法,没有具体如何实现的代码,而dao/impl包中的UserDaoImpl.java中则是接口方法的具体实现。

UserDao.java代码如下:

package dao;

import bean.User;

import java.util.List;

/**
 * @author lck100
 */
public interface UserDao {
    /**
     * 查找数据库中的所有记录
     *
     * @return 返回查询结果集合
     */
    List<User> selectAll();

    /**
     * 查询用户通过用户id
     *
     * @param id 用户id
     * @return 返回查询用户
     */
    User selectById(int id);

    /**
     * 通过id删除记录
     *
     * @param id 用户id
     * @return 返回受影响行数
     */
    int deleteById(int id);

    /**
     * 添加用户
     *
     * @param user 用户对象
     * @return 返回受影响行数
     */
    int addUser(User user);

    /**
     * 更新用户
     *
     * @param user 用户
     * @return 返回受影响行数
     */
    int updateUser(User user);
}

UserDaoImpl.java中代码无变化。

package dao.impl;

import bean.User;
import dao.UserDao;
import utils.DBUtils;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class UserDaoImpl implements Serializable, UserDao {
    @Override
    public List<User> selectAll() {
        // 存储查询结果集的集合
        List<User> userList = new ArrayList<>();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            // 获取数据库连接对象
            conn = DBUtils.getConnection();
            // SQL语句
            String sql = "select * from users";
            // 创建数据库执行对象
            ps = conn.prepareStatement(sql);
            // 获取结果集对象
            rs = ps.executeQuery();
            // 对结果集进行遍历
            while (rs.next()) {
                // 实例化User对象
                User user = new User();
                // 进行赋值
                user.setId(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
                // 将User对象添加到集合中
                userList.add(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, rs);
        }
        return userList;
    }

    @Override
    public User selectById(int id) {
        // 定义一个User对象
        User user = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            // 获取数据库连接对象
            conn = DBUtils.getConnection();
            // SQL语句
            String sql = "select id, username, password from users where id=?";
            // 创建数据库执行对象
            ps = conn.prepareStatement(sql);
            // 设置参数
            ps.setInt(1, id);
            // 获取结果集对象
            rs = ps.executeQuery();
            // 对结果集进行遍历
            while (rs.next()) {
                // 实例化User对象
                user = new User();
                // 对User进行赋值
                user.setId(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, rs);
        }
        return user;
    }

    @Override
    public int deleteById(int id) {
        int count = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            // 获取数据库连接对象
            conn = DBUtils.getConnection();
            // SQL语句
            String sql = "delete from users where id=?";
            // 创建数据库执行对象
            ps = conn.prepareStatement(sql);
            // 对参数进行赋值
            ps.setInt(1, id);
            // 执行删除
            count = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, null);
        }
        return count;
    }

    @Override
    public int addUser(User user) {
        int count = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            // 获取数据库连接对象
            conn = DBUtils.getConnection();
            // SQL语句
            String sql = "insert into users(username, password) values (?,?);";
            // 创建数据库执行对象
            ps = conn.prepareStatement(sql);
            // 对参数进行赋值
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());
            // 执行增加
            count = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, null);
        }
        return count;
    }

    @Override
    public int updateUser(User user) {
        // 受影响行数
        int count = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            // 获取数据库连接对象
            conn = DBUtils.getConnection();
            // SQL语句
            String sql = "update users set username=?,password=? where id=?";
            // 创建数据库执行对象
            ps = conn.prepareStatement(sql);
            // 对参数进行赋值
            ps.setString(1, user.getUsername());
            ps.setString(2, user.getPassword());
            ps.setInt(3, user.getId());
            // 执行更新
            count = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            DBUtils.release(conn, ps, null);
        }
        return count;
    }
}

更详细的源代码可以参考JSP&Servlet(8)——使用Servlet实现增删改查或者

搜索微信公众号【Java实例程序】或者扫描下方二维码关注公众号获取更多。

注意:在公众号后台回复【CSDN201910062050】可获取本节源码。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值