一个简单的MVC模式练习

  控制层Action接受从模型层DAO传来的数据,显现在视图层上。

package Action;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

import DAO.StuDAO;
import Model.Student;
import Util.DBUtil;

public class StuAction {

    public static void main(String args[]) throws Exception {
            Connection conn = DBUtil.getConnection();
            Statement stmt = conn.createStatement();
//            ResultSet rs = stmt.executeQuery("select * from stuInfoTable");
    //
////            while(rs.next()) {
////                System.out.println(rs.getInt(1)+" "+ rs.getString(2)+" "+rs.getString(3));
////            }
            //不是直接 Student stu = null,这样试空指针
            Student stu = new Student();
            stu.setStuID(5);
            stu.setName("王五");
            stu.setSex("女");
            StuDAO sd = new StuDAO();
            //sd.addStu(stu);

//            stu.setName("马六");
//            stu.setSex("男");
//            sd.updateStu(stu);

            sd.delStu(stu.getStuID());

    }

    //直接调用StuDAO的方法来更新 增加 删除
    public void add(Student stu) throws Exception {
        StuDAO sd = new StuDAO();
        sd.addStu(stu);
    }
    //通过控制层来 链接视图层
}
package DAO;

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

import Model.Student;
import Util.DBUtil;

public class StuDAO {
    Connection conn = DBUtil.getConnection();
    //一个一个传参数很麻烦 直接传一个对象
    //如果stuID设置了自动递增  就不需要插入了
    public void  addStu(Student stu) throws Exception {
        String sql ="" + "insert into stuInfoTable" + "(" +
                " stuID,name,sex"+")" + "values(" + "?,?,?)";
        //这样的语句可以预加载在服务器里 execute后才会执行
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, stu.getStuID());
        ps.setString(2, stu.getName());
        ps.setString(3, stu.getSex());
        ps.execute();
    }
    //和增加的逻辑一直  所以直接复制上述代码 然后修改sql语句
    //可以直接传过来stuID,但是这样需要根据ID去找Student
    public void updateStu(Student stu) throws Exception {
        //不加where语句的话 所有的都会更新

        //注意下面的语句   一定要有空格
        String sql ="" + "update stuInfoTable " + "set " +
                "name=?,sex=? " + "where "+ "stuID=?";
        //这样的语句可以预加载在服务器里 execute后才会执行
        PreparedStatement ps = conn.prepareStatement(sql);
        //打印出来sql语句 发现 中间少了 空格 然后修改上面的sql语句
        System.out.println(sql);
        //注意下面的 序号 要和update的序号一致
        ps.setString(1, stu.getName());
        ps.setString(2, stu.getSex());
        ps.setInt(3, stu.getStuID());
        ps.execute();
    }
    public void delStu(int stuID) throws Exception {

        String sql ="" + "delete stuInfoTable " +"where "+ "stuID=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setInt(1, stuID);
        ps.execute();
    }
    //查询学生集合
    public List<Student> queryStu() throws Exception {
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("select * from stuInfoTable");

        List<Student> stuList = new ArrayList<Student>();
        Student stu = null;
        while(rs.next()) {
            stu = new Student();
            stu.setStuID(rs.getInt(1));
            stu.setName(rs.getString(2));
            stu.setSex(rs.getString(3));
            stuList.add(stu);
        }
        return stuList;
    }
    //查询一个学生
    //应该需要和上面重载的 但是为了做实验 先写完所有方法 再去实现
    public Student queryOneStu() {
        return null;
    }

}
package Model;

public class Student {
    int stuID;
    String name;
    String sex;
    public int getStuID() {
        return stuID;
    }
    public void setStuID(int stuID) {
        this.stuID = stuID;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

}
package Util;

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

import DAO.StuDAO;
import Model.Student;

public class DBUtil {

    private static Connection conn;

    static {
        String url = "jdbc:sqlserver://localhost:1433;databasename=stuDB";

        try {
            // 1.注册驱动            // Class.forName("com.mysql.jdbc.Driver");
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            // 2.获得数据链接
            conn = DriverManager.getConnection(url, "sa", "123456");

        } catch (ClassNotFoundException | SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static Connection getConnection() {
        return conn;
    }
}
时间: 2024-08-03 08:21:27

一个简单的MVC模式练习的相关文章

[.NET] 一步步打造一个简单的 MVC 网站 - BooksStore

一步步打造一个简单的 MVC 网站 - BooksStore 简介 主要功能与知识点如下: 分类.产品浏览.购物车.结算.CRUD(增删改查) 管理.分页和单元测试. [备注]项目使用 VS2015 + C#6 进行开发. 一.创建项目架构 1.新建一个解决方案“BooksStore”,并添加以下项目: BooksStore.Domain:类库,存放域模型和逻辑,使用 EF: BooksStore.WebUI:Web 应用程序,存放视图和控制器,充当显示层: BoosStore.UnitTest

[.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(二)

一步步打造一个简单的 MVC 电商网站 - BooksStore(二) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore 前:<一步步打造一个简单的 MVC 电商网站 - BooksStore(一)> 简介 上一次我们尝试了:创建项目架构.创建域模型实体.创建单元测试.创建控制器与视图.创建分页和加入样式,而这一节我们会完成两个功能,分类导航与购物车. 主要功能与知识点如下: 分类.产品浏览.购物车.结算.CRUD(增删

[转]PHP实现MVC开发: 一个简单的MVC

今天研究了下PHP MVC结构,所以决定自己写个简单的MVC,以待以后有空再丰富.至于什么MVC结构,其实就是三个Model,Contraller,View单词的简称,,Model,主要任务就是把数据库或者其他文件系统的数据按 照我们需要的方式读取出来.View,主要负责页面的,把数据以html的形式显示给用户.Controller,主要负责业务逻辑,根据用户的 Request进行请求的分配,比如说显示登陆界面,就需要调用一个控制器userController的方法loginAction来显示.

PHP (20140523)PHP实现MVC开发: 一个简单的MVC

今天研究了下PHP MVC结构,所以决定自己写个简单的MVC,以待以后有空再丰富.至于什么MVC结构,其实就是三个Model,Contraller,View单词的简称,,Model,主要任务就是把数据库或者其他文件系统的数据按 照我们需要的方式读取出来.View,主要负责页面的,把数据以html的形式显示给用户.Controller,主要负责业务逻辑,根据用户的 Request进行请求的分配,比如说显示登陆界面,就需要调用一个控制器userController的方法loginAction来显示.

[.NET] 一步步打造一个简单的 MVC 电商网站 - BooksStore(四)

一步步打造一个简单的 MVC 电商网站 - BooksStore(四) 本系列的 GitHub地址:https://github.com/liqingwen2015/Wen.BooksStore <一步步打造一个简单的 MVC 电商网站 - BooksStore(一)>(发布时间:2017-03-30 ) <一步步打造一个简单的 MVC 电商网站 - BooksStore(二)>(发布时间:2017-03-31) <一步步打造一个简单的 MVC 电商网站 - BooksSto

一个简单的MVC模型实现

function Event(sender) { this._sender = sender; this._listeners = []; } Event.prototype = { attach : function (listener) { this._listeners.push(listener); }, notify : function (args) { var index; for (index = 0; index < this._listeners.length; index

设计一个简单的mvc映射

在工作时,有一套框架,并不是很适合做后台,为此我在这个框架加了简单的mvc映射 首先为方便可以随时new自己想要的类,注册自己的__autoload方法,这里封装成一个类,当然类里面要封装好查找路径,注册的时候就是调用内部的loader成员方法: spl_autoload_register(array($this, 'loader')); 现在,我在Action文件夹(前面已经会自动加载这个文件夹相应的类文件),. 创建一个抽象类Action_Abstract,里面有抽象方法run,后期有act

【iOS开发-50】利用创建新的类实现代码封装,从而不知不觉实践一个简单的MVC实验

接上次案例谈代码封装.上次案例见:[iOS开发-48]九宫格布局案例:自动布局.字典转模型运用.id和instancetype区别.xib重复视图运用及与nib关系 代码封装的原则是:要保证视图控制器尽量少的接触到其他对象的属性,也就是说,尽量把数据或者属性封装到一个类里面,然后利用类或者对象的方法来调用或者设置数据.而是赤裸裸地把属性都写在视图控制器中.核心作用在于:减少视图控制器的代码量,把数据和属性的处理封装起来,这样也便于其他视图控制器的使用. 要做到的结果就是如下(我们要根据数组里面的

自己动手写一个简单的MVC框架(第二版)

一.ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件. 在这个System.Web.Routing.dll中,有一个最重要的类叫做UrlRoutingModule,它是一个实现了IHttpModule接口的类,在请求处理管道中专门针对ASP.NET MVC请求进行处理.首先,我们要了解一下UrlRoutingModule是如何起作用的. (1)IIS网站的配置可以分为两个块: