spring boot 实现最基础的登陆注册功能:
首先先看代码:数据库:
先说自己遇到的坑:第一:数据库的配置是复制之前的数据库,导致自己在另一个数据库中查询数据,这点大家在application.properties这个里面注意下 这句
spring.datasource.url=jdbc:mysql://localhost:3306/testspring?useUnicode=true&characterEncoding=utf8&useSSL=false
第二:在注册页面开始自己设置为无返回的,导致自己页面无法跳转。
第三:在Repository里注意数据库查询的格式。
controller 层:
package com.example.demo222.controller;
import com.example.demo222.entity.Login;
import com.example.demo222.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
@RestController
//@Controller
public class MyController {
@Autowired
LoginService loginService;
这里是首先进入登陆页面,然后再进行其他的操作
@RequestMapping("/")
public ModelAndView index(){
ModelAndView mv = new ModelAndView("login");
return mv;
}
@RequestMapping("/registers")
public ModelAndView zhuce(){
ModelAndView mv = new ModelAndView("register");
return mv;
}
// @PostMapping("/login")
// public ModelAndView login(@RequestParam("username")String username, @RequestParam("password") String password){
// ModelAndView success = new ModelAndView();
// if(username.equals("admin")&&password.equals("123"))
// success.setViewName("success");
// else success.setViewName("404");
// return success;
// }
// @GetMapping("/login")
// public ModelAndView login(@RequestParam("name")String name, @RequestParam("password") String password){
// ModelAndView success = new ModelAndView();
// if(name.equals("admin")&&password.equals("123"))
// success.setViewName("success");
// else success.setViewName("404");
// return success;
// }
//登陆功能
@PostMapping("/login")
public ModelAndView Login(@RequestParam("username") String username,@RequestParam("userpassword") String userpassword){
List<Login> login= loginService.findByUsernameAndUserpassword(username,userpassword);
// for (Login l:loginService.findAll()) {
System.out.println(l.getUsername()+":"+l.getUserpassword());
}
System.out.println(username+":"+userpassword);
//System.out.println(login);
ModelAndView success = new ModelAndView();
if(login.size()>0){
success.setViewName("success");
} else {
success.setViewName("404");
}
return success;
}
//注册功能
@PostMapping("/register")
public ModelAndView register(@RequestParam("username") String username,@RequestParam("password")
String password,@RequestParam("password2") String password2){
ModelAndView success = new ModelAndView();
//用户或密码为空的条件判断
if(username.isEmpty()||password.isEmpty()||password2.isEmpty()){
success.setViewName("register");
success.addObject("tip1","用户或密码不能为空");
return success;
}
//两次密码不一样的判断条件
if(!password.equals(password2)){
success.setViewName("register");
success.addObject("tip2","两次密码不一样");
return success;
}
//判断是否取到用户,如果没有就保存在数据库中
List<Login> us=loginService.findByUsername(username);
if(us.size()==0){
//List<Login> register=loginService.save(username,password);
Login registers=new Login();
registers.setUserpassword(password);
registers.setUsername(username);
loginService.save(registers);
success.setViewName("success");
}
else {
success.setViewName("404");
}
return success;
}
}
然后是 respository层:
package com.example.demo222.repository;
import com.example.demo222.entity.Login;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public interface MyRepository extends JpaRepository<Login,Integer>, JpaSpecificationExecutor<Login>{
//@Query(value = "select * from book b where b.name=?1", nativeQuery = true)
//@Query(value ="select l.id,l.username,l.userpassword from Login l where l.username=:name and l.userpassword=:password")
//登陆
@Query(value = "select * from login where username=?1 and userpassword=?2",nativeQuery = true)
List<Login> findByUsernameAndUserpassword(String username, String userpassword);
List<Login> findAll();
//注册
@Query(value = "select * from login where username=?1", nativeQuery = true)
List<Login> findByUsername(String username);
}
接下来是实体类:
package com.example.demo222.entity;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.Objects;
@Entity
public class Login {
private String username;
private String userpassword;
private int id;
@Basic
@Column(name = "username")
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Basic
@Column(name = "userpassword")
public String getUserpassword() {
return userpassword;
}
public void setUserpassword(String userpassword) {
this.userpassword = userpassword;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Login login = (Login) o;
return Objects.equals(username, login.username) &&
Objects.equals(userpassword, login.userpassword);
}
@Override
public int hashCode() {
return Objects.hash(username, userpassword);
}
@Id
@Column(name = "id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
service层:
下来是部分前台页面:
Thymeleaf表单绑定Spring的Model对象中的Attribute
整个项目源代码: https://download.csdn.net/download/qq_40979622/10720191
代码上传上去不要集分,结果网站就弄出这么多集分。
没积分的,之前放的百度云容易失效,我也不可能一个人一个人发邮箱。
大家有啥意见或者建议可以和我讨论4108346411@qq.com