2022暑假软件创新实验室集训 项目实战1

班级学习系统

数据库创建

首先,我们必须要认识到数据库是一个应用项目开发的基础,如果没有这个基础,我们有很多东西都不能完成,比如说项目的一些UI设计(表单等等)、代码编写等等。如果这个项目是个人开发的话或许还不会很麻烦,因为在开发期间如果发现数据库需要修改,你可以自己慢慢一个人修改,从UI到代码编写(但是如果你在开发后期,发现数据库需要修改,那大概率是要寄了)。但是,我们换个角度想一想,如果你是团队开发的话,每个人负责一个模块,假设每个模块都需要基于数据库实现代码编写,那么如果在开发的时候,发现数据库需要修改,那么对团队来说同样是一件非常耗时耗力的事情,会导致很多严重的问题,例如代码的重新编写等。

本项目用户是学生,学生可以使用本网站加入学习小组,然后学生可以在学习小组内进行发言和讨论,使用者也可以进行利用已有的网站进行登录和注册没有的账号。

所以项目正式编码前,先带大家建一下数据库

特此说明,该数据库可能在后期也需要修改,因为问题总是不断出现得,这边也是带大家过一下流程

  1. 首先,就是需要分析一下用户,在这里我们就简单地给出用户的关键字段,用户ID、用户名、用户密码、用户创建的时间(可以自行完善数据库字段)。

    image-20220720190608920

  2. 然后就是学生,学生信息需要学号、姓名、QQ、手机号码、权限等级(可以自行完善数据库字段)

    image-20220720192535999

  3. 还需要一个学习小组的数据表,学习小组需要小组ID、小组组长ID、小组人数、小组名、小组介绍、其中小组ID为主键。

    image-20220720201110864

  4. 因为在用户之间可以进行讨论,这里的讨论内容我们需要使用数据库来存储,需要的字段内容有评论ID编号、发出评论的用户ID、评论所属学习小组、评论内容、评论时间。

    image-20220720195511349

到这里为止,我们就创建好了班级学习系统的数据库(十分十分简单),把刚刚我们建好的模型转换成数据库,如下图。

image-20220720201243591

image-20220720200450472

之后,我们就成功导入了刚刚创建好的数据库。

创建项目

我们创建好数据库之后,就需要创建好项目,并且给项目分层。使用IDEA企业版来创建Web项目。

image-20220720202447976

首先,我们需要在项目中配置好数据库,因为这个Web项目一定会使用JDBC来与底层数据库来进行交互,例如用户登录会访问数据库来查询当前的用户到底存不存在,在注册账号的时候我们会使用使用数据库进行添加操作用户的操作。

配置数据库

WEB-ING创建lib目录,在该目录下导入数据库的驱动jar包(就是JDBC那一套操作)

image-20220720203523276

在上面的resources创建数据库连接配置文件db.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/study?&useSSL=false&serverTimezone=UTC
username=root
password=123456

然后如果记得JDBC操作的同学应该还知道进行数据库操作的时候,有一个数据库操作工具类,就是JDBCUtil,我们首先需要创建一个util文件来进行存放我们自定义的工具类

public class JDBCUtil {
    private static final String driver;
    private static final String url;
    private static final String userName;
    private static final String password;

    static {
        InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("db.properties");
        Properties properties = new Properties();
        try {

            properties.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        driver = properties.getProperty("driver");
        url = properties.getProperty("url");
        userName = properties.getProperty("username");
        password = properties.getProperty("password");
    }

    // 获取数据库连接
    public static Connection getConnection() {
        Connection con = null;
        try {
            Class.forName(driver);
            con = DriverManager.getConnection(url, userName, password);
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();

        }
        return con;
    }

    // 数据库查询,返回结果集
    public static ResultSet query(Connection con, PreparedStatement st, ResultSet rs, String sql
            , Object[] params) throws SQLException {
        st = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
                ResultSet.CONCUR_READ_ONLY);
        if (params != null) {
            for (int i = 0; i < params.length; i++) {
                st.setObject(i + 1, params[i]);
            }
        }
        rs = st.executeQuery();
        return rs;
    }

    // 数据库增删改
    public static int update(Connection con, String sql
            , Object[] params, ResultSet rs, PreparedStatement st) throws SQLException {
        st = con.prepareStatement(sql);
        for (int i = 0; i < params.length; i++) {
            st.setObject(i + 1, params[i]);
        }
        return st.executeUpdate();
    }

    // 关闭数据库连接
    public static void release(Connection con, Statement st, ResultSet rs) {
        boolean flag = true;

        if (rs != null) {
            try {
                rs.close();
                rs = null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag = false;
            }
        }

        if (st != null) {
            try {
                st.close();
                st = null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag = false;
            }
        }

        if (con != null) {
            try {
                con.close();
                con = null;
            } catch (SQLException e) {
                e.printStackTrace();
                flag = false;
            }
        }
    }
}

这就是在Web项目中,我们对数据库和数据库操作类的配置操作。

创建entity文件

在创建entity的作用就是把数据库的每张表变成项目中的一个实体entity,这样更加符合Java面向对象设计的思维。

image-20220720205352617

entity中,我们需要把刚刚数据库中创建的数据表都变为一个实体,例如数据库中的user对应的就是entity下的user类,数据库中的各个字段则对应的是Java中的各个属性。

User类如下:

public class User {

    private int uid;
    private String uname;
    private String upassword;
    private Date ucreatetime;

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpassword() {
        return upassword;
    }

    public void setUpassword(String upassword) {
        this.upassword = upassword;
    }

    public Date getUcreatetime() {
        return ucreatetime;
    }

    public void setUcreatetime(Date ucreatetime) {
        this.ucreatetime = ucreatetime;
    }
}

其余的数据库表都对应这一个Java类,以此类推。

image-20220720210910316

创建dao文件夹

dao文件夹下中的Java是对底层数据库操作的文件,就类似于JDBC来对数据库实现增删改查等操作,今天我们就不做来编写这里面的数据库操作类。

创建filter文件

filter文件夹是存放的过滤器的文件,在Java Web项目中,我们需要让用户有访问权限等,过滤游客用户(比如游客只能查看网站的主页,无法访问其他页面),这个时候就需要使用过滤器来进行权限过滤操作。还有一个应用场景就是使用过滤器来进行字符编码的过滤。

创建servlet文件

servlet主要是来响应前端的操作,比如说前端需要登录时,就想把这个请求交给servlet,然后通过这个servlet,来封装前端传来的数据,比如用户登录,把前端的数据包装成User类,然后调用service服务进行操作。

创建service文件

service文件里面的类是被servlet调用的类,通过servlet传来的封装好的类,进行具体的业务操作,并且调用dao层内的数据库操作类,做到各个业务对数据库中的具体数据操作。


以上就是项目实战的第一步

servlet,然后通过这个servlet,来封装前端传来的数据,比如用户登录,把前端的数据包装成User类,然后调用service服务进行操作。

创建service文件

service文件里面的类是被servlet调用的类,通过servlet传来的封装好的类,进行具体的业务操作,并且调用dao层内的数据库操作类,做到各个业务对数据库中的具体数据操作。


以上就是项目实战的第一步

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值