MVC & MVVM学习 &VUE学习 & springboot小型项目开发(续上一篇)数据库篇

一、安装数据库


1、我的 MySQL 版本是 5.7,官方下载页面是
https://dev.mysql.com/downloads/mysql/5.7.html#downloads

2、安装教程可以参考
https://blog.csdn.net/ma524654165/article/details/77855431

3、安装完成之后需要在pom文件中添加对mysql的jar包的依赖,当然你也可以在上一篇中新建springboot时和我一样直接选中相关的mysql依赖。同时,上节也说了了如何在application.yml中配置数据库连接了。

4、执行sql语句新建一个我们项目中需要的数据库和数据表

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'admin', '123');
这里用户密码设置了123哦,后面测试别再输入123456了

二、使用数据库验证登录

在上一篇中,我们是直接在代码中默认了登录账号和密码为admin和123456,使用了数据库之后,我们则需要从数据库中取出相应登录名以及它所对应的密码并做出相应验证,其余思路和上节类似。


User类:

package com.example.library.pojo;

import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity    //jpa注解,表示这是一个实体类
@Data
public class User {
    @Id   //标识主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)   //表示主键自增
    int id;
    String username;
    String password;
} 

Dao层

Data Access Object(数据访问对象,DAO)即用来操作数据库的对象,代码中通过继承JpaRepository类构建Dao。

新建一个 package,命名为 dao,然后创建 Java Class,命名为 UserDAO。代码如下:

package com.example.library.dao;

import com.example.library.pojo.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserDao extends JpaRepository<User,Integer> {
    User findByUsername(String username);
    User findByUsernameAndPassword(String username, String password);
}
Jpa有自己的代码规范,这里看似一句SQL语句没写,但实际上函数的命名就为这个函数提供了相应的SQL语句。

比如 findByUsername,就是通过 username 字段查询到对应的行,并返回给 User 类。

UserService

新建 package,命名为 service,新建 Java Class,命名为 UserService,代码如下:

package com.example.library.service;
import com.example.library.dao.UserDao;
import com.example.library.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    public User getByName(String username) {
        return userDao.findByUsername(username);
    }
    public boolean isExist(String username){
        User user = getByName(username);
        return null != user;
    }

    public User get(String username,String password){
        return userDao.findByUsernameAndPassword(username,password);
    }

    public void save(User user){
        userDao.save(user);
    }

}

在Dao中定义了增删改查,service这里是对Dao定义的增删改查做进一步处理。

LoginController

和之前的基本逻辑一样但是,用户密码验证的if语句改成了从数据库读取并判断。就是通过 UserService 提供的 get 方法查询数据库,如果返回的对象为空,则验证失败,否则就验证成功。代码如下:

package com.example.library.controller;
import com.example.library.result.Result;
import com.example.library.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.util.HtmlUtils;
import com.example.library.pojo.User;
@Controller
public class LoginController {
    @Autowired
    UserService userService;

    @CrossOrigin
    @PostMapping(value = "api/login")
    @ResponseBody
    public Result login(@RequestBody User requestUser) {
        // 对 html 标签进行转义,防止 XSS 攻击
        String username = requestUser.getUsername();
        username = HtmlUtils.htmlEscape(username);

        User user = userService.get(username, requestUser.getPassword());

        if (user == null) {
            String message = "账号密码错误";
            return new Result(400);
        } else {
            return new Result(200);
        }
    }
}

总结

  • DAO 用于与数据库的直接交互,定义增删改查等操作
  • Service 负责业务逻辑,跟功能相关的代码一般写在这里,编写、调用各种方法对 DAO 取得的数据进行操作
  • Controller 负责数据交互,即接收前端发送的数据,通过调用 Service 获得处理后的数据并返回


发表评论 / Comment

用心评论~