JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用)

文章目录

  • JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用)
    • 环境搭建
    • 查询所有
    • 添加数据
    • 修改数据
      • 回显数据
      • 修改数据
    • 删除数据(额外添加的功能)

涉及技术栈:Java,MyBatis,Servlet,JSP
需要自行导入的包链接: 提取码:6666

环境搭建

  • 创建新的模块 brand_demo,并在 pom.xml 文件引入坐标

    <dependencies><!-- mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version></dependency><!--servlet--><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></dependencies><build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version></plugin></plugins></build>
    
  • com.itheima 包下创建三层架构包结构,并将创建(若现成的则导入)数据库表 tb_brand

  • com.itheima.pojo 包下创建实体类 Brand

    /*** 品牌实体类*/
    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;}@Overridepublic String toString() {return "Brand{" +"id=" + id +", brandName='" + brandName + '\'' +", companyName='" + companyName + '\'' +", ordered=" + ordered +", description='" + description + '\'' +", status=" + status +'}';}
    }
    
  • 准备 MyBatis 基础环境
    com.itheima.mapper 创建 BrandMapper

    public interface BrandMapper {}
    

    resources 文件夹下添加 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><!--起别名--><typeAliases><package name="com.itheima.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://localhost:3306/db1?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;useSSL=false&amp;allowPublicKeyRetrieval=true"/><property name="username" value="root"/><property name="password" value="XXXX"/></dataSource></environment></environments><mappers><!--扫描mapper--><package name="com.itheima.mapper"/></mappers>
    </configuration>
    

    resources 文件夹下创建 com.itheima.mapper 包,并在该包下创建 BrandMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.itheima.mapper.BrandMapper"><!-- 实现数据库驼峰命名法映射 --><resultMap id="brandResultMap" type="brand"><result column="brand_name" property="brandName"></result><result column="company_name" property="companyName"></result></resultMap>
    </mapper>
    

查询所有

  • 实现 Dao 层,通过 select * from tb_brand 实现查询表中的所有内容

    public interface BrandMapper {/*** 查询所有* @return*/@Select("select * from tb_brand")@ResultMap("brandResultMap")List<Brand> selectAll();
    }
    
  • 在实现 Service 层之前将 SqlSessionFactory 类导入到 com.itheima.util 包下

    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;}
    }
    
  • 实现 Service 层,创建 BrandService 类,实现查询所有的逻辑功能 (基本步骤:建立sql会话,通过sql会话获取mapper对象,最后调用存储在一个变量后返回,注意查询完之后一定要关闭会话)

    /*** 查询所有* @return*/
    public List<Brand> selectAll(){//调用BrandMapper.selectAll()SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();//1.获取SqlSessionSqlSession sqlSession = factory.openSession();//2.获取BrandMapperBrandMapper mapper = sqlSession.getMapper(BrandMapper.class);//3.调用方法List<Brand> brands = mapper.selectAll();sqlSession.close();return brands;
    }
    
  • 实现 web 层之写好 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>
    
  • 实现 web 层之实现 SelectAllServlet 类实现页面交互

    @WebServlet("/selectAllServlet")
    public class SelectAllServlet extends HttpServlet {private BrandService service = new BrandService();@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1. 调用BrandService完成查询List<Brand> brands = service.selectAll();//2.存入request域中request.setAttribute("brands",brands);//3.转发到brand.jsprequest.getRequestDispatcher("/brand.jsp").forward(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);}
    }
    
  • 实现 web 层之在 webapp 包下实现 brand.jsp 页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ 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="新增"><br>
    <hr>
    <table border="1" cellspacing="0" width="80%"><tr><th>序号</th><th>品牌名称</th><th>企业名称</th><th>排序</th><th>品牌介绍</th><th>状态</th><th>操作</th></tr><c:forEach items="${brands}" var="brand"><tr align="center"><td>${brand.id}</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 == 0}"><td>禁用</td></c:if><td><a href="#">修改</a> <a href="#">删除</a></td></tr></c:forEach></table></body>
    </html>
    
  • 实验效果

添加数据

  • 实现 Dao 层,通过 insert into tb_brand values(null,brand_name,company_name,ordered,description,status) 实现添加数据

    public interface BrandMapper {/*** 添加数据* @param brand*/@Insert("insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status})")void add(Brand brand);
    }
    
  • 实现 Service 层,在 BrandService 类,实现查询所有的逻辑功能 (基本步骤:建立sql会话,通过sql会话获取mapper对象,最后调用并commit,注意查询完之后一定要关闭会话)

    /*** 添加数据* @param brand*/
    public void add(Brand brand){//调用BrandMapper.selectAll()SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();//1.获取SqlSessionSqlSession sqlSession = factory.openSession();//2.获取brandMapperBrandMapper mapper = sqlSession.getMapper(BrandMapper.class);//3.调用方法mapper.add(brand);sqlSession.commit();sqlSession.close();
    }
    
  • 实现 web 层之在 brand.jsp 的头部添加添加 “按钮”

    <input type="button" value="新增" id="add"><br>
    
  • 实现 web 层之在 brand.jsp 的下面实现添加按钮的 js 脚本

    <script>document.getElementById("add").onclick = function (){location.href = "/brand-demo/addBrand.jsp";}
    </script>
    
  • 实现 web 层之写好 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>
    
  • 实现 web 层之实现 AddServlet 类实现页面交互

    @WebServlet("/addServlet")
    public class AddServlet extends HttpServlet {private BrandService service = new BrandService();@Overrideprotected 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.转发到查询所有Servletrequest.getRequestDispatcher("selectAllServlet").forward(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);}
    }
    
  • 实验结果

修改数据

回显数据

  • 实现 Dao 层,通过 select * from tb_brand where id=#{id} 实现添加数据

    public interface BrandMapper {/*** 根据id查询* @param id* @return*/@Select("select * from tb_brand where id=#{id}")@ResultMap("brandResultMap")Brand selectById(int id);
    }
    
  • 实现 Service 层,创建 BrandService 类,实现根据id查询逻辑功能 (基本步骤:建立sql会话,通过sql会话获取mapper对象,最后调用存储在一个变量后返回,注意查询完之后一定要关闭会话)

    /*** 根据id查询* @param id* @return*/
    public Brand selectById(int id){//调用BrandMapper.selectById(id)SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();//1.获取SqlSessionSqlSession sqlSession = factory.openSession();//2.获取BrandMapperBrandMapper mapper = sqlSession.getMapper(BrandMapper.class);//3.调用方法Brand brand = mapper.selectById(id);sqlSession.close();return brand;
    }
    

修改数据

  • 实现 Dao 层,通过 update tb_brand set brand_name=#{brandName},company_name=#{companyName},ordered=#{ordered},description=#{description},status=#{status} where id=#{id} 实现修改数据

    @Update("update tb_brand set brand_name=#{brandName},company_name=#{companyName},ordered=#{ordered},description=#{description},status=#{status} where id=#{id}")
    @ResultMap("brandResultMap")
    void update(Brand brand);
    
  • 实现 Service 层,创建 BrandService 类,调用修改数据功能 (基本步骤:建立sql会话,通过sql会话获取mapper对象,注意查询完之后一定要关闭会话)

    /*** 修改数据* @param brand*/
    public void update(Brand brand){//调用BrandMapper.update(brand)SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();//1. 获取SqlSessionSqlSession sqlSession = factory.openSession();//2.获取BrandMapperBrandMapper mapper = sqlSession.getMapper(BrandMapper.class);//3.调用方法mapper.update(brand);sqlSession.commit();sqlSession.close();
    }
    
  • 实现 web 层之在 brand.jsp 页面把修改链接添加链接地址

    <td><a href="/brand-demo/selectByIdServlet?id=${brand.id}">修改</a>
    
  • 实现 web 层之在 selectById.jsp 页面回显数据,注意回显的数据回传回id,需要把id隐藏起来,这是不需要展现给用户来看的;

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ 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"><input name="id" type="hidden" value="${brand.id}"><br>品牌名称:<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><input type="submit" value="提交">
    </form>
    </body>
    </html>
    
  • 实现 web 层之实现 UpdateServlet 类实现页面交互

    @WebServlet("/updateServlet")
    public class UpdateServlet extends HttpServlet {private BrandService service = new BrandService();@Overrideprotected 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.转发到SelectAllServletrequest.getRequestDispatcher("selectAllServlet").forward(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);}
    }
    

删除数据(额外添加的功能)

  • 实现 Dao 层,通过 delete from tb_brand where id=#{id} 实现删除数据

    /*** 根据id删除数据* @param id*/
    @Delete("delete from tb_brand where id=#{id}")
    @ResultMap("brandResultMap")
    void deleteById(int id);
    
  • 实现 Service 层,创建 BrandService 类,调用删除数据功能 (基本步骤:建立sql会话,通过sql会话获取mapper对象,注意查询完之后一定要关闭会话)
    /*** 根据id删除数据* @param id*/
    public void delete(int id){//调用BrandMapper.delete(id)SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();//1.获取SqlSessionSqlSession sqlSession = factory.openSession();//2.获取BrandMapperBrandMapper mapper = sqlSession.getMapper(BrandMapper.class);//3.调用方法mapper.deleteById(id);sqlSession.commit();sqlSession.close();
    }
    
  • 实现 web 层之在 brand.jsp 页面把删除链接添加链接地址
    <a href="/brand-demo/deleteByIdServlet?id=${brand.id}">删除</a>
    
  • 实现 web 层之实现 DeleteByIdServlet 类实现页面交互
    @WebServlet("/deleteByIdServlet")
    public class DeleteByIdServlet extends HttpServlet {private BrandService service = new BrandService();@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.接收需要删除数据的idString id = request.getParameter("id");//2.调用Serviceservice.delete(Integer.parseInt(id));//3.转发至SelectAllServletrequest.getRequestDispatcher("selectAllServlet").forward(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request,response);}
    }
    

JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用)相关推荐

  1. JDBC——商品品牌数据的增删改查操作

    JDBC练习--完成商品品牌数据的增删改查操作 一.准备环境 1.数据库表tb_brand 2.实体类Brand /*** 品牌* alt+鼠标左键,整列编辑* 在实体类中,基本数据类型建议使用其对应 ...

  2. JDBC练习-完成商品品牌数据的增删改查操作

    准备环境 数据库表tb_brand -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand ...

  3. 2022.2.28 案例:利用三层架构,完成品牌数据的增删改查

    准备环境 结构图如下: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xml ...

  4. 从零开始的VUE项目-03(数据的增删改查)

    代码svn地址 (用户名:liu,密码;123) 这一篇中,我们要实现的基本就是这么个东西 这个页面就是我们创建的DataManagement.vue页面,我们的主要代码将写在这里面,这个表格我们将用 ...

  5. vue访问php时做增删改查,node连接mysql生成接口,vue通过接口实现数据的增删改查(一)...

    武汉加油遇新是直朋能到分览支体调!中国加油! 想必许多干用是处框它观有理近货框万理架是察放是近学vue的小伙伴想连接数据库,对数据进行增删改查吧,奈何不知道怎么实现.作为一路踩坑的我,为大家带来我的一 ...

  6. Node+Vue实现对数据的增删改查

      这是一个用于学生签到的小例子.主要用到的技术有node和Vue:用node搭建小型服务器,配置好路由,前端用vue写好组件,数据库采用的是mysql. 文件结构如下:   主要是功能是对数据的增删 ...

  7. java连接mysql数据库连接池_java使用原生MySQL实现数据的增删改查以及数据库连接池技术...

    一.工具类及配置文件准备工作 1.1 引入jar包 使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下: mysql mysql-connector-java 5.1.48 ...

  8. Java操作Mongodb数据(增删改查聚合查询)

    文章目录 一.Java操作MongoDB 二.使用步骤 1.基础配置 2.实体类 3.MongoDB表数据 3.增删改查聚合查询 总结 一.Java操作MongoDB 上一篇文章介绍了,如何在本地使用 ...

  9. datatables增删改查php,jQuery+datatables插件实现Ajax加载数据与增删改查功能示例_白峰_前端开发者...

    本文实例讲述了 这里给大家分享一下我在项目中用datatables实现ajax加载数据与增删改查 注意,需要引入  搜索  新增  编辑  删除 职业姓名性别爱好 //点击查找 $(" ...

最新文章

  1. 介绍一下Linux 误删文件恢复命令及方法
  2. 使用FIO对SATA、SSD和PCIe Flash进行测试
  3. Linux入门(7)——Ubuntu16.04安装wps并解决系统缺失字体问题
  4. WebKit 与 V8 的关系
  5. [Unity] 3D数学基础 - 坐标系、向量、矩阵
  6. MYSQL数据库应用优化
  7. 判断一个Checkbox是否被选中
  8. Android -- 自定义ScrollView实现放大回弹效果
  9. PHP将Excel另存为html页面
  10. 如何在S函数中对变量或者输入信号进行求导
  11. UNIX 与 WINDOWS 文本换行的差异
  12. 第一百二十一天 : varnish
  13. TesterHome android app 编写历程(二)
  14. 《MyBatis 从入门到精通》
  15. 微信公众平台订阅号、服务号和企业号三者之间的区别与联系
  16. 433_ev1527发送端驱动
  17. 嵌入式Web项目(一)——Web服务器的引入
  18. java中内部窗格这么用,JTabbedPane选项窗格的使用
  19. python抢购爬虫_一个关于爬虫的抢购软件优化问题
  20. 高斯分布的积分期望E(X)方差V(X)的理论推导

热门文章

  1. 迅为4412开发板Linux字符设备控制
  2. 有关Joplin的Markdown的一些知识
  3. 一加6android9上手体验,一加6T上手体验,屏下指纹+夜景拍摄能够打动你吗?
  4. 世界小姐中国区总决赛出结果 海归美女夺冠(图)
  5. Pycharm代码块的设置
  6. 阿里云数字化转型方案再升级,移动研发平台EMAS助力海底捞超级App“云上捞”... 1
  7. 自适应阈值canny边缘检测(功能实现)
  8. 纯css 使元素像画卷一样展开或者横向展开
  9. 荣耀猎人游戏本亮点有哪些?看我来深扒一下
  10. 软件安装管家【软件目录】