02 删改查

文章目录

    • CartController
    • CartMapper
    • Cart
    • DButil
    • CartMapper.xml
    • generatorConfig.xml
    • mybatis-config.xml
    • cart.jsp
    • products.jsp(忽略)
    • pom.xml

CartController


package controller;import mapper.CartMapper;
import org.apache.ibatis.session.SqlSession;
import pojo.Cart;
import utils.DButil;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;@WebServlet(urlPatterns = {"/cart/init","/cart/insert","/cart/delete","/cart/update"})
public class CartController extends HttpServlet {SqlSession sqlSession = DButil.getSqlSession();CartMapper mapper = sqlSession.getMapper(CartMapper.class);@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String servletPath = req.getServletPath();if (servletPath==null){resp.sendError(404);}switch (servletPath){case "/cart/init" :this.doInit(req,resp);break;case "/cart/insert" :this.doInsert(req,resp);break;case "/cart/delete" :this.doDel(req,resp);break;case "/cart/update" :this.doUpdate(req,resp);break;}}private void doInit(HttpServletRequest req, HttpServletResponse resp) throws ServletException,IOException {String realPath = req.getServletContext().getRealPath("/");System.out.println(realPath);//1.获取值List<Cart> carts = mapper.selectAll();//2.将值放到作用域中req.setAttribute("list",carts);//3.转发到jsp中req.getRequestDispatcher("/cart/cart.jsp").forward(req,resp);}private void doDel(HttpServletRequest req, HttpServletResponse resp) throws IOException {//1.获取idint cartId = Integer.parseInt(req.getParameter("cartId"));//2.根据id删除cartmapper.deleteByPrimaryKey(cartId);sqlSession.commit();//3.重定向到当前init的页面resp.sendRedirect(req.getContextPath()+"/cart/init");}private void doUpdate(HttpServletRequest req, HttpServletResponse resp) throws IOException {//1.获取参数(id 数量)Cart cart = new Cart();int cartId = Integer.parseInt(req.getParameter("cartId"));int quantity = Integer.parseInt(req.getParameter("quantity"));int productId = Integer.parseInt(req.getParameter("productId"));cart.setCartId(cartId);cart.setQuantity(quantity);cart.setProductId(productId);//2.执行mapper,修改数据库mapper.updateByPrimaryKey(cart);sqlSession.commit();//3重定向到购物车页面resp.sendRedirect(req.getContextPath()+"/cart/init");}private void doInsert(HttpServletRequest req, HttpServletResponse resp) throws IOException{//1.创建一个cary用于加入Cart cart = new Cart();//将添加的商品id放入cartint productId = Integer.parseInt(req.getParameter("productId"));int quantity = Integer.parseInt(req.getParameter("quantity"));cart.setProductId(productId);//将数量放入cartcart.setQuantity(quantity);/*** id* 商品id* 数量** 2.将cart加入到购物车数据库* 判断数据库里是不是已经有这个商品的属性了* 有,数量++* 无,则创建*/int rows = 0;//a.判断,数据库里是不是已经有这个商品的属性了Cart cartResult = mapper.selectOneByProductId(productId);if (cartResult == null) {//说明没有
//            则直接创建rows  = mapper.insert(cart);}else {
//            有的话,则将原本的数量++cartResult.setQuantity(cartResult.getQuantity()+1);rows = mapper.updateByPrimaryKey(cartResult);}sqlSession.commit();//3.跳到购物车if(rows>0){resp.sendRedirect(req.getContextPath()+"/cart/init");}else {resp.sendError(500,"添加异常");}}}

CartMapper


package mapper;import java.util.List;
import pojo.Cart;public interface CartMapper {int deleteByPrimaryKey(Integer cartId);int insert(Cart row);Cart selectByPrimaryKey(Integer cartId);List<Cart> selectAll();int updateByPrimaryKey(Cart row);
}

Cart


package pojo;public class Cart {private Integer cartId;private Integer productId;private Integer quantity;public Integer getCartId() {return cartId;}public void setCartId(Integer cartId) {this.cartId = cartId;}public Integer getProductId() {return productId;}public void setProductId(Integer productId) {this.productId = productId;}public Integer getQuantity() {return quantity;}public void setQuantity(Integer quantity) {this.quantity = quantity;}
}

DButil


package utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class DButil {private static SqlSessionFactory sqlSessionFactory = null;//测试环境下的工厂private static SqlSessionFactory sqlSessionFactoryTest = null;static {//1.builder  一旦创建了 SqlSessionFactory,就不再需要它了
//        SqlSessionFactoryBuilder sqlSessionFactoryBuilder =//2.获取工厂// 获取资源 org.apache.ibatis.io.Resources;try {InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");//根据资源文件创建工厂sqlSessionFactory  = new SqlSessionFactoryBuilder().build(inputStream);//测试环境的创建工厂
//            sqlSessionFactoryTest  = new SqlSessionFactoryBuilder().build(inputStream,"testdevelopment");} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession getSqlSession(){//获得Sqlsessionreturn sqlSessionFactory.openSession();}public static void close(SqlSession session){session.close();}}

CartMapper.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="mapper.CartMapper"><resultMap id="BaseResultMap" type="pojo.Cart"><id column="cart_id" jdbcType="INTEGER" property="cartId" /><result column="product_id" jdbcType="INTEGER" property="productId" /><result column="quantity" jdbcType="INTEGER" property="quantity" /></resultMap><delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">delete from cartwhere cart_id = #{cartId,jdbcType=INTEGER}</delete><insert id="insert" parameterType="pojo.Cart">insert into cart (cart_id, product_id, quantity)values (#{cartId,jdbcType=INTEGER}, #{productId,jdbcType=INTEGER}, #{quantity,jdbcType=INTEGER})</insert><update id="updateByPrimaryKey" parameterType="pojo.Cart">update cartset product_id = #{productId,jdbcType=INTEGER},quantity = #{quantity,jdbcType=INTEGER}where cart_id = #{cartId,jdbcType=INTEGER}</update><select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">select cart_id, product_id, quantityfrom cartwhere cart_id = #{cartId,jdbcType=INTEGER}</select><select id="selectAll" resultMap="BaseResultMap">select cart_id, product_id, quantityfrom cart</select>
</mapper>

generatorConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!--targetRuntime有两个值:MyBatis3Simple:生成的是基础版,只有基本的增删改查。MyBatis3:生成的是增强版,除了基本的增删改查之外还有复杂的增删改查。--><context id="DB2Tables" targetRuntime="MyBatis3Simple"><!--防止生成重复代码--><plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/><!-- 注释信息的生成 --><commentGenerator><!--是否去掉生成日期--><property name="suppressDate" value="true"/><!--是否去除注释--><property name="suppressAllComments" value="true"/></commentGenerator><!--连接数据库信息--><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/dict"userId="root"password="123456"></jdbcConnection><!-- 生成pojo包名和位置 --><javaModelGenerator targetPackage="pojo" targetProject="src/main/java"><!--是否开启子包--><!--如果没有开启子包,pojo整个会被作为一个文件夹名--><property name="enableSubPackages" value="true"/><!--是否去除字段名的前后空白--><property name="trimStrings" value="true"/></javaModelGenerator><!-- 生成SQL映射文件的包名和位置 --><sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"><!--是否开启子包--><property name="enableSubPackages" value="true"/></sqlMapGenerator><!-- 生成Mapper接口的包名和位置 --><javaClientGeneratortype="xmlMapper"targetPackage="mapper"targetProject="src/main/java"><!--是否开启子包--><property name="enableSubPackages" value="true"/></javaClientGenerator><!-- 表名和对应的实体类名--><table tableName="products" domainObjectName="Products"/><table tableName="cart" domainObjectName="Cart"/><!--<table schema="数据库名" tableName="表名" domainObjectName="对应实体类名"enableCountByExample="false" enableUpdateByExample="false"enableDeleteByExample="false" enableSelectByExample="false"selectByExampleQueryId="false">--></context>
</generatorConfiguration>

mybatis-config.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/dict"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="mapper/ProductsMapper.xml"/><mapper resource="mapper/CartMapper.xml"/></mappers>
</configuration>

cart.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head><title>购物车</title><style>nav{display: flex;justify-content: space-between;/*将内部元素平均分布在容器内*/align-items: center;/*垂直居中*/}</style>
</head>
<body><h2>购物车</h2><%--el表达式,只能识别的就是域中值,从小到大默认找--%><c:forEach var="cart" items="${list}"><nav><li>${cart.productId}</li><li><a href="delete?cartId=${cart.cartId}">删除</a></li><li><%--修改数量--%><form action="update" method="post"><input type="number" name="quantity" value="${cart.quantity}" max="10"><input type="hidden" name="cartId" value="${cart.cartId}"><input type="hidden" name="productId" value="${cart.productId}"><input type="submit" value="修改数量"></form></li></nav></c:forEach>
</body>
</html>

products.jsp(忽略)

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head><title>商品列表</title><style>nav{display: flex;justify-content: space-between;/*将内部元素平均分布在容器内*/align-items: center;/*垂直居中*/}</style>
</head>
<body><h1>Product List</h1><%--java代码嵌套标签 {} --%><ul><c:forEach var="product" items="${requestScope.list}"><nav><%--集合都是默认解析的,list[index]--%><%--集合都是默认解析的,map[key]/map.key--%><%--javaBean的格式是默认解析的--%><li>${product.productName}</li><%--如果url中用/开头,那么链接时默认带上localhost:8080不带站点如果不以/开头,那么以当前的路径开始拼接,比如当前localhost:8080/mall/product--%><form action="/mall/cart/insert" method="post"><input type="hidden" name="productId" value="${product.productId}"><%--         <input type="number" name="quantity" value="">--%><input type="submit" οnclick="return confirmAdd()" value="加入购物车"></form><%-- <li>--%><%--                &lt;%&ndash;get请求&ndash;%&gt;--%><%--                &lt;%&ndash;   http://localhost:8080/mall/cart/insert   &ndash;%&gt;--%><%--                <a href="/mall/cart/insert?productId=${product.productId}">加入购物车</a>--%><%--            </li>--%></nav></c:forEach></ul></body>
</html>

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>web_tom3</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><!--定制构建过程--><build><!--可配置多个插件--><plugins><!--其中的一个插件:mybatis逆向工程插件--><plugin><!--插件的GAV坐标--><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.1</version><!--允许覆盖会将原先生成的删除,然后覆盖原先的重新生成--><configuration><overwrite>true</overwrite></configuration><!--插件的依赖--><dependencies><!--mysql驱动依赖根据数据库表动态生成,需要连接数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency></dependencies></plugin></plugins></build><dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.15</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.31</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--jsp的依赖--><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version><scope>provided</scope></dependency><!--jstl标签库--><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><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies></project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788616.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4 方块排序动画

【动画效果】 入动画&#xff1a; 出动画&#xff1a; 【分析】 入动画&#xff1a;方块动画排序方式为Z字形&#xff0c;堆砌方向为X和Y轴向 出动画&#xff1a;方块动画排序方式为随机 【关键蓝图】 1.构建方块砌体 2.入/出动画

web渗透测试漏洞复现:ZooKeeper未授权漏洞复现

web渗透测试漏洞复现 1. ZooKeeper未授权漏洞复现1.1 ZooKeeper简介1.2 ZooKeeper漏洞复现1.3 ZooKeeper漏洞修复建议1. ZooKeeper未授权漏洞复现 1.1 ZooKeeper简介 ZooKeeper 是一个分布式的、开源的协调服务,最初由雅虎开发,现隶属于 Apache 软件基金会,是Google的Chub…

Java pdfbox 给 PDF 添加文字和图片水印 并旋转45度

POM <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version> </dependency> 代码&#xff1a; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdf…

人工智能+的广泛应用,已渗透到生活的方方面面

引言 随着科技的不断进步和人工智能技术的快速发展&#xff0c;我们正处于一个人工智能时代。人工智能不仅仅是一种技术&#xff0c;更是一种革命性的变革力量&#xff0c;它正在以前所未有的方式改变着我们的生活和工作方式。 人工智能&#xff08;AI&#xff09;指的是人工…

【容易不简单】love 2d Lua 俄罗斯方块超详细教程

源码已经更新在CSDN的码库里&#xff1a; git clone https://gitcode.com/funsion/love2d-game.git 一直在找Lua 能快速便捷实现图形界面的软件&#xff0c;找了一堆&#xff0c;终于发现love2d是小而美的原生lua图形界面实现的方式。 并参考相关教程做了一个更详细的&#x…

某音乐平台歌曲信息逆向之webpack扣取

逆向网址 aHR0cHM6Ly95LnFxLmNvbS8 逆向链接 aHR0cHM6Ly95LnFxLmNvbS9uL3J5cXEvc29uZ0RldGFpbC8wMDJkdzRndjFabWlHdA 逆向接口 aHR0cHM6Ly91Ni55LnFxLmNvbS9jZ2ktYmluL211c2ljcy5mY2c 逆向过程 请求方式&#xff1a;POST 逆向参数 sign zzbd8c72309rdslvlnjwk8pthj2lw462f12…

ubuntu-server部署hive-part3-安装mysql

参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本&#xff1a;ubuntu-server-22.04.3 虚拟机&#xff1a;virtualbox7.0 部署mysql 下载上传 下载地址 https://downloads.mysql.com/archives/community/ 以root用户上传&#xff0c;/usr/loc…

yolov5 旋转数据增强

目录 安装数据增强库&#xff1a; 指定旋转90度增强 图片在-180度到180度之间任意旋转 安装数据增强库&#xff1a; pip install albumentations 指定旋转90度增强 import albumentations as A# 在你的数据增强管道中加入下面的旋转增强 transform A.Compose([...A.Rotat…

Three.js阴影贴图

生成阴影贴图的步骤如下&#xff1a; 从光位置视点&#xff08;阴影相机&#xff09;创建深度图。从相机的角度进行屏幕渲染在每个像素点&#xff0c;将阴影相机的MVP矩阵计算出的深度值与深度图值进行比较如果深度图值较低&#xff0c;则说明该像素点存在阴影 &#xff0c;因…

隐私计算实训营第七讲-隐语SCQL的架构详细拆解

隐私计算实训营第七讲-隐语SCQL的架构详细拆解 文章目录 隐私计算实训营第七讲-隐语SCQL的架构详细拆解1.SCQL Overview1.1 多方数据分析场景1.2 多方数据分析技术路线1.2.1 TEE SQL方案1.2.2 MPC SQL方案 1.3 Secure Collaborative Query Language(SCQL)1.3.1 SCQL 系统组件1.…

rust项目组织结构和集成测试举例

概述 在学习rust的过程中&#xff0c;当项目结构略微复杂的时候&#xff0c;写集成测试的时候发现总是不能引用项目中的代码&#xff0c;导致编写测试用例失败。查阅了教程&#xff0c;一般举例都很简单。查阅了谷歌和百度以及ai&#xff0c;也没有找到满意的答案。这里记录一…

Vue项目动态加载图片

Vue项目动态加载图片 1. 错误的写法2. 正确的实践写法方法 1方法2 1. 错误的写法 以下情况运行异常&#xff0c;图片加载不出来 <img class"img" :src"imgSrc" /> <script> let imgSrc ../../assets/img1.png; </script>2. 正确的实践…

用户体验:探讨Facebook如何优化用户体验

在数字化时代&#xff0c;用户体验是社交媒体平台成功与否的关键因素之一。作为全球最大的社交媒体平台之一&#xff0c;Facebook一直在努力优化用户体验&#xff0c;从功能设计到内容呈现再到隐私保护&#xff0c;不断提升用户满意度。本文将深入探讨Facebook如何优化用户体验…

【EasyExcel】—— 实现excel动态表头设置、多个sheet

引入jar <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version></dependency>代码 public static void main(String[] args) {//选择存储地址String fileName "/User…

Yolov5封装detect.py面向对象

主要目标是适应摄像头rtsp流的检测 如果是普通文件夹或者图片&#xff0c;run中的while True去掉即可。 web_client是根据需求创建的客户端&#xff0c;将检测到的数据打包发送给服务器 # YOLOv5 &#x1f680; by Ultralytics, GPL-3.0 license """ Run inf…

Linux基础概念

Linux Linux 和 UNIX 中的文件系统是一个以 / 为根的树状式文件结构&#xff0c;/ 是 Linux 和 UNIX 中的根目录&#xff0c;同样它也是文件系统的起点。所有的文件和目录都位于 / 路径下&#xff0c;包括经常听到的 /usr、/etc、/bin、/home 等。在早期的 UNIX 系统中&#x…

论文阅读RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection

文章目录 RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection问题笛卡尔坐标结构图Meta-Kernel Convolution RangeDet: In Defense of Range View for LiDAR-based 3D Object Detection 论文&#xff1a;https://arxiv.org/pdf/2103.10039.pdf 代码&…

数据结构初阶:顺序表和链表

线性表 线性表 ( linear list ) 是 n 个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串 ... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性…

Python读取Excel根据每行信息生成一个PDF——并自定义添加文本,可用于制作准考证

文章目录 有点小bug的:最终代码(无换行):有换行最终代码无bug根据Excel自动生成PDF,目录结构如上 有点小bug的: # coding=utf-8 import pandas as pd from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import letter from reportlab.pdfbase import pdf…

linux通过进程pid查询容器docker

我遇到的问题是在docker中启动了进行&#xff0c;占用显卡&#xff0c;如下nvidis-smi查看&#xff1a; 现在要查询pid16325属于哪个容器ID&#xff0c;指令&#xff1a; ps -e -o pid,cmd,comm,cgroup | grep 16325查到如下结果&#xff0c;其中12:cpuset:/docker/ 后面的 8…