javaweb项目中完成数据的增删改查操作((maven,mybaits,tomcat,servlet,jsp包含 MVC模式 和 三层架构 ))

2023-10-27

目录

需求:完成品牌数据的增删改查操作

1.环境准备        

1.1 创建工程模块,引入坐标

 1.2创建三层架构的包结构

 1.3创建数据库表 tb_brand

1.4 创建实体类Brand

1.5 准备mybatis环境

2 .查询所有

2.1编写BrandMapper

2.2 准备一个工具类

2.3 编写BrandService

2.4 编写Servlet

2.5 编写brand.jsp页面

3. 添加

 3.1 编写BrandMapper方法

3.2 编写BrandService方法

3.3 改进brand.jsp页面

3.4 编写addBrand.jsp页面

3.5 编写servlet

4. 修改

4.1 回显数据

4.1.1 编写BrandMapper方法

4.1.2 编写BrandService方法

4.1.3 编写servlet

4.1.4 编写update.jsp页面

4.2 修改数据

.4.2.1 编写BrandMapper方法

4.2.2 编写BrandService方法

4.2.3 编写servlet

4.2.4 编写update.jsp页面

5.删除

5.1 编写BrandMapper方法

5.2 编写BrandService方法

5.3 编写Servlet


需求:完成品牌数据的增删改查操作

(maven,mybaits,mapper,tomcat,servlet,jsp包含 MVC模式 和 三层架构 )

整体架构:

1.环境准备        

  • 创建新的模块 brand_demo,引入坐标

  • 创建三层架构的包结构

  • 数据库表 tb_brand

  • 实体类 Brand

  • MyBatis 基础环境

    • Mybatis-config.xml

    • BrandMapper.xml

    • BrandMapper接口

1.1 创建工程模块,引入坐标

创建新的模块 brand_demo,引入坐标。先分析出要用到哪儿些技术,明确需要导入什么坐标

  • 需要操作数据库。mysql的驱动包

  • 要使用mybatis框架。mybaits的依赖包

  • web项目需要用到servlet和jsp。servlet和jsp的依赖包

  • 需要使用 jstl 进行数据展示。jstl的依赖包

 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>brand-demo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <packaging>war</packaging>

  <properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.11</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.30</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
      </plugin>
    </plugins>
  </build>

</project>

 1.2创建三层架构的包结构

 1.3创建数据库表 tb_brand

-- 删除tb_brand表
drop table if exists tb_brand;
-- 创建tb_brand表
create table tb_brand
(
    -- id 主键
    id           int primary key auto_increment,
    -- 品牌名称
    brand_name   varchar(20),
    -- 企业名称
    company_name varchar(20),
    -- 排序字段
    ordered      int,
    -- 描述信息
    description  varchar(100),
    -- 状态:0:禁用  1:启用
    status       int
);
-- 添加数据
insert into tb_brand (brand_name, company_name, ordered, description, status)
values ('三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0),
       ('华为', '华为技术有限公司', 100, '华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界', 1),
       ('小米', '小米科技有限公司', 50, 'are you ok', 1);

1.4 创建实体类Brand

pojo 包下创建名为 Brand 的类

package com.hmy.pojo;

/**
 * 品牌实体类
 */

public class Brand {
    // id 主键
    private Integer id;
    // 品牌名称
    private String brandName;
    // 企业名称
    private String companyName;
    // 排序字段
    private Integer ordered;
    // 描述信息
    private String description;
    // 状态:0:禁用  1:启用
    private Integer status;


    public Brand() {
    }

    public Brand(Integer id, String brandName, String companyName, String description) {
        this.id = id;
        this.brandName = brandName;
        this.companyName = companyName;
        this.description = description;
    }

    public Brand(Integer id, String brandName, String companyName, Integer ordered, String description, Integer status) {
        this.id = id;
        this.brandName = brandName;
        this.companyName = companyName;
        this.ordered = ordered;
        this.description = description;
        this.status = status;
    }

    public Integer getId() {
        return id;
    }

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

    public String getBrandName() {
        return brandName;
    }

    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public Integer getOrdered() {
        return ordered;
    }

    public void setOrdered(Integer ordered) {
        this.ordered = ordered;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Brand{" +
                "id=" + id +
                ", brandName='" + brandName + '\'' +
                ", companyName='" + companyName + '\'' +
                ", ordered=" + ordered +
                ", description='" + description + '\'' +
                ", status=" + status +
                '}';
    }
}

1.5 准备mybatis环境

  

在 resources下,定义核心配置文件 Mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--起别名-->
    <typeAliases>
        <package name="com.hmy.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis?useSSL=false&amp;useServerPrepStmts=true"/>
                <property name="username" value="root"/>
                <property name="password" value="121314"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--扫描mapper-->
        <package name="com.hmy.mapper"/>
    </mappers>
</configuration>

在 resources下创建放置映射配置文件的目录结构 com/hmy/mapper,并在该目录下创建映射配置文件 BrandMapper.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.hmy.mapper.BrandMapper">

<!--    如果查询到的字段名和实体类对象的属性名没有一一对应。
则在映射配置文件中使用 `resultMap` 标签定义映射关系-->
    <resultMap id="brandResultMap" type="brand">
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>
</mapper>

在java下创建com.hmy.mapper,并在该目录下创建BrandMapper接口

还有一个index.html,先写上

index.html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<a href="/brand-demo/selectAllServlet">查询所有</a>

</body>
</html>

 至此,准备工作就完成了~~

2 .查询所有

当我们点击index.html 页面中的 查询所有 这个超链接时,就能查询到上图的数据。

对于上述的功能,点击 查询所有 超链接是需要先请后端的 servlet ,由 servlet 跳转到对应的页面进行数据的动态展示。而整个流程如下图:

 

2.1编写BrandMapper

sql语句比较简单,以注解的方式写的

    /**
     * 查询所有
     * @return
     */
    @Select("select * from tb_brand")
    @ResultMap("brandResultMap")
    List<Brand> selectAll();

2.2 准备一个工具类

在java下 com.hmy包下创建 util包,并在该包下创建名为 SqlSessionFactoryUtils 工具类

public class SqlSessionFactoryUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        //静态代码块会随着类的加载而自动执行,且只执行一次
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}

2.3 编写BrandService

service 包下创建 BrandService

    /**
      *@Description  查询所有
      *@Author Hmy
      *@date 2022/9/23 17:06
      *@Param
      *@Return
      */
    SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();

    public List<Brand> selectAll(){
        //调用BrandMapper.selectAll()

        //2.获取sqlSession
        SqlSession sqlSession = factory.openSession();
        //3.获取BrandMapper
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        //4.调用方法
        List<Brand> brands = mapper.selectAll();

        sqlSession.close();

        return brands;

    }

2.4 编写Servlet

web 包下创建名为 SelectAllServletservlet,该 servlet 的逻辑如下:

  • 调用 BrandServiceselectAll() 方法进行业务逻辑处理,并接收返回的结果

  • 将上一步返回的结果存储到 request 域对象中

  • 跳转到 brand.jsp 页面进行数据的展示

具体的代码如下:

package com.hmy.web;

import com.hmy.pojo.Brand;
import com.hmy.service.BrandService;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;

@WebServlet("/selectAllServlet")
public class SelectAllServlet extends HttpServlet {

    private BrandService service = new BrandService();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //1.调用BrandService完成查询

        List<Brand> brands = service.selectAll();

        //2.存入request域中
        request.setAttribute("brands", brands);

        //3.转发到brand.jsp
        request.getRequestDispatcher("/brand.jsp").forward(request,response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

2.5 编写brand.jsp页面

编写 brand.jsp 页面, brand.jsp 页面在表格中使用 JSTLEL表达式 从request域对象中获取名为 brands 的集合数据并展示出来。页面内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="button" value="新增" id="add"><br>
<hr>
<table border="1" cellspacing="0" width="1100">
    <tr>
        <th>序号</th>
        <th>品牌名称</th>
        <th>企业名称</th>
        <th>排序</th>
        <th>品牌介绍</th>
        <th>状态</th>
        <th>操作</th>

    </tr>


    <c:forEach items="${brands}" var="brand" varStatus="status">
        <tr align="center">
                <%--<td>${brand.id}</td>--%>
            <td>${status.count}</td>
            <td>${brand.brandName}</td>
            <td>${brand.companyName}</td>
            <td>${brand.ordered}</td>
            <td>${brand.description}</td>
            <c:if test="${brand.status == 1}">
                <td>启用</td>
            </c:if>
            <c:if test="${brand.status != 1}">
                <td>禁用</td>
            </c:if>

            <td>
                <a href="/brand-demo/selectByIdServlet?id=${brand.id}">修改</a>
                <a href="/brand-demo/deleteByIdServlet?id=${brand.id}">删除</a>
             </td>
        </tr>

    </c:forEach>


</table>

<script>
    document.getElementById("add").onclick = function (){
        location.href = "/brand-demo/addBrand.jsp";
    }
</script>
</body>
</html>

3. 添加

     

点击 新增 按钮后,会先跳转到 addBrand.jsp 新增页面,在该页面输入要添加的数据,输入完毕后点击 提交 按钮,需要将数据提交到后端,而后端进行数据添加操作,并重新将所有的数据查询出来。整个流程如下:

 3.1 编写BrandMapper方法

  /**
     * 添加
     * @param brand
     */
    @Select("insert into tb_brand values (null, #{brandName}, #{companyName}, #{ordered}, #{description}, #{status})")
    void add(Brand brand);

3.2 编写BrandService方法

public void add(Brand brand){

        //2. 获取SqlSession
        SqlSession sqlSession = factory.openSession();
        //3. 获取BrandMapper
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);

        //4. 调用方法
        mapper.add(brand);

        //提交事务
        sqlSession.commit();
        //释放资源
        sqlSession.close();
    }

3.3 改进brand.jsp页面

我们需要在该页面表格的上面添加 新增 按钮

<input type="button" value="新增" id="add"><br>

并给该按钮绑定单击事件,当点击了该按钮需要跳转到 brand.jsp 添加品牌数据的页面

<script>
    document.getElementById("add").onclick = function (){
        location.href = "/brand-demo/addBrand.jsp";
    }
</script>

3.4 编写addBrand.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>添加品牌</title>
</head>
<body>
<h3>添加品牌</h3>
<form action="/brand-demo/addServlet" method="post">
    品牌名称:<input name="brandName"><br>
    企业名称:<input name="companyName"><br>
    排序:<input name="ordered"><br>
    描述信息:<textarea rows="5" cols="20" name="description"></textarea><br>
    状态:
    <input type="radio" name="status" value="0">禁用
    <input type="radio" name="status" value="1">启用<br>

    <input type="submit" value="提交">
</form>
</body>
</html>

3.5 编写servlet

web 包下创建 AddServletservlet,该 servlet 的逻辑如下:

  • 设置处理post请求乱码的字符集

  • 接收客户端提交的数据

  • 将接收到的数据封装到 Brand 对象中

  • 调用 BrandServiceadd() 方法进行添加的业务逻辑处理

  • 跳转到 selectAllServlet 资源重新查询数据

具体的代码如下:

@WebServlet("/addServlet")
public class AddServlet extends HttpServlet {
    private BrandService service = new BrandService();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //处理post请求的乱码问题
        request.setCharacterEncoding("utf-8");

        //1.接受表单提交的数据,封装为一个Brand对象
        String brandName = request.getParameter("brandName");
        String companyName = request.getParameter("companyName");
        String ordered = request.getParameter("ordered");
        String description = request.getParameter("description");
        String status = request.getParameter("status");

        Brand brand = new Brand();
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setOrdered(Integer.parseInt(ordered));
        brand.setDescription(description);
        brand.setStatus(Integer.parseInt(status));

        //2.调用service完成添加
        service.add(brand);

        //3.转发到查询所有Servlet
        request.getRequestDispatcher("selectAllServlet").forward(request,response);


    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

4. 修改

在该修改页面我们可以看到将 修改 按钮所在行的数据 ==回显== 到表单,然后需要修改那个数据在表单中进行修改,然后点击 提交 的按钮将数据提交到后端,后端再将数据存储到数据库中。

所以我们知道 修改 功能需要从两方面进行实现,数据回显和修改操作。

4.1 回显数据

                   

上图就是回显数据的效果。要实现这个效果,那当点击 修改 按钮时不能直接跳转到 update.jsp 页面,而是需要先带着当前行数据的 id 请求后端程序,后端程序根据 id 查询数据,将数据存储到域对象中跳转到 update.jsp 页面进行数据展示。整体流程如下

4.1.1 编写BrandMapper方法

@Select("select * from tb_brand where id = #{id}")
    @ResultMap("brandResultMap")
    Brand selectById(int id);

4.1.2 编写BrandService方法

 public Brand selectById(int id){
        //调用BrandMapper.selectAll()
        //2. 获取SqlSession
        SqlSession sqlSession = factory.openSession();
        //3. 获取BrandMapper
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        //4. 调用方法
        Brand brand = mapper.selectById(id);
        sqlSession.close();
        return brand;
    }

4.1.3 编写servlet

web 包下创建 SelectByIdServletservlet,该 servlet 的逻辑如下:

  • 获取请求数据 id

  • 调用 BrandServiceselectById() 方法进行数据查询的业务逻辑

  • 将查询到的数据存储到 request 域对象中

  • 跳转到 update.jsp 页面进行数据真实

具体代码如下:

@WebServlet("/deleteByIdServlet")
public class DeleteByIdServlet extends HttpServlet {
    private BrandService service = new BrandService();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        //1.接收id
        String id = request.getParameter("id");


        //2.调用service完成删除
        service.deleteById(Integer.parseInt(id));

        //3.转发到查询所有Servlet
        request.getRequestDispatcher("selectAllServlet").forward(request,response);


    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

4.1.4 编写update.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>修改品牌</title>
</head>
<body>
<h3>修改品牌</h3>
<form action="/brand-demo/updateServlet" method="post">

<%--    隐藏域,提交id--%>
    <input type="hidden" name="id" value="${brand.id}">

    品牌名称:<input name="brandName" value="${brand.brandName}"><br>
    企业名称:<input name="companyName" value="${brand.companyName}"><br>
    排序:<input name="ordered" value="${brand.ordered}"><br>
    描述信息:<textarea rows="5" cols="20" name="description">${brand.description} </textarea><br>
    状态:
    <c:if test="${brand.status == 0}">
        <input type="radio" name="status" value="0" checked>禁用
        <input type="radio" name="status" value="1" >启用<br>
    </c:if>

    <c:if test="${brand.status == 1}">
        <input type="radio" name="status" value="0" >禁用
        <input type="radio" name="status" value="1" checked>启用<br>
    </c:if>


    <input type="submit" value="提交">
</form>
</body>
</html>

4.2 修改数据

.4.2.1 编写BrandMapper方法

@Update("update tb_brand set brand_name = #{brandName},company_name = #{companyName},ordered = #{ordered},description = #{description},status = #{status} where id = #{id}")
void update(Brand brand);

4.2.2 编写BrandService方法

public void update(Brand brand){
        //2. 获取SqlSession
        SqlSession sqlSession = factory.openSession();
        //3. 获取BrandMapper
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        //4. 调用方法
        mapper.update(brand);
        //提交事务
        sqlSession.commit();
        //释放资源
        sqlSession.close();
    }

4.2.3 编写servlet

web 包下创建 UpdateServletservlet,该 servlet 的逻辑如下:

  • 设置处理post请求乱码的字符集

  • 接收客户端提交的数据

  • 将接收到的数据封装到 Brand 对象中

  • 调用 BrandServiceupdate() 方法进行添加的业务逻辑处理

  • 跳转到 selectAllServlet 资源重新查询数据

具体的代码如下:

@WebServlet("/updateServlet")
public class UpdateServlet extends HttpServlet {
    private BrandService service = new BrandService();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //处理post请求的乱码问题
        request.setCharacterEncoding("utf-8");

        //1.接受表单提交的数据,封装为一个Brand对象
        String id = request.getParameter("id");
        String brandName = request.getParameter("brandName");
        String companyName = request.getParameter("companyName");
        String ordered = request.getParameter("ordered");
        String description = request.getParameter("description");
        String status = request.getParameter("status");

        Brand brand = new Brand();
        brand.setId(Integer.parseInt(id));
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setOrdered(Integer.parseInt(ordered));
        brand.setDescription(description);
        brand.setStatus(Integer.parseInt(status));

        //2.调用service完成添加
        service.update(brand);

        //3.转发到查询所有Servlet
        request.getRequestDispatcher("selectAllServlet").forward(request,response);


    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

4.2.4 编写update.jsp页面

在上面已经编写好了

5.删除

5.1 编写BrandMapper方法

 @Select("delete from tb_brand where id = #{id}")
    void deleteById(int id);

5.2 编写BrandService方法

 public void deleteById(int id){
        //2.获取sqlSession
        SqlSession sqlSession = factory.openSession();
        //3.获取BrandMapper
        BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
        //4.调用方法
        mapper.deleteById(id);

        //提交事务
        sqlSession.commit();

        //释放资源
        sqlSession.close();
    }

5.3 编写Servlet

web 包下创建 DeleteByIdServlet 的 servlet,该 servlet 的逻辑如下:

  • 获取请求数据id

  • 调用 BrandService 的 deleteById ()方法进行业务逻辑处理,完成删除

  • 将上一步返回的结果存储到 request 域对象中

  • 跳转到 selectAllServlet 资源重新查询数据

具体的代码如下:

@WebServlet("/deleteByIdServlet")
public class DeleteByIdServlet extends HttpServlet {
    private BrandService service = new BrandService();
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


        //1.接收id
        String id = request.getParameter("id");


        //2.调用service完成删除
        service.deleteById(Integer.parseInt(id));

        //3.转发到查询所有Servlet
        request.getRequestDispatcher("selectAllServlet").forward(request,response);


    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javaweb项目中完成数据的增删改查操作((maven,mybaits,tomcat,servlet,jsp包含 MVC模式 和 三层架构 )) 的相关文章

随机推荐

  • STViT-R 代码阅读记录

    目录 一 SwinTransformer 1 原理 2 代码 二 STViT R 1 中心思想 2 代码与原文 本次不做具体的训练 只是看代码 所以只需搭建它的网络 执行一次前向传播即可 一 SwinTransformer 1 原理 主要思
  • H5C3部分面试题汇总

    1 HTML和HTML5 CSS和CSS3相比 有什么变化 HTML5中新增的内容有 自定义属性 data id 语义化更好的内容标签 header nav footer aside article section 音频 视频标签 audi
  • 复习之linux系统中的软件管理

    一 linux系统中软件包 1 软件包的类型 注意在rhel8中只能使用绿色软件 源码编译软件和rpm软件 类型 支持的条件 DEB UBlinux DEBlinux 用不了 RPM redhat centOS fadora bz2 gz
  • 栈破坏的分析

    在程序运行中 栈主要用来保存局部变量 函数参数 函数调用的返回地址以及栈底 以x86为例 与栈关系比较大的几个寄存器主要是 ebp 基址指针寄存器 extended base pointer 其内存放着一个指针 该指针永远指向系统栈最上面一
  • jvm-04运行时数据区(方法区)

    1 堆 栈 方法区的交互关系 运行时数据区结构图 堆 栈 方法区的交互关系 2 方法区的理解 Java虚拟机规范 中明确说明 尽管所有的方法区在逻辑上属于堆的一部分 但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩 但对于HotSpo
  • QSPI协议详解(二)

    1 QSPI协议简介 QSPI是Queued SPI的简写 是Motorola公司推出的SPI接口的扩展 比SPI应用更加广泛 在SPI协议的基础上 Motorola公司对其功能进行了增强 增加了队列传输机制 推出了队列串行外围接口协议 即
  • Linux和Windows中下载FFmpeg

    Linux和Windows中下载FFmpeg 注意 在Linux下下载FFmpeg 必须要让 usr local ffmpeg中的目录为空 否则无法生成新的版本内容 我就是了 1 Linux下 1 打开官网 点击Download 然后点击L
  • coderforces round 894(div.3)

    Problem A Codeforces AC代码 include
  • 【跑实验03】如何可视化GT边界框,如何选择边界框内部的边界框,如何可视化GT框和预测框,如何定义IoU阈值下的不同边界框?

    文章目录 一 如何可视化GT边界框 二 GT框和预测框的可视化 三 根据IoU阈值来选择 一 如何可视化GT边界框 from PIL import Image ImageDraw def draw bboxes image bboxes c
  • Spring实现控制反转(IOC)的三种方式(零)——理解IOC

    学过Spring的应该都知道Spring的IOC和AOP 然而我刚接触Spring不久 学习了IOC 发现掌握的不是很好 停留在概念上 今天就以例子来总结一下Spring的IOC 也希望各位大大能够指点迷津 IOC 也就是控制反转 创建对象
  • 函数重载与函数模板

    键盘输入10个数 可能为整形 浮点型 双精度型及其字符类型 分别利用函数重载和函数模板 求出其中的最大值和最小值 函数重载 include
  • 连接数据库报错 -- Access denied for user ‘‘@‘192.168.121.1‘ (using password: NO)

    问题 用idea配置好数据库配置文件application yml 在连接虚拟机数据库时 控制台报错 Access denied for user 192 168 121 1 using password NO 解决方法 1 密码配置出错
  • Win10及Win11安装及使用Wsl2 Linux子系统

    一 安装Wsl2 环境要求 必须运行 Windows 10 版本 2004 及更高版本 内部版本 19041 及更高版本 或 Windows 11 WSL2 是 WSL 1 的升级版 带来的主要优势 提高文件系统性能 支持完全的系统调用兼容
  • 你不知道的javascript之this的全面解析之绑定规则(一)

    1 1 默认绑定 首先介绍的是函数调用类型 独立函数调用 在没有其他应用下的默认规则 首先看以下代码 function foo console log this a var a 2 foo 2 我们可以看到调用foo 时 this a被解析
  • java对数据库中Date类型的处理

    java对数据库中Date类型的处理 想必在日常的敲代码生活总 用java操作数据库中的Date类型是不同于其他的 因为Date在导包的时候就分为 import java sql Date import java util Date 这两种
  • nginx 配置 ssl

    1 1 Nginx如果未开启SSL模块 配置Https时提示错误 原因也很简单 nginx缺少http ssl module模块 编译安装的时候带上 with http ssl module配置就行了 但是现在的情况是我的nginx已经安装
  • Seq2Seq 模型知识总结

    Seq2Seq 模型知识总结 目录 Seq2Seq 模型知识总结 1 模型的提出 2 RNN 结构及使用 2 1 N vs N 2 2 1 vs N 2 3 N vs 1 3 Seq2Seq 模型 3 1 Seq2Seq 结构 3 2 编码
  • 你应该掌握的七种回归技术

    摘要 本文解释了回归分析及其优势 重点总结了应该掌握的线性回归 逻辑回归 多项式回归 逐步回归 岭回归 套索回归 ElasticNet回归等七种最常用的回归技术及其关键要素 最后介绍了选择正确的回归模型的关键因素 编者按 回归分析是建模和分
  • Java大数字运算(BigInteger类和BigDecimal类)

    Java中的超大数BIgInteger和BigDecimal 在我们处理大位数运算的时候 我们经常用的int和long类型的数已经不能够满足我们的运算了 那么这个时候就需要用到一个超大数来运算 这个时候我们会用到java math BigI
  • javaweb项目中完成数据的增删改查操作((maven,mybaits,tomcat,servlet,jsp包含 MVC模式 和 三层架构 ))

    目录 需求 完成品牌数据的增删改查操作 1 环境准备 1 1 创建工程模块 引入坐标 1 2创建三层架构的包结构 1 3创建数据库表 tb brand 1 4 创建实体类Brand 1 5 准备mybatis环境 2 查询所有 2 1编写B