项目--博客系统设计


设计前提:明确用户的需求

一、实现那些功能

1.当前博客列表(摘要)

博客列表展示了很多篇博客,每一篇博客都包含标题、发布时间、作者、摘要,点击标题可以跳转至对应博客正文页。

2.博客正文页

显示博客的详细内容,正文包含标题、发布时间、完整正文(暂不考虑图片)

3.博客编辑页

显示一个编辑框,用户可以编辑内容并提交给服务器,在列表中可以看到该博客。

4.删除博客功能

在博客的详情页加一个删除按钮

5.注册&登录功能

要求:若登陆成功,才能发布博客;
若没有登陆成功,只能看,不能发布。

二、功能的实现

1.数据库实体类设计

首先分析需要建立几张表来存储博客的数据,每张表字段间的关联关系。
注:为了后面此表结构的重复创建,将建表的sql写到一个sql文件中。
表1:表示“博客”Blog
字段:博客编号blogId、标题title、正文content、发布时间postTime、作者编号userId。
表2:表示“用户”user
字段:用户编号userId、用户名username、密码password。
封装数据库:
(1)使用“单例”类封装数据库建立连接过程。
(2)创建实体类,博客(Blog)是一个实体,一个用户(User)是一个实体,确定博客和用户之间的关系(一对多)。
db.sql

`create database if not exists BlogSystem;
use BlogSystem;

drop table if exists blog;
create table blog (
blogId int primary key auto_increment,
title varchar(512),
content text,
userId int,
postTime datetime
);

drop table if exists user;
create table user (
userId int primary key auto_increment,
username varchar(50),
password varchar(50)
);`
Blog表

import java.sql.Date;
import java.sql.Timestamp;

public class Blog {
   
    private int blogId;
    private String title;
    private String content;
    private int userId;
    // java.sql.Date 这个类型只能表示日期, 没有时分秒
    private Timestamp postTime;

    public int getBlogId() {
   
        return blogId;
    }

    public void setBlogId(int blogId) {
   
        this.blogId = blogId;
    }

    public String getTitle() {
   
        return title;
    }

    public void setTitle(String title) {
   
        this.title = title;
    }

    public String getContent() {
   
        return content;
    }

    public void setContent(String content) {
   
        this.content = content;
    }

    public int getUserId() {
   
        return userId;
    }

    public void setUserId(int userId) {
   
        this.userId = userId;
    }

    public Timestamp getPostTime() {
   
        return postTime;
    }

    public void setPostTime(Timestamp postTime) {
   
        this.postTime = postTime;
    }

    @Override
    public String toString() {
   
        return "dao.Blog{" +
                "blogId=" + blogId +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", userId=" + userId +
                ", postTime=" + postTime +
                '}';
    }
}

User表

public class User {
   
    private int userId;
    private String username;
    private String password;

    public int getUserId() {
   
        return userId;
    }

    public void setUserId(int userId) {
   
        this.userId = userId;
    }

    public String getUsername() {
   
        return username;
    }

    public void setUsername(String username) {
   
        this.username = username;
    }

    public String getPassword() {
   
        return password;
    }

    public void setPassword(String password) {
   
        this.password = password;
    }

    @Override
    public String toString() {
   
        return "dao.User{" +
                "userId=" + userId +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

(3)针对用户和博客进行具体的增删改查操作。(暂不考虑用户的删除 )
注:查找时,如果查询结果较多,采用limit offset实现分页查询,此项目暂时不考虑。
BlogDao

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 BlogDao {
   
    // 往数据库中新增一个 博客
    public void insert(Blog blog) {
   
        // 1. 和数据库服务器建立连接.
        Connection connection = DBUtil.getConnection();
        // 2. 拼装 SQL
        String sql = "insert into blog values(null, ?, ?, ?, now())";
        PreparedStatement statement = null;
        try {
   
            statement = connection.prepareStatement(sql);
            statement.setString(1, blog.getTitle());
            statement.setString(2, blog.getContent());
            statement.setInt(3, blog.getUserId());
            // 3. 执行 SQL
            statement.executeUpdate();
        } catch (SQLException e) {
   
            e.printStackTrace();
        } finally {
   
            // 4. 收尾工作.
            DBUtil.close(connection, statement, null);
        }
    }



    // 从数据库删除博客
    public void delete(int blogId) {
   
        // 1. 和数据库服务器建立连接.
        Connection connection = DBUtil.getConnection();
        // 2. 拼装 SQL
        String sql = "delete from blog where blogId = ?";
        PreparedStatement statement = null;
        try {
   
            statement = connection.prepareStatement(sql);
            statement.setInt(1, blogId);
            // 3. 执行 SQL
            statement.executeUpdate();
        } catch (SQLException e) {
   
            e.printStackTrace();
        } finally {
   
            DBUtil.close(connection, statement, null);
        }
    }

    // 从数据库中查找出所有的博客.
    // 实现博客列表页的时候, 就需要这个方法.
    // 如果博客数目少, 都无所谓. 如果博客数目很多, 应该要支持 "分页查询"
    // limit offset
    public List<Blog> selectAll() {
   
        List<Blog> blogs = new ArrayList<Blog>();
        // 1. 和数据库服务器建立连接.
        Connection connection = DBUtil.getConnection();
        // 2. 拼装 SQL
        String sql = "select * from blog order by blogId desc";
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
   
            statement = connection.prepareStatement(sql);
            // 3. 执行 SQL
            resultSet = statement.executeQuery();
            // 4. 遍历结果集合.
            while (resultSet.next()) {
   
                Blog blog = new Blog();
                blog.setBlogId(resultSet.getInt("blogId"));
                blog.setTitle(resultSet.getString("title"));
                String content = resultSet.getString("content");
                if (content.length() > 40) {
   
                    content = content.substring(0, 40) + "...";
                }
                blog.setContent(content);
                blog.setUserId(resultSet.getInt("userId"));
                blog.setPostTime(resultSet.getTimestamp("postTime"));
                blogs.add(blog);
            }
        } catch (SQLException e) {
   
            e.printStackTrace();
        } finally {
   
            DBUtil.close(connection, statement, resultSet);
        }
        return blogs;
    }

    // 从数据库查询出指定的一篇博客.
    // 实现博客详情页的时候, 需要这个方法.
    public Blog selectOne(int blogId) {
   
        // 1. 和数据库建立连接.
        Connection connection = DBUtil.getConnection();
        // 2. 拼装 SQL
        String sql = "select * from blog where blogId = ?";
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
   
            statement = connection.prepareStatement(sql);
            statement.setInt(1, blogId);
            // 3. 执行 SQL
            resultSet = statement.executeQuery();
            // 4. 遍历结果集. 要么是 0 个记录, 要么只有 1 条记录.
            if (resultSet.next()) {
   
                Blog blog = new Blog();
                blog.setBlogId(resultSet.getInt("blogId"));
                blog.setTitle(resultSet.getString("title"));
                blog.setContent(resultSet.getString("content"));
                blog.setUserId(resultSet.getInt("userId"));
                blog.setPostTime(resultSet.getTimestamp("postTime"));
                return blog;
            }
        } catch (SQLException e) {
   
            e.printStackTrace();
        } finally {
   
            DBUtil.close(connection, statement, resultSet);
        }
        return null;
    }

    public static void main(String[] args) {
   
        // 通过这里的代码对上面的数据库操作进行验证.
        // 1. 验证插入.
        // 此处的测试, 只是一个简单的 "冒烟测试"
//        Blog blog = new Blog();
//        blog.setTitle("滕王阁序");
//        blog.setContent("");
//        blog.setUserId(3);
//        BlogDao blogDao = new BlogDao();
//        blogDao.insert(blog);

        // 2. 验证查找.
//        dao.BlogDao blogDao = new dao.BlogDao();
//        List<dao.Blog> blogs = blogDao.selectAll();
//        System.out.println(blogs);
//        dao.Blog blog = blogDao.selectOne(1);
//        System.out.println(blog);

        // 3. 验证删除.
//        dao.BlogDao blogDao = new dao.BlogDao();
//        blogDao.delete(1);
    }
}

UserDao

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDao {
   
    // 注册的时候, 需要新增用户到数据库中.
    // 期望 username 不能重复. (username 是用于登陆的用户名)
    // 注册的时候(insert 之前), 先判定一下该 username 是否已经存在.
    // 如果存在, 就直接不执行后续的 insert 操作.
    // username 的唯一性不一定非得通过 数据库的约束 来完成.
    // 也可以通过用户代码来完成.
    public void insert(User user) {
   
        // 1. 和数据库建立连接.</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心事付流年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值