MVC模式

1、创建Model(模型),数据库表单对应的实体类。

package com.mvc.model;
//Model(模型),数据库表单对应的实体类。
public class Word {
    private int id;
    private String engName;
    private String chiVal;
    private String lastUsedTime;
    private int usedTimes;
    private String createdTime;
    private int priority;

    public Word(int id, String engName, String chiVal, String lastUsedTime, int usedTimes, String createdTime, int priority) {
        this.id = id;
        this.engName = engName;
        this.chiVal = chiVal;
        this.lastUsedTime = lastUsedTime;
        this.usedTimes = usedTimes;
        this.createdTime = createdTime;
        this.priority = priority;
    }
    // 省略getter和setter方法

    @Override
    public String toString() {
        return "Id: " + id +
                "\n英语原文: " + engName +
                "\n汉语意义: " + chiVal +
                "\n最后使用时间: " + lastUsedTime +
                "\n使用次数: " + usedTimes +
                "\n创建时间: " + createdTime +
                "\n优先级: " + priority +
                "\n---------------------";
    }
}

2、创建View类,将数据输出到控制台:

package com.mvc.model;
//创建一个View类,将数据输出到控制台。
import java.util.List;
public class WordView {
    public void displayWords(List<Word> words) {
        for (Word word : words) {
            System.out.println(word);
        }
    }
}

3、创建wordDAO类,具体的数据库操作逻辑:

package com.mvc.model;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
//DAO(数据访问对象)
public class WordDAO {
    // JDBC连接信息
    private static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String DB_URL = "jdbc:mysql://localhost/test_data";
    private static final String USER = "root";
    private static final String PASS = "admin";

    public void insertWord(String engName, String chiVal, String lastUsedTime, int usedTimes, String createdTime, int priority) {
        Connection conn = null;
        PreparedStatement stmt = null;

        try {
            // 注册JDBC驱动
            Class.forName(JDBC_DRIVER);

            // 打开数据库连接
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            // 构建插入数据的SQL语句
            String sql = "INSERT INTO words_info (eng_name, chi_val, last_used_time, used_times, created_time, priority) VALUES (?, ?, ?, ?, ?, ?)";

            // 创建PreparedStatement对象
            stmt = conn.prepareStatement(sql);

            // 设置参数
            stmt.setString(1, engName);
            stmt.setString(2, chiVal);
            stmt.setString(3, lastUsedTime);
            stmt.setInt(4, usedTimes);
            stmt.setString(5, createdTime);
            stmt.setInt(6, priority);

            // 执行SQL语句
            stmt.executeUpdate();

            System.out.println("数据插入成功");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public void deleteWord(int id) {
        Connection conn = null;
        PreparedStatement stmt = null;

        try {
            // 注册JDBC驱动
            Class.forName(JDBC_DRIVER);

            // 打开数据库连接
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            // 构建删除数据的SQL语句
            String sql = "DELETE FROM words_info WHERE Id = ?";

            // 创建PreparedStatement对象
            stmt = conn.prepareStatement(sql);

            // 设置参数
            stmt.setInt(1, id);

            // 执行SQL语句
            stmt.executeUpdate();

            System.out.println("数据删除成功");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public void updateWord(int id, String engName, String chiVal) {
        Connection conn = null;
        PreparedStatement stmt = null;

        try {
            // 注册JDBC驱动
            Class.forName(JDBC_DRIVER);

            // 打开数据库连接
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            // 构建更新数据的SQL语句
            String sql = "UPDATE words_info SET eng_name = ?, chi_val = ? WHERE Id = ?";

            // 创建PreparedStatement对象
            stmt = conn.prepareStatement(sql);

            // 设置参数
            stmt.setString(1, engName);
            stmt.setString(2, chiVal);
            stmt.setInt(3, id);

            // 执行SQL语句
            int rowsAffected = stmt.executeUpdate();

            if (rowsAffected > 0) {
                System.out.println("数据更新成功");
            } else {
                System.out.println("未找到对应的数据");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public List<Word> getAllWords() {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        List<Word> words = new ArrayList<>();

        try {
            // 注册JDBC驱动
            Class.forName(JDBC_DRIVER);

            // 打开数据库连接
            conn = DriverManager.getConnection(DB_URL, USER, PASS);

            // 创建Statement对象
            stmt = conn.createStatement();

            // 执行查询语句
            String sql = "SELECT * FROM words_info";
            rs = stmt.executeQuery(sql);

            // 构建Word对象并加入列表
            while (rs.next()) {
                int id = rs.getInt("Id");
                String engName = rs.getString("eng_name");
                String chiVal = rs.getString("chi_val");
                String lastUsedTime = rs.getString("last_used_time");
                int usedTimes = rs.getInt("used_times");
                String createdTime = rs.getString("created_time");
                int priority = rs.getInt("priority");

                Word word = new Word(id, engName, chiVal, lastUsedTime, usedTimes, createdTime, priority);
                words.add(word);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            try {
                if (rs != null) {
                    rs.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return words;
    }
}

4、创建一个wordController类处理用户交互:

package com.mvc.model;
import java.util.List;
//Controller(控制器)处理用户交互,并调用WordDAO和WordView进行数据操作和展示。
public class WordController {
    private WordDAO wordDAO;
    private WordView wordView;

    public WordController() {
        wordDAO = new WordDAO();
        wordView = new WordView();
    }

    public void insertWord(String engName, String chiVal, String lastUsedTime, int usedTimes, String createdTime, int priority) {
        wordDAO.insertWord(engName, chiVal, lastUsedTime, usedTimes, createdTime, priority);
    }

    public void deleteWord(int id) {
        wordDAO.deleteWord(id);
    }

    public void updateWord(int id, String engName, String chiVal) {
        wordDAO.updateWord(id, engName, chiVal);
    }

    public void displayWords() {
        List<Word> words = wordDAO.getAllWords();
        wordView.displayWords(words);
    }
}

5、在主程序中测试执行。

package com.mvc.model;
import java.text.SimpleDateFormat;
import java.util.Date;
//MVC与MVP模式的主要区别如下:
//职责分配:
//在MVC模式中,Model负责管理应用程序的数据和业务逻辑,View负责呈现数据给用户,Controller负责接受用户的输入并作出响应。
//在MVP模式中,Model同样负责管理数据和业务逻辑,View负责呈现数据给用户,
//Presenter作为中间人负责处理用户的输入,将输入与Model交互,并更新View。
//数据流:
//在MVC模式中,数据流是双向的。用户的输入通过Controller传递给Model进行处理,处理后的数据通过View呈现给用户。
//同时,Model也可以直接更新View。
//在MVP模式中,数据流是单向的。用户的输入通过View传递给Presenter进行处理,Presenter将数据交给Model进行处理,
//处理完成后,Model将结果交给Presenter,再由Presenter更新View。
//单向依赖:
//在MVC模式中,View依赖于Controller和Model,Controller依赖于View和Model,Model独立存在。
//在MVP模式中,View只依赖于Presenter,Presenter依赖于View和Model,Model独立存在。
//可测试性:
//在MVC模式中,由于Controller处理用户的输入和输出,因此可以很容易地对Controller进行单元测试。
//在MVP模式中,由于Presenter处理用户的输入和输出,因此可以很容易地对Presenter进行单元测试。

//在MVC模式中,将应用程序分为三个部分:模型(Model),视图(View)和控制器(Controller)。
//模型负责处理数据和业务逻辑,视图负责展示数据给用户,控制器负责协调模型和视图之间的交互。
//模型类Word表示单词对象,视图类WordView负责展示单词列表,
//控制器类WordController负责与模型和视图进行交互,并实现插入、删除、更新和查询数据的方法。
//WordDAO类负责与数据库进行交互,实现具体的增删改查操作。主程序类Main用于测试执行。
public class Main {
	
	public static void main(String[] args) {
		// 获取当前时间
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		String currentTime = dateFormat.format(new Date());

		WordController wordController = new WordController();

		// 插入数据示例
		wordController.insertWord("newword", "新词", currentTime, 1, currentTime, 0);

		// 删除数据示例
		wordController.deleteWord(2);

		// 更新数据示例
		wordController.updateWord(1, "updated_word", "更新后的词");

		// 查询数据示例
		wordController.displayWords();
	}
}

运行结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值