JavaWeb小项目(二)- 完成品牌数据的增删改查(JSP/MVC/三层架构综合应用)
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 创建 BrandMapperpublic 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&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&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/三层架构综合应用)相关推荐
- JDBC——商品品牌数据的增删改查操作
JDBC练习--完成商品品牌数据的增删改查操作 一.准备环境 1.数据库表tb_brand 2.实体类Brand /*** 品牌* alt+鼠标左键,整列编辑* 在实体类中,基本数据类型建议使用其对应 ...
- JDBC练习-完成商品品牌数据的增删改查操作
准备环境 数据库表tb_brand -- 删除tb_brand表 drop table if exists tb_brand; -- 创建tb_brand表 create table tb_brand ...
- 2022.2.28 案例:利用三层架构,完成品牌数据的增删改查
准备环境 结构图如下: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xml ...
- 从零开始的VUE项目-03(数据的增删改查)
代码svn地址 (用户名:liu,密码;123) 这一篇中,我们要实现的基本就是这么个东西 这个页面就是我们创建的DataManagement.vue页面,我们的主要代码将写在这里面,这个表格我们将用 ...
- vue访问php时做增删改查,node连接mysql生成接口,vue通过接口实现数据的增删改查(一)...
武汉加油遇新是直朋能到分览支体调!中国加油! 想必许多干用是处框它观有理近货框万理架是察放是近学vue的小伙伴想连接数据库,对数据进行增删改查吧,奈何不知道怎么实现.作为一路踩坑的我,为大家带来我的一 ...
- Node+Vue实现对数据的增删改查
这是一个用于学生签到的小例子.主要用到的技术有node和Vue:用node搭建小型服务器,配置好路由,前端用vue写好组件,数据库采用的是mysql. 文件结构如下: 主要是功能是对数据的增删 ...
- java连接mysql数据库连接池_java使用原生MySQL实现数据的增删改查以及数据库连接池技术...
一.工具类及配置文件准备工作 1.1 引入jar包 使用原生MySQL,只需要用到MySQL连接的jar包,maven引用方式如下: mysql mysql-connector-java 5.1.48 ...
- Java操作Mongodb数据(增删改查聚合查询)
文章目录 一.Java操作MongoDB 二.使用步骤 1.基础配置 2.实体类 3.MongoDB表数据 3.增删改查聚合查询 总结 一.Java操作MongoDB 上一篇文章介绍了,如何在本地使用 ...
- datatables增删改查php,jQuery+datatables插件实现Ajax加载数据与增删改查功能示例_白峰_前端开发者...
本文实例讲述了 这里给大家分享一下我在项目中用datatables实现ajax加载数据与增删改查 注意,需要引入 搜索 新增 编辑 删除 职业姓名性别爱好 //点击查找 $(" ...
最新文章
- 介绍一下Linux 误删文件恢复命令及方法
- 使用FIO对SATA、SSD和PCIe Flash进行测试
- Linux入门(7)——Ubuntu16.04安装wps并解决系统缺失字体问题
- WebKit 与 V8 的关系
- [Unity] 3D数学基础 - 坐标系、向量、矩阵
- MYSQL数据库应用优化
- 判断一个Checkbox是否被选中
- Android -- 自定义ScrollView实现放大回弹效果
- PHP将Excel另存为html页面
- 如何在S函数中对变量或者输入信号进行求导
- UNIX 与 WINDOWS 文本换行的差异
- 第一百二十一天 : varnish
- TesterHome android app 编写历程(二)
- 《MyBatis 从入门到精通》
- 微信公众平台订阅号、服务号和企业号三者之间的区别与联系
- 433_ev1527发送端驱动
- 嵌入式Web项目(一)——Web服务器的引入
- java中内部窗格这么用,JTabbedPane选项窗格的使用
- python抢购爬虫_一个关于爬虫的抢购软件优化问题
- 高斯分布的积分期望E(X)方差V(X)的理论推导
热门文章
- 迅为4412开发板Linux字符设备控制
- 有关Joplin的Markdown的一些知识
- 一加6android9上手体验,一加6T上手体验,屏下指纹+夜景拍摄能够打动你吗?
- 世界小姐中国区总决赛出结果 海归美女夺冠(图)
- Pycharm代码块的设置
- 阿里云数字化转型方案再升级,移动研发平台EMAS助力海底捞超级App“云上捞”... 1
- 自适应阈值canny边缘检测(功能实现)
- 纯css 使元素像画卷一样展开或者横向展开
- 荣耀猎人游戏本亮点有哪些?看我来深扒一下
- 软件安装管家【软件目录】