从零开始搭建自己的个人博客网站 - (1)- 数据库表的设计与项目搭建

数据库的设计

这里关于MySQL的安装等配置就不再多说了,网上很多相关资料,或者后续我自己也会出一些博客介绍。

所以这里我们直接开整!

根据前面的构想,我们需要登录,需要发布文章,有评论,那我们的表结构就显而易见了。

 

user表

从零开始搭建自己的个人博客网站 - (1)- 数据库表的设计与项目搭建_第1张图片

判断是否为admin用户采用了一个单独的字段 is_admin,1表示是admin,其他则不是。

gmt_create表示创建的时间,gmt_modified表示修改的时间,gmt意思是格林尼治时间。

 

 

article表

从零开始搭建自己的个人博客网站 - (1)- 数据库表的设计与项目搭建_第2张图片

 

这样我们就有了两张表了,接下来进行项目的搭建!

项目搭建

环境及工具

IDE:  Intellj IDEA 2019.2

Java版本: jdk1.8

系统:目前开发环境为widows10,部署服务器上时会放到linux

 

开始搭建工程

 

1. 打开IDEA,新建spring项目

从零开始搭建自己的个人博客网站 - (1)- 数据库表的设计与项目搭建_第3张图片

 

2. 输入项目名

从零开始搭建自己的个人博客网站 - (1)- 数据库表的设计与项目搭建_第4张图片

 

 

接下来也以选择添加依赖,亦可以后面手动添加依赖。

总之,最后的pom文件如下



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.7.RELEASE
         
    
    com.dionysun
    mblog
    0.0.1-SNAPSHOT
    mblog
    My Blog

    
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            mysql
            mysql-connector-java
            runtime
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    


 

这样我们就开始编写代码。

再进行数据操作之前我们需要先配置数据源

在resource目录下修改application.properities文件

spring.datasource.url=jdbc:mysql://localhost:3306/db_sunblog?serverTimeZone=GMT%2B8
spring.datasource.password=123456  
spring.datasource.username=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.jpa.database=mysql
spring.jpa.generate-ddl=true

注意url后面一定加上时区,不然启动时会报错

 

使用JPA实现数据库访问操作

参照官方指南https://spring.io/guides/gs/accessing-data-jpa/

我们知道首先要有一个与数据库的表对应的实体类,我们先创建实体类

在项目中创建entity包,在创建User类

package com.dionysun.mblog.entity;

import javax.persistence.*;
import java.sql.Timestamp;
import java.util.Date;

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String gender;
    private String name;
    private String password;
    private Date birthday;
    private String motto;
    private String isAdmin;
    private Timestamp gmtCreate;
    private Timestamp gmtModified;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", gender='" + gender + '\'' +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", birthday=" + birthday +
                ", motto='" + motto + '\'' +
                ", isAdmin='" + isAdmin + '\'' +
                ", gmtCreate=" + gmtCreate +
                ", gmtModified=" + gmtModified +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

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

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getMotto() {
        return motto;
    }

    public void setMotto(String motto) {
        this.motto = motto;
    }

    public String getIsAdmin() {
        return isAdmin;
    }

    public void setIsAdmin(String isAdmin) {
        this.isAdmin = isAdmin;
    }

    public Timestamp getGmtCreate() {
        return gmtCreate;
    }

    public void setGmtCreate(Timestamp gmtCreate) {
        this.gmtCreate = gmtCreate;
    }

    public Timestamp getGmtModified() {
        return gmtModified;
    }

    public void setGmtModified(Timestamp gmtModified) {
        this.gmtModified = gmtModified;
    }
}

 

接下来的实体类是文章,类似将数据库表中的字段对应为相应的属性名即可,注意下划线命名转化为驼峰式。

使用alt+insert 生成getter setter方法。

接着新建dao包,编写UserDao和ArticleDao

package com.dionysun.mblog.dao;

import com.dionysun.mblog.entity.User;
import org.springframework.data.repository.CrudRepository;

public interface UserDao extends CrudRepository {

}

 

package com.dionysun.mblog.dao;

import org.springframework.data.repository.CrudRepository;

public interface ArticleDao extends CrudRepository {
}

我们只需要将这两个接口继承CrudRepositoy传入泛型参数即可,springboot自动帮我们实现该接口,帮我们完成简单的CRUD操作,是不是很方便?

 

接着我们测试一下是否可以工作

从零开始搭建自己的个人博客网站 - (1)- 数据库表的设计与项目搭建_第5张图片

新建一个测试类

在类上加入注解

@RunWith(SpringRunner.class)
@SpringBootTest

我们可以在测试类中进行Dao的注入。

@Autowired
private UserDao userDao;

编写测试方法

package com.dionysun.mblog;

import com.dionysun.mblog.dao.UserDao;
import com.dionysun.mblog.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class DaoTest {

    @Autowired
    private UserDao userDao;

    @Test
    public void userDaoTest(){
        User user = new User();
        user.setName("tom");
        user.setGender("男");
        user.setIsAdmin("1"); // notnull
        userDao.save(user);
    }
}

 

运行测试,需要注意,表中的字段如果为 not null ,User对象必须设值,否则会出sql异常。// 自己设计的表把自己给坑了。。。

查看数据库,发现果然多了一条数据,证明添加数据成功。

记得把is_admin的not null约束去掉,因为判断是否为admin只需判断该字段有值且值为1.如果不是admin则没必要设置值。

 

接下来我们对dao层进行完善,因为jpa默认的crud中查询操作只能通过id来查询,我们希望通过name来查,那该怎么做呢?

也很简单,只需要在UserDao接口中声明一个方法,jpa会识别findBy...()方法自动实现,还可以有更复杂的findBy....And....()等操作,不过这里我们暂时只需要findByName()

在UserDao中声明方法

User finByName(String name);

即可,注意数据库表中的name字段必须加上unique的约束,不然返回的结果可能会有多个,显然会出异常。

 

 

 

下一步将进行登录的验证,包括cookies验证,考虑多加一张表专门保存token,顺便把登陆注册的界面搭起来。

 

to be continued->

你可能感兴趣的:(个人博客)