首页 > 其他分享 >SpringBoot教学资料4-SpringBoot简单增删改查(带前端)

SpringBoot教学资料4-SpringBoot简单增删改查(带前端)

时间:2023-07-04 09:44:45浏览次数:47  
标签:SpringBoot 改查 id 教学资料 user org import public name

最终样式:

增:

 

删:

 

 

改:

 

 项目结构:

 

 

 

 

 - springboot1.5.9以下兼容jdk1.7

- springboot2.x.x版本兼容jdk1.8

- springboot3.0及以上版本兼容jdk17

- springboot2.1之后的版本已经兼容JDK11

 

pom.xml:

<?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.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.bai</groupId>
    <artifactId>crudspringboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>crudspringboot</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>2.3.1</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>2.3.1</version>
            <scope>test</scope>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- tomcat 依赖包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>
        <!-- servlet 依赖包 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>
        <!-- JSTL (JSP standard Tag Library) JSP 标准标签库 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 

application.properties:

# 监听端口
server.port=8080

# Spring datasource配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456


# 视图层的配置
spring.mvc.view.prefix=WEB-INF/views/
spring.mvc.view.suffix=.jsp

#DispatcherServlet 的配置# 启动时 加载
spring.jersey.servlet.load-on-startup=1

# MyBatis的配置# Mapper文件的位置 * 所有
mybatis.mapper-locations=classpath:mapper/*.xml
# Model 层的配置 包
mybatis.type-aliases-package=com.bai.crudspringboot.model

 

 

 user.jap:

<%@ page isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!-- 简体中文 -->
<html lang="zh-cmn-Hans">

<head>
    <title>用户列表</title>
</head>

<body>
<table border="1">
    <tr>
        <td>ID</td>
        <td>Name</td>
        <td>Age</td>
        <td>删除</td>
        <td>修改</td>
    </tr>
    <c:forEach var="user" items="${users}">
        <tr>
            <td>${user.id}</td>
            <td>${user.name}</td>
            <td>${user.age}</td>
            <td><a href='javascript:userDel("${user.id}")'> 删除 </a></td>
            <td><a href="updateview?id=${user.id}"> 修改 </a></td>
        </tr>
    </c:forEach>
</table>
<br />
<br />
<a href="addview"> 新增用户 addview </a>
<br />
<br />
<a href="addview2"> 新增用户2  addview2</a>
</body>
<script src="/asset/js/jquery-3.5.1.min.js"></script>
<script type="text/javascript">
    // JS 定义一个名为userDel的js方法,可传入参数id
    function userDel(id){
        $.ajax({
            // 请求方式 POST GET 与控制器的设置一致
            type : "POST",
            // 访问控制器的url
            url : "delete",
            //往控制器传入的参数,JSON居多,String
            data : {
                "id" : id
            },
            // 接收后台的数据类型 text json 和 控制器的 return 一致
            dataType : "text",
            //请求成功时
            success : function(message) {
                if (message == "ok"){
                    alert("删除成功");
                    location.href = "alluser";
                } else {
                    alert("删除失败");
                }
            },
            //请求失败时
            error : function(message) {
                alert("删除失败");
            }
        });
    }
</script>
</html>

addview.jsp

<%@ page isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!-- 简体中文 -->
<html lang="zh-cmn-Hans">
<head>
    <title>新增用户</title>
</head>
<body>
新增用户
<form id="userInfo" method="post">
    name: <input type="text" name="name" id="name"><br>
    age:  <input type="text" name="age" id="age"><br>
    <input type="button" id="commit"  value="提交">
</form>
</body>
<script src="/asset/js/jquery-3.5.1.min.js"></script>
<script>
    $(function () {
        // # 之后的变量和 id="commit" 值一致 才可以绑定
        $("#commit").click(function () {
            //id="name" 找到的
            var name = $("#name").val();
            var age = $("#age").val();
            //debugger 调试使用
            $.ajax({
                type : "POST",
                url : "add",
                data : {
                    "name" : name,
                    "age" : age
                },
                // 接收后台的数据类型
                dataType : "text",
                // 请求成功
                success : function(message) {
                    if (message == "ok"){
                        alert("新增成功");
                        // 调用显示所有用户的控制器
                        location.href = "alluser";
                    } else {
                        alert(message);
                    }
                },
                //请求失败
                error : function(message) {
                    alert("新增失败");
                }
            });
        })
    })
</script>
</html>

 

 updateview.jsp

<%@ page isELIgnored="false" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!-- 简体中文 -->
<html lang="zh-cmn-Hans">
<head>
    <title>修改用户</title>
</head>
<body>
修改用户
<form id="userInfo" method="post">
    id: <input type="text" name="id" id="id" value="${user.id}" disabled="disabled"><br>
    name: <input type="text" name="name" id="name" value="${user.name}"><br>
    age:  <input type="text" name="age" id="age" value="${user.age}"><br>
    <input type="button" id="commit"  value="更新用户">
</form>
</body>
<script src="/asset/js/jquery-3.5.1.min.js"></script>
<script>
    $(function () {
        $("#commit").click(function () {
            var id = $("#id").val();
            var name = $("#name").val();
            var age = $("#age").val();
            $.ajax({
                type : "POST",
                url : "update",
                data : {
                    "id" : id,
                    "name" : name,
                    "age" : age
                },
                // 接收后台的数据类型
                dataType : "text",
                // 返回成功
                success : function(message) {
                    if (message == "ok"){
                        alert("修改成功");
                        // 调用显示所有用户的控制器
                        location.href = "alluser";
                    } else {
                       alert(message);
                    }
                },
                //失败
                error : function(message) {
                    alert("修改请求失败");
                }
            });
        })
    })
</script>
</html>

 

 User.java:

package com.bai.crudspringboot.model;

// 和数据库的表设计、字段对应的
public class User {

    private String id;
    private String name;
    private int age;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 

UserDao.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">

<!-- namespace 包名+接口名 -->
<mapper namespace="com.bai.crudspringboot.dao.UserDao">
    <resultMap id="UserMap" type="com.bai.crud_springboot.model.User">
        <id column="id" javaType="String" property="id"/>
        <result column="name" javaType="String" property="name"/>
        <result column="age" jdbcType="INTEGER" property="age" />
    </resultMap>

    <!-- id = 接口文件的 方法名
    resultType 返回值类型 要与使用的对象一致
    -->
    <select id="select" resultType="com.bai.crudspringboot.model.User">
        SELECT * FROM user order by age
    </select>

    <!-- 增加用户
    parameterType 传入的参数类型
    因为MyBatis做了优化,以接口为准

    #占位符
    MySQL客户端的SQL语句
    insert into  `user` (`id`, `name`, `age`) values ('fa4f46','张三','23');
    需要改为
    insert into `user` (`id`, `name`, `age`) values (#{id},#{name},#{age});

    'fa4f46' 改为 #{id}
    特定的值  改为 #{id}

    规范  #{类的变量名称}
    -->
    <insert id="addUser" parameterType="com.bai.crudspringboot.model.User" >
        insert into `user` (`id`, `name`, `age`)
        values (#{id},#{name},#{age});
    </insert>

    <!-- 删除用户 -->
    <delete id="delUser" parameterType="com.bai.crudspringboot.model.User" >
        delete from user where id = #{id}
    </delete>

    <select id="selectById" resultType="com.bai.crudspringboot.model.User">
        SELECT * FROM user where id = #{id}
    </select>

    <!-- 更新用户 -->
    <update id="updateUser" parameterType="com.bai.crudspringboot.model.User" >
        update user set id= #{id},name= #{name},age= #{age} where id = #{id}
    </update>

</mapper>

UserDao.java:

package com.bai.crudspringboot.dao;

import com.bai.crudspringboot.model.User;

import java.util.List;

public interface UserDao {

    // 方法名和 UserDao.xml select标签的select对应
    List<User> select();

    void addUser(User user);

    void delUser(String id);

    User selectById(String id);

    void updateUser(User user);
}

UserService.java:

package com.bai.crudspringboot.service;

import com.bai.crudspringboot.model.User;

import java.util.List;

// 用户服务层的接口
public interface UserService {

    List<User> get();

    void insert(User user);

    void remove(String id);

    User getById(String id);

    void updateInfo(User user);

}

UserServiceImpl.java:

package com.bai.crudspringboot.service.Impl;

import com.bai.crudspringboot.dao.UserDao;
import com.bai.crudspringboot.model.User;
import com.bai.crudspringboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
/*
UserService 接口的实现

@Service 以当前类为模板创建一个对象放入Spring容器中
id:默认小驼峰
此时id 是  userServiceImpl

 */
@Service
public class UserServiceImpl implements UserService {
    /*
    @Autowired
    把 Dao层的 对象,从Spring中拿出来,注入到当前Bean中
     */
    @Autowired
    private UserDao userDao;

    @Override
    public List<User> get() {

        // 因为业务简单 复杂之后代码很多
        List<User> users = userDao.select();

        return users;
    }

    @Override
    public void insert(User user) {

        userDao.addUser(user);
    }

    @Override
    public void remove(String id) {
        userDao.delUser(id);
    }

    @Override
    public User getById(String id) {
        return userDao.selectById(id);
    }

    @Override
    public void updateInfo(User user) {
        userDao.updateUser(user);
    }
}

 

UserController.java:

如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。

package com.bai.crudspringboot.controller;

import com.bai.crudspringboot.model.User;
import com.bai.crudspringboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.UUID;
/*
 以类UserController为模板
 创建一个userController对象
 存放到Spring容器中
 */
@Controller
public class UserController {
    /*
    @Autowired:在Spring容器中,找一个Bean,注入到当前Bean中
    Bean:指定的id 小驼峰
    备注:可单独使用
    配对注解
    @Qualifier
    要求 userServiceImpl Bean注入到当前Bean中
    备注:和@Autowired配合使用,服务层有多态时常用
     */
    @Autowired
    @Qualifier("userServiceImpl")
    private UserService userService;
    /*
    显示用户列表
    @RequestMapping 设置请求的参数
    value 控制器名
    method 请求方式
     */
    @RequestMapping(value = "/alluser", method = RequestMethod.GET)
    public ModelAndView alluser() {
        List<User> usersResult = userService.get();
        ModelAndView mav = new ModelAndView();
        // 视图的名字 .jsp不带
        mav.setViewName("user");
        //携带的数据,让试图去展示
        mav.addObject("users", usersResult);
        return mav;
    }
    /*
    第一种写法
    跳入到新增用户的 jsp
     */
    @RequestMapping(value = "/addview", method = RequestMethod.GET)
    public ModelAndView addview() {

        ModelAndView mav = new ModelAndView();
        mav.setViewName("addview");

        return mav;
    }
    /*
    第二种写法
    跳入到新增用户的 jsp
    请求方式默认是 GET
     */
    @RequestMapping(value = "addview2")
    public String addView2() {
        return "addview";
    }
    /*
     接收用户提交过来的用户信息

     @ResponseBody = 应答 消息体
     不在让此方法去视图解析题
     而是 在请求过来的http的消息体中写入返回的值,给客户端(jsp页面、第三方、软件客户端等)

     控制器 add
     方法 add
     必须一致吗?不是
     一致是因为,方便、快捷、整洁
     */
    @ResponseBody
    @RequestMapping(value = "add", method = RequestMethod.POST)
    public String add(HttpServletRequest request, User user) {
        if (user.getAge() <0 || user.getAge() >200){
            return "年龄不正确";
        }

        // 生成一个 id
        String id = UUID.randomUUID().toString();

        user.setId(id);

        //调用服务层方法增加一个用户
        userService.insert(user);
        return "ok";
    }
    /*
    删除用户
    只在方法上有此注解
    @RequestMapping(value = "delete"
    访问方式 域名:端口/delete

    类和方法上有此注解
    类 @RequestMapping(value = "/user"
    方法 @RequestMapping(value = "/delete"
    访问方式 域名:端口/user/delete
     */
    @ResponseBody
    @RequestMapping(value = "delete", method = RequestMethod.POST)
    public String delete(HttpServletRequest request, String id) {
        /*
        调用服务层方法 删除一个用户
        此方法并不非常严谨,待改进
         */
        userService.remove(id);

        return "ok";
    }

    //显示一个用户
    @RequestMapping(value = "/updateview", method = RequestMethod.GET)
    public ModelAndView updateview(String id) {

        User userResult = userService.getById(id);

        ModelAndView mav = new ModelAndView();
        mav.setViewName("updateview");
        mav.addObject("user", userResult);

        return mav;
    }

    // 更新用户
    @ResponseBody
    @RequestMapping(value = "update", method = RequestMethod.POST)
    public String update(HttpServletRequest request, User user) {

        //调用服务层方法 更新一个用户
        userService.updateInfo(user);
        return "ok";
    }
}

 

CrudSpringBootApplication.java:

package com.bai.crudspringboot;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//去扫描Dao层接口

@MapperScan("com.bai.crudspringboot.dao")
@SpringBootApplication
public class CrudspringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(CrudspringbootApplication.class, args);
    }

}

 

 

访问网址:http://localhost:8080/alluser

 

 

   

标签:SpringBoot,改查,id,教学资料,user,org,import,public,name
From: https://www.cnblogs.com/lysboke/p/17524822.html

相关文章

  • SpringBoot教学补充资料3-Maven安装
    Maven下载地址:https://maven.apache.org/download.cgi下载后进行解压,记住解压路径。         mvn -v ......
  • SpringBoot教学资料3-SpringBoot启动常见问题
    java.lang.RuntimeException:java.lang.RuntimeException:org.codehaus.plexus.component.repository.excMaven版本过高,与你使用的IDEA版本不兼容。推荐版本:maven3.6(建议)/maven3.9控制台Processterminatedhttps://blog.csdn.net/weixin_44589991/article/details/115013......
  • SpringBoot教学补充资料1-基础SQL语句
    #查询所有内容select*fromemployeeselect(属性1,属性2,...)from表名#通过id查询select*fromemployeewhereuid=1select(属性1,属性2,...)from表名where属性=指定的属性值#增加insertintoemployee(uid,uname,uage,uposition)values(8,'小黑',38,'实习生......
  • SpringBoot教学补充资料2-MyBatis简单查询项目
    SQL:CREATETABLE`tb_user`(`id`int(11)NOTNULLAUTO_INCREMENT,`username`varchar(20)DEFAULTNULL,`password`varchar(20)DEFAULTNULL,`gender`char(1)DEFAULTNULL,`addr`varchar(30)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBA......
  • 解决Springboot项目打成jar包后获取resources目录下的文件失败的问题
    前几天在项目读取resources目录下的文件时碰到一个小坑,明明在本地是可以正常运行的,但是一发到测试环境就报错了,说找不到文件,报错信息是:classpathresource[xxxx]cannotberesolvedtoabsolutefilepathbecauseitdoesnotresideinthefilesystem:jar:file:xxxx.jar!/......
  • SpringBoot 服务接口限流
    前言在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。限流可以认为服务降级的一种,限流通过限制请求的流量以达到保护系统的目的。一般来说,系统的吞吐量是可以计算出一个阈值的,为了保证系统的稳定运行,一旦达到这个阈值,就需要限制流量并采取一些措施以完成限制流量的......
  • SpringBoot项目从0到1配置logback日志打印
    大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。以下是正文!一、写文背景我们在写后端项目的时候,日志打印是必需的。支持SpringBoot项目的日志框架一般有log4j、logback,这二者各有优......
  • springboot中SPI的实现
    在SpringBoot中,可以使用Java的SPI机制来实现SPI。首先,定义一个接口,例如:publicinterfaceMyService{voiddoSomething();}然后,在该接口的实现类中使用Java的SPI注解,例如:publicclassMyServiceImplimplementsMyService{@OverridepublicvoiddoSomethin......
  • springBoot面经
    对springboot的了解,SpringBoot自动装配原理答:自动装配就是自动把第三方组件的Bean转载到IOC容器里面,不需要去手动配置。在springboot应用里只需要在启动类上加上@SpringBootApplication注解,就可以实现自动装配。这个复合注解中主要实现自动装配的注解是@EnableAutoConfiguration......
  • Task Execution and Scheduling In SpringBoot
    开天辟地TaskExecutionandSchedulingIntheabsenceofanExecutorbeaninthecontext,SpringBootauto-configuresaThreadPoolTaskExecutorwithsensibledefaultsthatcanbeautomaticallyassociatedtoasynchronoustaskexecution(@EnableAsync)andSpr......