目录

前言

相关技术:

一.使用idea创建springboot项目

二.搭建三层框架dao层、service层、controller层+实体model层:

三.实现登录注册接口


前言

相关技术:

框架:springboot

IDE: IDEA

数据库: MySQL

测试工具: Postman(非必须,但方便测试且安装和使用都挺简单的)

一.使用idea创建springboot项目

 步骤一:

步骤二:

二.搭建三层框架dao层、service层、controller层+实体model层


Controller(UI)界面控制层
Service(BLL)业务逻辑服务层
Dao(DAL),dao层也叫mapper层,数据持久层

model层也叫pojo层或者entity层包括实体函数层(具体实现)Domain类:表映射实体,类名名是表名,属性是字段,主要用于Java数据和数据库表的映射与类Dto:数据传输对象(Data Transfer Object),用于前后端数据交互,Dto用在Controller和Service层。

具体目录如下:

三.实现登录注册接口

1.设计数据库列表

2.连接数据库 

application.yml

#更改项目的端口号
server:
  port: 8080

# 数据库数据源
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
    driver-class-name: com.mysql.cj.jdbc.Driver

 3.根据框架特点,我们将自底向上开发,所以将按照model层-dao-service-serviceImpl-controller 的顺序逐步开发。

3.1 编写model层:

package com.example.demospringboot.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//User类主要用于Java数据和数据库表的映射
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
  private String id;
  private String username;
  private String password;
  private String phone;
  private int isDelete;

}
package com.example.demospringboot.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//登录模块数据传输对象
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserLoginDto {
  private String username;
  private String password;
}
package com.example.demospringboot.dto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

//注册模块数据传输对象
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserRegisterDto {
  private String username;
  private String password;
  private String phone;
}

3.2 编写dao层(即mapper层)

package com.example.demospringboot.mapper;

import com.example.demospringboot.domain.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper //这个注解表示了本类是一个mybatis 的mapper类
//或者在主类写@MapperScan("com.example.demosprongboot.mapper")
@Repository
public interface UserMapper {

@Select(value = "select * from user where username=#{username} and password = #{password}")
//使用注解方式,也可用xml方式(编写.xml文件放在resources下且要在application.yml中配置localtion等)
  User selectOneUser (User u);
  //List<User> queryUserList();
@Insert(value = "insert into user values (#{id},#{username},#{password},#{phone},#{isDelete})")
  void insertUser(User U);
}

3.3 编写service层

package com.example.demospringboot.service;

import com.example.demospringboot.domain.User;

import java.util.List;

public interface UserService {
  void saveUser(User u);
  User selectUser(User u);
  List<User> findAll();

}
package com.example.demospringboot.service.impl;

import com.example.demospringboot.domain.User;
import com.example.demospringboot.mapper.UserMapper;
import com.example.demospringboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.UUID;

@Service
public class UserServiceImpl implements UserService {
  @Autowired
  private UserMapper userMapper;
  @Override
  public void saveUser(User u){
    u.setId(UUID.randomUUID().toString());
    u.setIsDelete(0);
    userMapper.insertUser(u);
  }

  @Override
  public User selectUser(User u){
    if(u.getUsername()==null||u.getPassword()==null){
      return null;
    }
    return userMapper.selectOneUser(u);
  }


}

3.4 编写controller层

package com.example.demospringboot.controller;

import com.example.demospringboot.domain.User;
import com.example.demospringboot.dto.UserLoginDto;
import com.example.demospringboot.dto.UserRegisterDto;
import com.example.demospringboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController//@Controller 代表这个类会被springboot 接管
//被@Controller这个注解的类,中的所有方法,如果返回值是String,并且有具体的页面可以跳转,那么就会被视图解析器解析
public class UserController {

  @Autowired
  private UserService userService;

  @PostMapping("/save")//用@RequestMapping,则什么请求类型都可以
  //restful接口风格,可以用不同的请求方式实现不同的效果
  //使用@PathVariable注解,让方法参数的值对应绑到一个URL模板变量上
  public String saveUser(@RequestBody UserRegisterDto userRegisterDto){
    if(userRegisterDto ==null){
      return "操作失败";
    }
    if(userRegisterDto.getUsername()==null|| userRegisterDto.getPassword()==null|| userRegisterDto.getPhone()==null){
      return "操作失败";
    }
    User user=new User();
    user.setUsername(userRegisterDto.getUsername());
    user.setPassword(userRegisterDto.getPassword());
    user.setPhone(userRegisterDto.getPhone());
    if(!(userService.selectUser(user)==null)){
      return "此账号与密码已重复";
    }
    userService.saveUser(user);
    return "操作成功";
  }

  @PostMapping("/login")
  public String loginIn(@RequestBody UserLoginDto userLoginDto){
    if(userLoginDto==null){
      return "操作失败";
    }
    User user=new User();
    user.setUsername(userLoginDto.getUsername());
    user.setPassword(userLoginDto.getPassword());
    if(userService.selectUser(user)==null){
      return "无此账号";
    }
      return "登录成功";
  }
}

具体目录如下:

3.5 测试

 

 

 参考链接:

(24条消息) springboot三层架构(4块)_魔图啊的博客-CSDN博客_springboot三层架构图

(24条消息) 快速上手Springboot项目(登录注册保姆级教程)_Maker_Hu的博客-CSDN博客_springboot登录

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐