环境导入E:\课程\javaweb资料\day10-JSP\资料\2. 品牌增删改查案例素材(师生共用)

查询所有(使用JSP脚本展示品牌数据)

1,在数据访问层的mapper接口中定义查询所有的sql语句

    @Select("select * from tb_brand")List<Brand> selectAll();

2,在service业务逻辑层中,调用mapper接口中的sql查询语句,获得查询结果并返回给controller控制层

public List<Brand> selectAll(){//1,获得sqlsessionSqlSession sqlSession = factory.openSession();//2,连接mapper接口BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);//3,调用查询方法List<Brand> brands = mapper.selectAll();//2,返回结果给servletreturn brands;}

3,在controller控制层中,调用service业务逻辑层的查询方法,并接受返回值,把返回值存到域中,通过请求转发到brand.jsp,并共享域

  @Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//创建BrandService对象BrandService brandService = new BrandService();//通过BrandService对象调用selectAll()查询方法List<Brand> brands = brandService.selectAll();//通过setAttribute()方法把查询到的数据储存到域中request.setAttribute("list",brands);//通过请求转发共享数据request.getRequestDispatcher("/brand.jsp").forward(request,response);}

4,在brand.jsp中遍历所有查询到的数据

<%@ page import="com.itheima.pojo.Brand" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%--Created by IntelliJ IDEA.User: zhouxiangyangDate: 2021/12/18Time: 9:52To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE html>
<head><meta charset="UTF-8"><title>jsp脚本案例</title>
</head>
<body>
<input type="button" value="新增" onclick="addBrand()"><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>
<%--  通过forEach遍历所有的数据  --%>
<c:forEach items="${list}" var="brand" varStatus="vs"><tr align="center"><td>${vs.count}</td><td>${brand.brandName}</td><td>${brand.companyName}</td><td>${brand.ordered}</td><td>${brand.description}</td><td>${brand.status==1?"启用":"禁用"}</td><td><a href="/day10-brand-demo/selectByIdServlet?id=${brand.id}">修改</a><a href="/day10-brand-demo/DelectServlet?id=${brand.id}">删除</a></td></tr>
</c:forEach>

添加数据
1,在数据访问层中定义添加的sql语句

@Insert("insert into tb_brand values(null,#{brandName},#{companyName},#{ordered},#{description},#{status})")void add(Brand brand);

2,在service业务逻辑层中,连接数据库,调用mapper方法,进行添加操作

    public void add(Brand brand){//获得sqlswssion对象SqlSession sqlSession = factory.openSession(true);//链接mapper接口BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);//调用添加方法mapper.add(brand);}

3,在controller控制层中,获得用户请求,并获取所有的参数,把参数封装传递给service业务逻辑层,最后展示所有的数据

    @Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");Brand brand = new Brand();try {BeanUtils.populate(brand,request.getParameterMap());} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}BrandService brandService = new BrandService();brandService.add(brand);response.sendRedirect(request.getContextPath()+"/selectAllServlet");}

5,在brand.jsp中给新增按钮添加跳转页面,实现添加

<%-给新增按钮添加点击事件,实现点击新增就跳转到新增界面---%>
<input type="button" value="新增" onclick="addBrand()"><br>
<script>function addBrand(){location.href="/day10-brand-demo/addBrand.html"}
</script>

6,通过addBrand.html获得新增的数据,并把请求给servlet,进行添加

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>添加品牌</title>
</head>
<body>
<h3>添加品牌</h3>
<form action="/day10-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>

修改数据
思路:首先要获得需要修改的的全部信息, 在修改页面展示出来,然后再进行修改,修改后保存。

1,在数据访问层中的mapper接口中,定义通过id查询的sql语句

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

2,在service业务逻辑层中,连接数据库,调用mapper接口中的selectById()方法,并把结果返归给controller控制层,

public Brand selectById(int id){//获得sqlswssion对象SqlSession sqlSession = factory.openSession(true);//链接mapper接口BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);Brand brand = mapper.selectById(id);sqlSession.close();return brand;}

3,在controller控制层中调用service业务逻辑层中的查询方法,并接收返回结果,把结果封装到域中,通过请求转发,把数据共享给修改页面update.jsp

    @Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String id = request.getParameter("id");BrandService brandService = new BrandService();Brand brand = brandService.selectById(Integer.parseInt(id));request.setAttribute("brands",brand);request.getRequestDispatcher("/update.jsp").forward(request,response);}

4,修改页面展示要被修改的的数据,修改完成后,把修改请求发送到contorller控制层中

<%--Created by IntelliJ IDEA.User: zhouxiangyangDate: 2021/12/18Time: 17:44To change this template use File | Settings | File Templates.
--%>
<%@ 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="/day10-brand-demo/updateServlet" method="post">
<%--type="hidden"的作用是将这一行的数据隐藏,不展示个用户看--%><input type="hidden" name="id" value="${brands.id}"><br>品牌名称:<input name="brandName" value="${brands.brandName}"><br>企业名称:<input name="companyName" value="${brands.companyName}"><br>排序:<input name="ordered" value="${brands.ordered}"><br>描述信息:<textarea rows="5" cols="20" name="description"> "${brands.description}"</textarea><br>状态:<input type="radio" name="status" value="0" ${brands.status==0?"checked":""}>禁用<input type="radio" name="status" value="1" ${brands.status==1?"checked":""}>启用<br><input type="submit" value="提交">
</form>
</body>
</html>

5,controller接收到修改请求后,获取所有的参数,并把参数封装到brand对象中,传递给service业务逻辑层,

   @Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf-8");Brand brand = new Brand();try {//获取所有的参数,并封装到brand对象中BeanUtils.populate(brand,request.getParameterMap());} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}

6,service业务逻辑层,连接数据库,创建mapper接口的代理对象,调用mapper接口里的修改方法

 public void update(Brand brand){SqlSession sqlSession = factory.openSession(true);//链接mapper接口BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);mapper.update(brand);sqlSession.close();}

7,在数据访问层中,接收service业务逻辑层传递过来的数据,并执行修改的sql语句,修改表中的数据

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

删除数据
1,在数据访问层中的mapper接口中定义删除的修改语句

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

2,在servive业务逻辑处理层中,连接数据库,创建mapper接口的代理对象,调用接口中的查询方法

  public void deleteById(int id){SqlSession sqlSession = factory.openSession(true);//链接mapper接口BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);mapper.delect(id);sqlSession.close();}

3,在controller控制层中,接收删除请求,并获取请求参数,把参数传递给service业务逻辑层

@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}

4,在brand.jsp中把删除请求发送给controller控制层中,实现请求

<%@ page import="com.itheima.pojo.Brand" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%--Created by IntelliJ IDEA.User: zhouxiangyangDate: 2021/12/18Time: 9:52To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--引入核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!DOCTYPE html>
<head><meta charset="UTF-8"><title>jsp脚本案例</title>
</head>
<body>
<%----%>
<input type="button" value="新增" onclick="addBrand()"><br>
<script>function addBrand(){location.href="/day10-brand-demo/addBrand.html"}
</script>
<hr>
<table border="1" cellspacing="0" width="80%">
<tr>
<%--    --%><th>序号</th><th>品牌名称</th><th>企业名称</th><th>排序</th><th>品牌介绍</th><th>状态</th><th>操作</th>
</tr>
<%--开始遍历items="":被遍历的容器名称,也就是域对象中集合的名称var="":表示每次遍历出来的结果保存的变量varStatus="vs" :表示遍历的状态信息vs.index:表示当前元素的索引,从0开始vs.count:表示第几个元素,从1开始
--%>
<c:forEach items="${list}" var="brand" varStatus="vs"><tr align="center"><td>${vs.count}</td><td>${brand.brandName}</td><td>${brand.companyName}</td><td>${brand.ordered}</td><td>${brand.description}</td><td>${brand.status==1?"启用":"禁用"}</td><td><a href="/day10-brand-demo/selectByIdServlet?id=${brand.id}">修改</a><%---在地址栏中id的参数传递给controller控制层中-%><a href="/day10-brand-demo/DelectServlet?id=${brand.id}">删除</a></td></tr>
</c:forEach></table></body>

思维梳理图
1,查询所有

2,新增数据

3,修改,回显数据


登录
需求:用户登录判断用户名以及密码,用户可选择记住密码和用户名
1,controller控制层

 @Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获得用户输入的用户名request.setCharacterEncoding("utf-8");String username = request.getParameter("username");//获得用户输入的密码String password = request.getParameter("password");//调用业务逻辑层判断用户是否存在User login = userService.login(username, password);if (login!=null){//如果用户存在就将用户名和密码储存到cookie中Cookie usernameCookie = new Cookie("username", username);Cookie passwordCookie = new Cookie("password", password);String remember = request.getParameter("remember");if(remember!=null){//如果用户点击了记住密码的按钮,则则使这个两个cookie对象存活七天,使下次登录的时候显示用户名和密码usernameCookie.setMaxAge(60*60*24*7);passwordCookie.setMaxAge(60*60*24*7);}else {//如果没有点击记住密码的按钮,则使这个两个cookie对象存活时间为0usernameCookie.setMaxAge(0);passwordCookie.setMaxAge(0);}response.addCookie(usernameCookie);response.addCookie(passwordCookie);//如果存在,把数用户据用session储存,方便后面使用HttpSession session = request.getSession();session.setAttribute("user",login);//通过重定向response.sendRedirect(request.getContextPath()+"/selectAllServlet");}else {request.setAttribute("login_msg","比狗儿子还蠢");request.getRequestDispatcher("/login.jsp").forward(request,response);}

2,service业务逻辑层定义查询方法

public class UserService {//1 加载mybatis-config.xml核心配置文件,获取SqlSessionFactory对象private SqlSessionFactory factory = SqlSessionFactoryUtils.getSqlSessionFactory();/*** 用户登录* @param username* @param password* @return*/public User login(String username, String password){//2 获取SqlSession对象SqlSession sqlSession = factory.openSession();//3 获取UserMapper接口代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//4 执行方法,得到结果User user = userMapper.select(username, password);//5 处理结果,释放资源sqlSession.close();return user;}

3,在数据访问层定义查询sql语句

  @Select("select * from tb_user where username = #{username} and password = #{password}")User select(@Param("username") String username,@Param("password")  String password);

在login.jsp中写登录页面

<%--Created by IntelliJ IDEA.User: zhouxiangyangDate: 2021/12/20Time: 15:11To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>login</title><link href="css/login.css" rel="stylesheet">
</head>
<body>
<div id="loginDiv" style="height: 350px"><form action="/day11-brand-demo/loginServlet" id="form"><h1 id="loginMsg">LOGIN IN</h1><%--登录错误提示--%><div id="errorMsg">${login_msg}</div><p>Username:<input id="username" name="username" <%--value="${cookie.username.value}"如果用户登录时选择记住密码,那么这个用来回显密码和用户名--%>type="text" value="${cookie.username.value}"></p><p>Password:<input id="password" name="password" type="password" value="${cookie.password.value}"></p><%--记住密码按钮--%><p>Remember:<input id="remember" name="remember" type="checkbox" value="yes" ${cookie.username!=null?"checked":""}></p><div id="subDiv"><input type="submit" class="button" value="login up"><input type="reset" class="button" value="reset">&nbsp;&nbsp;&nbsp;<a href="register.jsp">没有账号?</a></div></form>
</div></body>
</html>

用户注册
1,注册页面书写,以及验证码判断

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>欢迎注册</title><link href="css/register.css" rel="stylesheet">
</head>
<body><div class="form-div"><div class="reg-content"><h1>欢迎注册</h1><span>已有帐号?</span> <a href="login.jsp">登录</a><%--展示错误信息的div--%><div id="errorMsg"><font color="red">${register_msg}</font></div></div><%-- 用户填写完注册信息后想客户端发送注册用户请求   --%><form id="reg-form" action="/day11-brand-demo/registerServlet" method="get"><table><tr><td>用户名</td><td class="inputs"><input name="username" type="text" id="username" value="${username1}"><br><span id="username_err" class="err_msg" style="display: none">用户名不太受欢迎</span></td></tr><tr><td>密码</td><td class="inputs"><input name="password" type="password" id="password" value="${password1}"><br><span id="password_err" class="err_msg" style="display: none">密码格式有误</span></td></tr><tr><td>验证码</td><td class="inputs"><input name="checkCode" type="text" id="checkCode"><%-- src="/day11-brand-demo/checkCodeServlet"验证码图片的地址--%><img src="/day11-brand-demo/checkCodeServlet" id="checkCodeImg" onclick="changeImage()"><a href="#" id="changeImg" onclick="changeImage()">看不清?</a></td></tr></table><div class="buttons"><input value="注 册" type="submit" id="reg_btn"></div><br class="clear"></form>
</div>
<script>function changeImage() {console.info("changeImage...")//修改img标签的src属性document.querySelector("#checkCodeImg").src="/day11-brand-demo/checkCodeServlet?"+new Date().getTime();}
</script>
</body>
</html>

2,controller控制层,接收注册请求,并执行注册判断,以及验证判断

 private UserService userService=new UserService();@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {      //获取用户注册的信息String username = request.getParameter("username");String password = request.getParameter("password");//获取请求中用户输入的验证码String checkCode = request.getParameter("checkCode");//获取session中存的验证码,用于判断String checkCodes = (String)
request.getSession().getAttribute("checkCodes");
//验证码使用一次之后,立马销毁request.getSession().removeAttribute("checkCodes");//判断用验证码是否为空或者是否与正确验证码不一致,if (checkCode==null||!checkCode.equalsIgnoreCase(checkCodes)){String username1 = request.getParameter("username");String password1 = request.getParameter("password");request.setAttribute("username1",username1);request.setAttribute("password1",password1);//将错误信息存入request域中,通过注册也买你展示request.setAttribute("register_msg","你输入的验证码有误");request.getRequestDispatcher("/register.jsp").forward(request,response);//如果验证码不正确就不继续执行,直到验证码正确再继续往下执行return;}User user = new User();try {BeanUtils.populate(user,request.getParameterMap());} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//将注册信息交给service业务逻辑处理层,判断注册信息是否存在boolean regist = userService.regist(user);if (regist){//如果用户信息添加成功则代表注册成功,跳转到登录页面request.setAttribute("login_msg","已注册成功,抓紧上号");request.getRequestDispatcher("/login.jsp").forward(request,response);}else {//如果用户注册失败,则给出提示并重新注册request.setAttribute("register_msg","你输入的用户名已存在");request.getRequestDispatcher("/register.jsp").forward(request,response);}}

3,controller控制层,验证码图片


@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//详细验证码方法建议百度String s = CheckCodeUtil.outputVerifyImage(100, 50, response.getOutputStream(), 4);HttpSession session = request.getSession();session.setAttribute("checkCodes",s);}

3,service业务逻辑处理层,判断用户是否存在,如果不存在则添加

 public boolean regist(User user){//2 获取SqlSession对象SqlSession sqlSession = factory.openSession();//3 获取UserMapper接口代理对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//4 执行方法,得到结果//4.1 调用selectByUsername方法,查询用户信息User existUser = userMapper.selectByUsername(user.getUsername());if(existUser==null){//4.3 如果user==null,表示用户名不存在,可以添加,调用add方法进行添加/注册userMapper.add(user);//5 处理结果,释放资源sqlSession.commit();sqlSession.close();return true; //表示注册成功}//5 处理结果,释放资源sqlSession.close();return false; //表示注册失败}

5,mapper接口中sql语句

    @Select("select * from tb_user where username = #{username}")User selectByUsername(String username);/*** 添加用户* @param user*/@Insert("insert into tb_user values(null,#{username},#{password})")void add(User user);
}

品牌增删改查案例,登录以及注册相关推荐

  1. JDBC+MySQL入门增删改查案例

    目录 前言 案例分析 核心思路拆解 案例涉及知识点 第一关 创建数据库和项目 创建数据库 创建项目 第二关 JDBC插入和查询 预备工作 单个插入 批量插入 查询数据 JDBC修改和删除 修改数据 删 ...

  2. java springboot+mybaits 实现数据库增删改查案例

    springboot是java中最实用,当前也是最流行的框架,mybaits对应dao层.想要做项目springboot和mybaits是必须的.今天就教大家怎么简单搭建一个用springboot的增 ...

  3. 5分钟做一个php的增删改查案例

    增删改查案例 PHP基础入门完成了,自己做了一个签到系统,用于可活动考勤,班级考勤等,主要是在校园中自己有时候需要使用,最近刚好学了PHP+MySQL的知识,于是自己构建了一个简单的考勤签到系统.这个 ...

  4. Java中的sqlsession_java相关:MyBatis中SqlSession实现增删改查案例

    java相关:MyBatis中SqlSession实现增删改查案例 发布于 2020-6-13| 复制链接 摘记: 前言     开博客这是第一次写系列文章,从内心上讲是有点担心自己写不好,写不全,毕 ...

  5. springBoot加layui和mybatis后台管理系统增删改查分页登录注销修改密码功能

    超市订单管理系统 1 登录页面 1.1 登录 点击提交按钮提交form表单使用post请求把(String name, String password)数据传到后台loginController 路径 ...

  6. springboot增删改查案例_大神基于SpringBoot开发一个Restful服务,实现增删改查功能...

    前言 在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便.快捷.但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练. ...

  7. python django ORM 简单的增删改查案例记录

    在学习中摸索简单的ORM和模板层html的数据交互中的增删改查功能. 主要和网络教程不同的是我查询用的是fileter去对象,再在html中用for in给对象实例化,再获取对应属性的值,而b站的教程 ...

  8. springboot+springm vc+mybatis实现增删改查案例!

    大家好,我是雄雄,欢迎关注微信公众号[雄雄的小课堂]. 前言 最近这几天都在看关于springboot的内容,每天新会获得点新收获,并且都总结发在公众号中:最后经过不懈努力,不断查找相关网页,解决各种 ...

  9. iView(1) 增删改查 案例

    今天分享一波基于vue的一套关于iView的增删改查demo源码 温馨小提示: iView官网文档:https://www.iviewui.com/docs/guide/install Vue Rou ...

最新文章

  1. Ceylon语言加入Eclipse基金会
  2. Mysql当前的根密码核查_在MySQL数据库中复位根用户的密码的方法
  3. 他的车队低调拿掉安全员,现在用10亿新融资惊艳了所有人
  4. linux并发控制之原子操作
  5. leetcode 94
  6. 新手如何拿下pytorch
  7. Python开发面试题及部分答案分享!
  8. 【vlfeat】O(n)排序算法——计数排序
  9. 前端开发面试题集锦(一)
  10. 遇到一个Linux文件系统因bios时间错误变成只读的问题
  11. 《Python数据挖掘:概念、方法与实践》一2.4 小结
  12. 升级Exchange server 2010 SP1至SP3版本相关问题解决方法
  13. java 文件名乱码_详解关于java文件下载文件名乱码问题解决方案
  14. CentOS下apache绑定域名
  15. 怎样做小游戏挖金子(VC,源码3)
  16. 最优化算法之鲍威尔算法(java)
  17. 召回率(R值),准确率(P值)以及F值
  18. 【T3】运行时错误3709
  19. 【舆情分析(5)】 情感倾向分析之鲁迅《祝福》里对祥林嫂(特定人物)的情感倾向
  20. 怎么计算中国股市分红最高的股票?什么是股息率?--使用python和tushare获取分红最高的股票

热门文章

  1. 用div模拟文本域实现高度自动撑开以及相关问题的解决方法
  2. 阿瑶的ajax学习笔记
  3. 最短路径的两种算法(迪杰斯特拉算法和弗洛伊德算法)
  4. Spring配置数据源没有maxActive和maxWait参数解决方法
  5. opencv python3 找图片色块_OpenCV中色块的检测与标注
  6. 微信扫描二维码关注公众号并成为下级
  7. “{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败:库没有注册
  8. 2021年度总结 -- 致自己也致你们
  9. 计算机组装与维护系统优化,计算机组装与维护教程教程课件第14章 计算机日常维护与优化.ppt...
  10. 适用于AG的AI:农业生产机器学习