使用mybatis+restcontroller
![](https://img-blog.csdnimg.cn/img_convert/f885954d967cd9b3f3704c9ebecb43a9.png)
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>zyx1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zyx1</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
apllication.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/zyx?serverTimezone=UTC
# url: jdbc:mysql://localhost:3306/mysql添加时区
username: root
password: 88888888
static-path-pattern: /static/** #配置静态路径
#mybatis:
# type-aliases-package: day2.demo.test.bean
# mapper-locations: classpath:day2/demo/test/mapper/*.xml
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.zyx1.controller;
import com.sunjob.zyx1.common.Result;
import com.sunjob.zyx1.entity.User;
import com.sunjob.zyx1.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.jws.soap.SOAPBinding;
//控制层,与前端交互
@RestController //相当于@Controller+@RequestBody
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 注册
* @param user 参数封装
* @return Result
*/
@PostMapping(value = "/regist")
public Result regist(User user){
return userService.regist(user);
}
/**
* 登录
* @param user 参数封装
* @return Result
*/
@PostMapping(value = "/login")
public Result login(User user){
return userService.login(user);
}
}
mapper
package com.sunjob.zyx1.mapper;
import com.sunjob.zyx1.entity.User;
import org.apache.ibatis.annotations.*;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.stereotype.Repository;
import javax.jws.soap.SOAPBinding;
/**
* mapper的具体表达式
* 数据库
*/
@Mapper //标记mapper文件位置,表明这个是一个数据映射类
// 否则在Application.class启动类上配置mapper包扫描 @MapperScan
//避免注入时爆红
@Repository
public interface UserMapper {
/**
* 查询用户名是否存在,若存在,不允许注册
* 注解@Param(value) 若value与可变参数相同,注解可省略
* 注解@Results 列名和字段名相同,注解可省略
*
* @param username
* @return
*/
// 查询用户
// 由于数据表中用户名字段被设计为UNIQUE,在执行插入数据之前,还应该检查该用户名是否已经被
//注册,因此需要有“根据用户名查询用户数据”的功能。需要执行的SQL语句大致是:
// 方法一
// @Select(value = "select * from user where username=#{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 findUserByName(@Param("username") String username);
/**
* 注册 插入一条user记录
*
* @param user
* @return
*/
@Insert(value = "insert into user values(#{id},#{username},#{password})")
Integer regist(User user);
// 注册2
//加入该注解可以保存对象后,使得id可以进行自增
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert(value = "insert into user values(#{id},#{username},#{password})")
Integer regist1(User user);
/**
* 登录
* @param user
* @return
*/
@Select("select * from user where username=#{username} and password =#{password}")
User login(User user);
// 登录2
@Select("select * from user where username=#{username} and password =#{password}")
User login1(String username,String password);
}
service
package com.sunjob.zyx1.service;
import com.sunjob.zyx1.common.Result;
import com.sunjob.zyx1.entity.User;
import com.sunjob.zyx1.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
/**
* 注册
*
* @param user 参数封装
* @return Result
*/
public Result regist(User user) {
Result result = new Result();
result.setSuccess(false);
result.setDetail(null);
// 是否存在用户
try {
User existUser = userMapper.findUserByName(user.getUsername());
if(existUser != null){
//如果用户名已存在
result.setMsg("用户名已存在");
}else{
userMapper.regist1(user);
System.out.println(user.getId());
result.setMsg("注册成功");
result.setSuccess(true);
result.setDetail(user);
}
} catch (Exception e) {
// 设置错误信息
result.setMsg(e.getMessage());
e.printStackTrace();
}
return result;
}
// 自己写的方法
// public Result regist(User user) {
// Result result = new Result();
// result.setSuccess(false);
// result.setDetail(null);
// User exitsUser = userMapper.findUserByName(user.getUsername());
// if (exitsUser != null) {
如果用户已经存在
// result.setMsg("用户已经存在");
// } else {
// userMapper.regist(user);
// result.setMsg("注册成功");
// result.setSuccess(true);
// result.setDetail(user);
// }
// return result;
// }
//}
/**
* 登录
* @param user 用户名和密码
* @return Result
*/
// public Result login(User user) {
// Result result = new Result();
// result.setSuccess(false);
// result.setDetail(null);
// try {
// Long userId= userMapper.login(user);
// if(userId == null){
// result.setMsg("用户名或密码错误");
// }else{
// result.setMsg("登录成功");
// result.setSuccess(true);
// user.setId(userId);
// result.setDetail(user);
// }
// } catch (Exception e) {
// result.setMsg(e.getMessage());
// e.printStackTrace();
// }
// return result;
// }
// 自己写的方法
public Result login(User user) {
Result result = new Result();
result.setSuccess(false);
result.setDetail(null);
User user1 = userMapper.login(user);
if (user1 != null) {
// 如果用户已经存在
result.setMsg("登录成功");
result.setSuccess(true);
result.setDetail(user1);
} else {
result.setMsg("用户或密码错误");
}
return result;
}
}
公共类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>