springboot实现增删改查,简单的登录功能,springboot+mybatis 狂神说

2021.12.5号 亲测可用,mysql 8.0.23 tomcat8.5 maven3.8

先看效果
在这里插入图片描述

文章末尾有整个文件的打包
在这里插入图片描述项目结构如图所示
pom.xml 所需要的jar包
注意版本问题,

<?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.6.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.yang</groupId>
    <artifactId>springboot-05</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-05</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-jdbc</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
      // themleaf的所需要的一个jar包
        
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>1.9.22</version>
        </dependency>
        
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.0</version>
        </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>

建数据库,b站视频里狂神是模拟的数据库,我是自己建的一个数据库。

CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot` /*!40100 DEFAULT
CHARACTER SET utf8 */;
USE `springboot`;
/*Table structure for table `department` */
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
`id` int(3) NOT NULL AUTO_INCREMENT COMMENT '部门id',
`department_name` varchar(20) NOT NULL COMMENT '部门名字',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=106 DEFAULT CHARSET=utf8;
/*Data for the table `department` */
insert into `department`(`id`,`department_name`) values (101,'技术部'),
(102,'销售部'),(103,'售后部'),(104,'后勤部'),(105,'运营部');
/*Table structure for table `employee` */
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`id` int(5) NOT NULL AUTO_INCREMENT COMMENT '雇员id',
`last_name` varchar(100) NOT NULL COMMENT '名字',
`email` varchar(100) NOT NULL COMMENT '邮箱',
`gender` int(2) NOT NULL COMMENT '性别1 男, 0 女',
`department` int(3) NOT NULL COMMENT '部门id',
`birth` datetime NOT NULL COMMENT '生日',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1006 DEFAULT CHARSET=utf8;
/*Data for the table `employee` */
insert into
`employee`(`id`,`last_name`,`email`,`gender`,`department`,`birth`) values
(1001,'张三','24736743@qq.com',1,101,'2020-03-06 15:04:33'),(1002,'李
四','24736743@qq.com',1,102,'2020-03-06 15:04:36'),(1003,'王
五','24736743@qq.com',0,103,'2020-03-06 15:04:37'),(1004,'赵
六','24736743@qq.com',1,104,'2020-03-06 15:04:39'),(1005,'孙
七','24736743@qq.com',0,105,'2020-03-06 15:04:45');

pojo层 放实体类,只举了一个例子
Employee

package com.yang.pojo;

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

import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    //1 male, 0 female
    private Integer gender;
    private Integer department;
    private Date birth;
    private Department eDepartment;
}

mapper层放一些接口,EmployeeMapper

package com.yang.mapper;

import com.yang.pojo.Employee;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;
@Mapper
@Repository
public interface EmployeeMapper {
    // 获取所有员工信息
    List<Employee> getEmployees();

    // 新增一个员工
    int save(Employee employee);

    // 通过id获得员工信息
    Employee get(Integer id);

    // 通过id删除员工
    int delete(Integer id);

    //修改员工
    int update(Employee employee);
}

sql语句放在resource/mapper/EmployeeMapper.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.yang.mapper.EmployeeMapper">
    <resultMap id="EmployeeMap" type="Employee">
        <id property="id" column="eid"/>
        <result property="lastName" column="last_name"/>
        <result property="email" column="email"/>
        <result property="gender" column="gender"/>
        <result property="birth" column="birth"/>
        <association property="eDepartment" javaType="Department">
            <id property="id" column="did"/>
            <result property="departmentName" column="dname"/>
        </association>
    </resultMap>
    <select id="getEmployees" resultMap="EmployeeMap">
select e.id as eid,last_name,email,gender,birth,d.id as
did,d.department_name as dname
from department d,employee e
where d.id = e.department
</select>
    <insert id="save" parameterType="Employee">
insert into employee (last_name,email,gender,department,birth)
values (#{lastName},#{email},#{gender},#{department},#{birth});
</insert>
    <select id="get" resultType="Employee">
select * from employee where id = #{id}
</select>
    <delete id="delete" parameterType="int">
delete from employee where id = #{id}
</delete>
    <update id="update" parameterType="Employee">
 update employee set last_name = #{lastName},email=#{email},gender=#{gender},birth=#{birth}
      where id = #{id};
</update>

</mapper>

application.yml配置文件
注意修改数据库信息,8.0以上的mysql需要加useSSL=true

spring:
 datasource:
  username: root
  password: 123456
#?serverTimezone=UTC解决时区的报错
  url: jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
  driver-class-name: com.mysql.cj.jdbc.Driver
  type: com.alibaba.druid.pool.DruidDataSource
 thymeleaf:
  cache: false #关闭缓存
  mode: HTML5 #设置模板类型
  encoding: utf-8  #设置编码
  suffix: .html
##Spring Boot 默认是不注入这些属性值的,需要自己绑定
##druid 数据源专有配置
#  initialSize: 5
#  minIdle: 5
#  maxActive: 20
#  maxWait: 60000
#  timeBetweenEvictionRunsMillis: 60000
#  minEvictableIdleTimeMillis: 300000
#  validationQuery: SELECT 1 FROM DUAL
#  testWhileIdle: true
#  testOnBorrow: false
#  testOnReturn: false
#  poolPreparedStatements: true
##配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
##如果允许时报错 java.lang.ClassNotFoundException:
#  org.apache.log4j.Priority
#  #则导入 log4j 依赖即可,Maven 地址:
#  https://mvnrepository.com/artifact/log4j/log4j
#  filters: stat,wall,log4j
#  maxPoolPreparedStatementPerConnectionSize: 20
#  useGlobalDataSourceStat: true
#  connectionProperties:
#druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.yang.pojo

application.properties

#关闭模板引擎
spring.thymeleaf.cache=false

# 国际化 我们的配置文件,放的真实路径
spring.messages.basename=i18n.login

#这样的话,我们现在就支持 - 的格式了,但是又不支持 / 了
spring.mvc.format.date-time=yyyy-MM-dd HH:mm:ss

config下的LoginHandlerINterceptor类设置登录拦截器

package com.yang.config;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//登录拦截器
public class LoginHandlerINterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
       //登录成功后,应该会有用户的session
        Object loginUser = request.getSession().getAttribute("loginUser");
        if (loginUser==null){
            request.setAttribute("msg","没有权限,请先登录");
            request.getRequestDispatcher("/index.html").forward(request,response);
            return false;
        }else {
            //登录放行
        return true;
    }
}}

WebMVcControllers类

package com.yang.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMVcControllers implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry){
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/index.html").setViewName("index");
        registry.addViewController("/main.html").setViewName("dashboard");
//        映射  后面是真实的页面名字,但是controller层需要重定向
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(new LoginHandlerINterceptor()).
                addPathPatterns("/**").
                excludePathPatterns("/index.html","/","/user/login","/css/**","/js/**","/img/**");
//        拦截器,放行以下文件,文件夹下的/index.html","/","/user/login","/css/**","/js/**","/img/**"
    }

}

controller
Departmentcontroller这个类可以换下名字直接叫controller,这个类主要是设置登录消息的,账号随便输入,密码设置的是123456
EmployeeController类

package com.yang.controller;

import com.sun.org.apache.regexp.internal.RE;
import com.yang.mapper.DepartmentMapper;
import com.yang.mapper.EmployeeMapper;
import com.yang.pojo.Department;
import com.yang.pojo.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

@Controller

public class EmployeeController {
    @Autowired
    EmployeeMapper employeeMapper;
    @Autowired
    DepartmentMapper departmentMapper;

    //  员工页面list
    @RequestMapping("/emps")
    public String list(Model model) {
        List<Employee> employees = employeeMapper.getEmployees();
        model.addAttribute("emps", employees);
        return "emp/list";
    }

    //返回的添加页面
    @GetMapping("/add")
    public String toAddpage(Model model) {
        List<Department> departments = departmentMapper.getDepartments();
        model.addAttribute("departments", departments);
          return "emp/add";
    }

    //实现添加功能
    @RequestMapping("/addEmp")
    public String add(Employee employee){
        System.out.println(employee);
        employeeMapper.save(employee);
        //保存员工信息
//回到员工列表页面,可以使用redirect或者forward
        return "redirect:/emps";
    }



    //返回的修改页面
    @GetMapping("/emp/{id}")
    public String toUpdateEmp(@PathVariable("id") Integer id, Model model){
     //根据id查出来员工
        Employee employee = employeeMapper.get(id);
        System.out.println(employee);
      //将员工信息返回页面
        model.addAttribute("emp",employee);
        //查出所有的部门,提供修改选择
//        List<Department> departments = departmentMapper.getDepartments();
//        model.addAttribute("departments",departments);
        return "emp/update";
    }
    //修改实现
    @PostMapping("/updateEmp")
    public String updateEmp(Employee employee){
        employeeMapper.update(employee);
//回到员工列表页面
        return "redirect:/emps";
    }


    //删除
    @GetMapping("/delEmp/{id}")
    public String delEmp(@PathVariable("id") Integer id){
        employeeMapper.delete(id);
        return "redirect:/emps";
    }




}

效果如下

在这里插入图片描述

一定要注意目录信息,别放错地方了。
静态资源,html文件
整个项目资源
链接:https://pan.baidu.com/s/19KjNHlHdaQ6ku63D_KUedA
提取码:wwww

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值