使用mybatis+controller
pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 父项目依赖管理 进行版本统一管理-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sunjob</groupId>
<artifactId>zyx</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zyx</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<!-- <dependencies>-->
<!--<!– 选择的Web模块依赖启动器–>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-web</artifactId>-->
<!-- </dependency>-->
<!--<!–测试类依赖–>-->
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-test</artifactId>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!--页面跳转-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
<!-- Maven打包工具类插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<!--保证配置文件能被扫描到-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.html</include>
</includes>
</resource>
</resources>
</build>
</project>
apllication.properties
spring.application.name = itcast-mp-springboot
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/zyx?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=88888888
spring.thymeleaf.prefix=classpath:/templates/
#1.把视图页面放到文件夹中
spring.web.resources.static-locations=classpath:/templates
#关闭缓存
spring.thymeleaf.cache=false
# 构建URL时附加查看名称的后缀.
spring.thymeleaf.suffix=.html
entity
package com.sunjob.zyx4.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
//@Data各个属性getter、setter等方法
//@AllArgsConstructor有参构造函数
//@NoArgsConstructor无参构造函数
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
@TableId(type = IdType.AUTO) //type = IdType.AUTO表示id自动递增
private String id;
private String username;
private String password;
}
usercontroller
package com.sunjob.zyx.controller;
import com.sunjob.zyx.entity.User;
import com.sunjob.zyx.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Slf4j
@Controller //相当于@Controller+@RequestBody
public class UserController {
// 自动装配
@Autowired
UserService userService;
// 注册
@RequestMapping("/register")
public String register(User user){
System.out.println(user);
Integer integer=userService.registerUser(user);
System.out.println(integer);
if(integer != null){
return "login";
}else {
return "regist";
}
}
// 登录
@RequestMapping("/login")
public String login(User user, Model model){
if(user !=null && user.getUsername() != ""){
User user1=userService.findUserByName(user.getUsername());
System.out.println(user1);
if(user1 != null){///dbuser不为空则说明根据用户名查询到了用户信息
if (user.getPassword().equals(user1.getPassword())){
// //判断前端输入的用户密码与数据库中的密码是否一致
List<User> users =userService.queryUsers();
model.addAttribute("users",users);
return "index";
}
}
}
return "login";
}
}
mapper
package com.sunjob.zyx.mapper;
import com.sunjob.zyx.entity.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository//声明此类时一个数据处理类,向ioc容器声明 //把mapper接口注册为spring的bean,避免@autowired时爆红(无影响)
//声明此类是一个数据映射类
@Mapper
public interface UserMapper {
/**
* 查询用户名是否存在,若存在,不允许注册
* 注解@Param(value) 若value与可变参数相同,注解可省略
* 注解@Results 列名和字段名相同,注解可省略
* @param
* @return
*/
//根据insert中的sql 语句执行插入操作
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert into user values(#{id},#{username},#{password})")
Integer registerUser(User user);
/**
* 登录
* @param user
* @return
*/
@Select("select * from user where username=#{username} and password =#{password}")
User loginUser(User user);
// 查找用户
@Select("select * from user where username=#{username}")
@Results({
@Result(property ="id",column = "id"),
@Result(property ="username",column = "username"),
@Result(property = "password",column = "password")
})
User findUserByName(@Param("username") String username);
// 查找用户
@Select("select * from user where username=#{username}")
@Results({
@Result(property ="id",column = "id"),
@Result(property ="username",column = "username"),
@Result(property = "password",column = "password")
})
User findUserByName1(String username);
// 查询所有用户
@Select("select * from user")
@Results({
@Result(property = "id",column = "id"),//Java 数据库
@Result(property ="username",column = "username"),
@Result(property ="password",column = "password")
})
List<User> queryUsers();
}
service
package com.sunjob.zyx.service;
import com.sunjob.zyx.entity.User;
import java.util.List;
public interface UserService {
Integer registerUser(User user);
User findUserByName(String username);
List<User> queryUsers();
User loginUser(User user);
}
serviceimpl
package com.sunjob.zyx.service.impl;
import com.sunjob.zyx.entity.User;
import com.sunjob.zyx.mapper.UserMapper;
import com.sunjob.zyx.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserMapper userMapper;
@Override
public Integer registerUser(User user) {
return userMapper.registerUser(user);
}
@Override
public User findUserByName(String username) {
return userMapper.findUserByName(username);
}
@Override
public List<User> queryUsers() {
return userMapper.queryUsers();
}
@Override
public User loginUser(User user) {
return userMapper.loginUser(user);
}
}
公共类result
package com.sunjob.zyx4.common;
/**
* 向前端返回信息封装
* @param <T> 可变类型
*/
public class Result<T> {
//返回信息
private String msg;
//数据是否正常请求
private boolean success;
//具体返回的数据
private T detail;
//... getter and setter
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public T getDetail() {
return detail;
}
public void setDetail(T detail) {
this.detail = detail;
}
@Override
public String toString() {
return "Result{" +
"msg='" + msg + '\'' +
", success=" + success +
", detail=" + detail +
'}';
}
}
注册页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<form action="/user/regist" method="post">
用户名:<input name="username" type="text"/><br>
密码:<input name="password" type="password"> <br>
<input type="submit" value="注册">
</form>
</body>
</html>
登录页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="/user/login" method="post">
用户名:<input name="username" type="text"/><br>
密码:<input name="password" type="password"> <br>
<input type="submit" value="登录">
</form>
</body>
</html>