MySQL
前提:当地有安装 MySQL 。
毗连
使用工具 Navicat Premium ,或者 IDEA 自带的 DB 工具,或者其他能毗连 MySQL 数据库的工具都可以。
1)创建 MySQL Data Source
2)根据当地设置毗连上 MySQL,点击【Test Connection】,表现毗连乐成,再点击【OK】按钮即可乐成毗连上 DB。
版本
此时已经是乐成毗连上 MySQL,在 console 窗口输入命令检察当地 MySQL 的版本。
依赖
前往公共 Maven 检察,发现 MySQL 没有8.0.34的版本,所以用降个版本用 v8.0.33。
仓库地点:https://mvnrepository.com/artifact/com.mysql/mysql-connector-j
pom.xml
- <dependency>
- <groupId>com.mysql</groupId>
- <artifactId>mysql-connector-j</artifactId>
- <version>8.0.33</version>
- </dependency>
复制代码 application.yml
- spring:
- application:
- name: system
- thymeleaf:
- prefix: classpath:/templates/ #前缀,默认为classpath:/templates/
- suffix: .html #后缀,默认为.html
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/system?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
- username: root
- password: root
复制代码 com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别及设定 serverTimezone 的方法:https://www.jb51.net/program/298475don.htm
建库建表
新建库 system,新建表 t_user。
- #建库,库名: system
- CREATE DATABASE `system` CHARACTER SET 'utf8mb4';
- #进入 system 数据库
- use `system`;
- #建表,表名: t_user
- CREATE TABLE `system`.`t_user` (
- `id` int NOT NULL AUTO_INCREMENT,
- `name` varchar(255) NOT NULL,
- `age` tinyint NULL,
- `gender` varchar(2) NULL COMMENT '性别',
- `deleted` tinyint(1) NOT NULL COMMENT '已经删除:0否,1是',
- `create_time` timestamp NOT NULL,
- `update_time` timestamp NULL,
- PRIMARY KEY (`id`)
- );
复制代码 MyBatis
官网
MyBatis 3:https://mybatis.org/mybatis-3/
MyBatis-Plus(推荐):https://baomidou.com/
依赖
pom.xml
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.5.7</version>
- </dependency>
复制代码 设置
1)启动类添加 @MapperScan 注解
SystemApplication.java
- @SpringBootApplication
- @MapperScan("com.lm.system.mapper")
- public class SystemApplication extends SpringBootServletInitializer {}
复制代码 插件(可选)
图标不同是因为装了插件,这个装不装都可以,装了可以在 Mapper 接口和 Mapper.xml 两个间跳转等功能。
实当代码
实体类
实体类 User 实用于背景程序操作,数据库操作。
User.java
- package com.lm.system.common;
- import com.baomidou.mybatisplus.annotation.IdType;
- import com.baomidou.mybatisplus.annotation.TableId;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- import java.util.Date;
- /**
- * @Author: DuHaoLin
- * @Date: 2024/7/26
- */
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- public class User {
- @TableId(value = "id", type = IdType.INPUT)
- private Integer id; //自增长
- private String name;
- private Integer age;
- private String gender; //性别
- private Integer deleted; //是否已经删除:0否,1是
- private Date createTime;
- private Date updateTime;
- }
复制代码 UserDTO 实用于数据传输。
UserDTO.java
- package com.lm.system.common.dto;
- import io.swagger.annotations.ApiModel;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- /**
- * @Author: DuHaoLin
- * @Date: 2024/7/27
- */
- @Data
- @NoArgsConstructor
- @AllArgsConstructor
- @ApiModel("用户实体类")
- public class UserDTO {
- private Integer id;
- private String name;
- private Integer age;
- private String gender;
- private String createTime;
- private String updateTime;
- }
复制代码 Mapper / Dao 层
在 system 目录下,新建 mapper 目录,在 mapper 目录下新建 UserMapper 接口。
UserMapper.java(这是个接口)
- package com.lm.system.mapper;
- import com.lm.system.common.User;
- import org.apache.ibatis.annotations.Param;
- import java.util.List;
- /**
- * @Author: DuHaoLin
- * @Date: 2024/7/27
- */
- public interface UserMapper {
- int insertUser(@Param("user") User user); //写入单个用户信息
- int updateUser(@Param("user") User user); //修改单个用户信息
- User queryUserById(int id); //按ID查询用户信息
- List<User> queryAllUser(); //查询所有用户信息
- int deleteUser(int id); //按ID删除用户
- }
复制代码 在 resource 目录下,新建 com 目录,在 com 目录下新建 lm 目录,在 lm 目录下新建 system 目录,在 system 目录下新建 UserMapper.xml 文件。
注:保持 resource 下的 mapper 目录的层级,和 src 中的 mapper 目录的层级一样。
UserMapper.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.lm.system.mapper.UserMapper">
- <!-- 返回结果集 -->
- <resultMap id="users" type="com.lm.system.common.User">
- <id property="id" column="id" jdbcType="INTEGER" />
- <result property="name" column="name" jdbcType="VARCHAR" />
- <result property="age" column="age" jdbcType="INTEGER" />
- <result property="gender" column="gender" jdbcType="VARCHAR" />
- <result property="deleted" column="deleted" jdbcType="INTEGER" />
- <result property="createTime" column="create_time" jdbcType="DATE" />
- <result property="updateTime" column="update_time" jdbcType="DATE" />
- </resultMap>
- <resultMap id="userDTO" type="com.lm.system.common.dto.UserDTO">
- <result property="name" column="name" jdbcType="VARCHAR" />
- <result property="age" column="age" jdbcType="INTEGER" />
- <result property="gender" column="gender" jdbcType="VARCHAR" />
- </resultMap>
- <sql id="baseColumn">
- id, `name`, age, gender, deleted, create_time, update_time
- </sql>
- <insert id="insertUser" parameterType="com.lm.system.common.User"
- keyColumn="id" keyProperty="id" useGeneratedKeys="true">
- INSERT INTO t_user (name, age, gender, deleted, create_time, update_time)
- VALUES (#{user.name}, #{user.age}, #{user.gender}, 0, NOW(), NOW())
- </insert>
- <update id="updateUser" parameterType="com.lm.system.common.User">
- UPDATE t_user SET
- <if test="user.name != '' and user.name != null"> name=#{user.name}, </if>
- <if test="user.age != null"> age=#{user.age}, </if>
- <if test="user.gender != '' and user.gender != null"> gender=#{user.gender}, </if>
- update_time=NOW()
- WHERE id = #{user.id}
- </update>
- <select id="queryUserById" parameterType="int" resultType="com.lm.system.common.User">
- SELECT <include refid="baseColumn"></include>
- FROM t_user
- WHERE id = #{id} AND deleted = 0
- </select>
- <select id="queryAllUser" resultMap="userDTO">
- SELECT <include refid="baseColumn"></include>
- FROM t_user
- WHERE deleted = 0
- </select>
- <update id="deleteUser" parameterType="int">
- UPDATE t_user SET deleted = 1
- WHERE id = #{id}
- </update>
- </mapper>
复制代码 Service 层
在 system 目录下,新建 service 目录,在 service 目录下新建 UserService 接口。
UserService.java(这是一个接口)
- package com.lm.system.service;
- import com.lm.system.common.User;
- import java.util.List;
- /**
- * @Author: DuHaoLin
- * @Date: 2024/7/27
- */
- public interface UserService {
- int insertUser(User user); //写入单个用户信息
- int updateUser(User user); //修改单个用户信息
- User queryUserById(int id); //按ID查询用户信息
- List<User> queryAllUser(); //查询所有用户信息
- int deleteUser(int id); //按ID删除用户
- }
复制代码 在 service 目录下新建 impl 目录,在 impl 目录下新建 UserServiceImpl 类。
UserServiceImpl.java
- package com.lm.system.service;
- import com.lm.system.common.User;
- import com.lm.system.common.dto.UserDTO;
- import java.util.List;
- /**
- * @Author: DuHaoLin
- * @Date: 2024/7/27
- */
- public interface UserService {
- int insertUser(User user); //写入单个用户信息
- int updateUser(User user); //修改单个用户信息
- User queryUserById(int id); //按ID查询用户信息
- List<User> queryAllUser(); //查询所有用户信息
- int deleteUser(int id); //按ID删除用户
- }
复制代码 Exception
在 system 目录下,新建 exception 目录,exception 目录下新建 DatabaseException 类。
DataBaseException.java
- package com.lm.system.exception;
- /**
- * @Author: DuHaoLin
- * @Date: 2024/7/27
- */
- public class DataBaseException extends RuntimeException {
- public DataBaseException() {
- super();
- }
- public DataBaseException(String message) {
- super(message);
- }
- public DataBaseException(String message, Throwable cause) {
- super(message, cause);
- }
- }
复制代码 GlobalExceptionHandler.java
添加一个捕获 DatabaseException 的方法。
- @ExceptionHandler({DataBaseException.class})
- public String handleDataBaseException(Exception e, HttpServletRequest request) {
- log.error("500-数据库操作失败,{},{}", e.getMessage(), request.getServletPath());
- return ResultBody
- .build(HttpStatus.INTERNAL_SERVER_ERROR)
- .setMsg(e.getMessage())
- .getReturn();
- }
复制代码 Util
在 system 目录下,新建 ResultUtil 类。
ResultUtil.java
- package com.lm.system.util;
- import com.lm.system.common.ResultBody;
- import org.springframework.http.HttpStatus;
- /**
- * @Author: DuHaoLin
- * @Date: 2024/7/27
- */
- public class ResultUtil{
- /**
- * 根据操作记录数判断是否操作成功,返回对应的结果
- * @param i 本次操作的数据库操作记录数
- */
- private static String getResult(int i, String successMsg, String failMsg) {
- boolean b = i == 0;
- return ResultBody
- .build(b ? HttpStatus.INTERNAL_SERVER_ERROR : HttpStatus.OK)
- .setMsg(b ? failMsg : successMsg)
- .getReturn();
- }
- public static String getAddResult(int i) {
- return getResult(i, "添加成功", "添加失败");
- }
- public static String getUpdateResult(int i) {
- return getResult(i, "修改成功", "修改失败");
- }
- public static String getDeleteResult(int i) {
- return getResult(i, "删除成功", "删除失败");
- }
- }
复制代码 Controller 层
UserController.java
- package com.lm.system.controller;
- import com.lm.system.common.ResultBody;
- import com.lm.system.common.User;
- import com.lm.system.common.dto.UserDTO;
- import com.lm.system.service.UserService;
- import com.lm.system.util.ResultUtil;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import org.springframework.beans.BeanUtils;
- import org.springframework.http.HttpStatus;
- import org.springframework.web.bind.annotation.*;
- import javax.annotation.Resource;
- import java.util.List;
- /**
- * @Author: DuHaoLin
- * @Date: 2024/7/26
- */
- @RestController
- @Api(tags = "用户接口")
- @RequestMapping("user")
- public class UserController {
- @Resource
- private UserService userService;
- @PostMapping("addUser")
- @ApiOperation("添加用户")
- public String addUser(@RequestBody UserDTO dto) {
- User user = new User();
- BeanUtils.copyProperties(dto, user);
- int i = userService.insertUser(user);
- return ResultUtil.getAddResult(i);
- }
- @PutMapping("updateUser")
- @ApiOperation("修改用户")
- public String updateUser(@RequestBody User user) {
- int i = userService.updateUser(user);
- return ResultUtil.getUpdateResult(i);
- }
- @GetMapping("userById/{id}")
- @ApiOperation("按用户ID获取用户信息")
- public String queryUserById(@PathVariable int id) {
- User user = userService.queryUserById(id);
- return ResultBody
- .build(user == null ? HttpStatus.NO_CONTENT : HttpStatus.OK)
- .setData(user)
- .setCount(user == null ? 0 : 1)
- .getReturn();
- }
- @GetMapping("users")
- @ApiOperation("获取所有用户信息")
- public String users() {
- List<User> users = userService.queryAllUser();
- return ResultBody
- .build(HttpStatus.OK)
- .setData(users)
- .setCount(users.size())
- .getReturn();
- }
- @DeleteMapping("deleteUser/{id}")
- @ApiOperation("按用户ID删除用户信息")
- public String deleteUser(@PathVariable int id) {
- int i = userService.deleteUser(id);
- return ResultUtil.getDeleteResult(i);
- }
- }
复制代码 UserPageController.java
- package com.lm.system.controller;
- import com.lm.system.common.User;
- import com.lm.system.service.UserService;
- import io.swagger.annotations.Api;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.web.bind.annotation.GetMapping;
- import javax.annotation.Resource;
- import java.util.List;
- /**
- * @Author: DuHaoLin
- * @Date: 2024/7/26
- */
- @Controller
- @Api(tags = "用户页面")
- public class UserPageController {
- @Resource
- private UserService userService;
- @GetMapping("userPage")
- public String user(Model model) {
- List<User> users = userService.queryAllUser();
- model.addAttribute("users", users);
- return "user";
- }
- }
复制代码 效果图
接口文档
添加用户接口
注:Post 方法要用 Swagger 或 Postman 软件进行访问,不能使用浏览器直接进行访问。
查询全部效户接口
删除用户接口
修改用户接口
用户页面
项目目录布局
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |