JavaWeb08(MVC应用02[家居商城]&连接数据库)

简介: JavaWeb08(MVC应用02[家居商城]&连接数据库)

一.绑定分类

1.1 效果预览

1.2 代码实现

  ①底层代码

/**
 * 查询类别全部
 */
    public List<Type> getAll() {
        List<Type> ls = new ArrayList<Type>();
        try {
            con=DBHelper.getCon();
            String sql="select * from tb_type";
            ps=con.prepareStatement(sql);
            rs=ps.executeQuery();
            while(rs.next()) {
                Type t = new Type(rs.getInt(1),rs.getString(2));
                ls.add(t);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBHelper.myClose(con, ps, rs);
        }
        return ls;
    }

//调用业务逻辑层
ITypeBiz itb = new TypeBiz();
//设置编码
req.setCharacterEncoding("utf-8");
//调用查询全部商品的集合方法
 List<Goods> goodsls = igb.getAll(tid,str);
//存起来  仅转发有效
 req.setAttribute("typels", typels);
//转发到type.jsp进行绑值展示数据
req.getRequestDispatcher("type.jsp").forward(req, resp);

②前端代码

<div class="col-3">
      <div class="list-group">
           <a href="#" class="list-group-item list-group-item-action  active"> 所有商品</a>
           <c:forEach items="${typels}" var="t">
             <a href="#" class="list-group-item list-group-item-action>${t.tname}</a>
                    </c:forEach>
</div>
        </div>

二.绑定所有商品

2.1 效果预览

2.2.代码实现

①底层代码

/**
 * 查询类别全部
 */
    public List<Type> getAll() {
        List<Type> ls = new ArrayList<Type>();
        try {
            con=DBHelper.getCon();
            String sql="select * from tb_type";
            ps=con.prepareStatement(sql);
            rs=ps.executeQuery();
            while(rs.next()) {
                Type t = new Type(rs.getInt(1),rs.getString(2));
                ls.add(t);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            DBHelper.myClose(con, ps, rs);
        }
        return ls;
    }

//调用业务逻辑层
IGoodsBiz igb = new GoodsBiz();
 //调用查询全部商品的集合方法
 List<Goods> goodsls = igb.getAll(tid,str);
//把查询出来的商品集合存起来
req.setAttribute("goodsls", goodsls);


②前端代码

<!--绑定商品  -->
<div class="row">
      <c:forEach items="${goodsls}" var="g">
             <div class="col-lg-3 col-md-4 col-sm-6">
                    <figure class="figure  text-center">
                        <img src="${g.gpath}" class="figure-img img-fluid rounded" >
                            <figcaption class="figure-caption">
                                  <b>${g.gname}<b><br>
                                        <b>&yen;${g.gprice}</b>
                </c:forEach>

三.分类查询

3.1效果预览

3.2代码实现

①底层代码

public List<Goods> getAll(String tid) {
        String sql="select * from tb_goods";
//tid为就意味着查询全部 不为空就意味着点了其他类别 传了类别id
        if(tid!=null) {
                sql+=" and tid="+tid;
            }
        sql+="order by gid desc";
}

//调用业务逻辑层
IGoodsBiz igb = new GoodsBiz();
//接收表单提交过来的类别ID
String tid = req.getParameter("tid");//第一次进来就是null
 //调用分类查询的方法
 List<Goods> goodsls = igb.getAll(tid,str);
//方便显示选中的样式 为了让对应的类别加active样式
req.setAttribute("tid", tid);

②前端代码

<!-- 点击“所有商品”的时候 tid为null 因此判断为empty才选中 同时刷新所有-->
 <a href="type.do" class="list-group-item list-group-item-action ${empty tid?'active':''}"> 所有商品</a>
<!-- 让对应的类别选中  加入active样式 因此要将tid存起来-->
 <a href="type.do?tid=${t.tid}&index=2" class="list-group-item list-group-item-action ${t.tid==tid?'active':''}">${t.tname}</a>

四.模糊查询

4.1 效果预览

4.2代码实现

①底层代码

public List<Goods> getAll(String tid,String str) {
            if(str==null) {
                str="";//相当于查询全部
            }
            String sql="select * from tb_goods where gname like '%"+str+"%'";
               //不为空就意味着点了其他类别  传了类别id
            if(tid!=null&&!"".equals(tid)) {
                sql+=" and tid="+tid;//将where----->and
            }
            sql+=" order by gid desc";

//调用分类查询方法
List<Goods> goodsls = igb.getAll(tid,str);
//方便连同分类一起查询  同时文本框显示关键字
req.setAttribute("str", str);

②前端代码

<form action="type.do" method="post">
                <!--传index 为了让分类选中  -->
                <input type="hidden" name="index" value="2"/>
                <!--传tid 为了模糊查询类别联合用  -->
                <input type="hidden" name="tid" value="${tid}"/>
                    <div class="form-group">
                        <div class="input-group mb-3">
                            <input name="str" value="${str}" type="text" class="form-control" placeholder="请输入家居关键字">
                            <div class="input-group-append">
                                <button class="btn btn btn-primary" type="submit" ></button>
                            </div>
                        </div>
                </form>
        </div>

五.分类模糊查询

5.1 效果预览

5.2 代码实现

//说明点了其他类别 tid是有值的   不为空也不为空字符串的时候
if(tid!=null&&!"".equals(tid)) {
                sql+=" and tid="+tid;
 }
 <!--传tid 为了模糊查询类别联合用  -->
 <input type="hidden" name="tid" value="${tid}"/>
 <!--点击类别的同时传递关键字到servlet  -->
 <a href="type.do?tid=${t.tid}&index=2&gname=${gname}">${t.tname}</a>

六.细节处理

6.1 效果预览

6.2代码实现

<!--查询未果  -->
      <c:if test="${empty goodsls}">
            <div class="h2" >暂未查找到"<span class="text-danger">${str}</span>"相关的宝贝~<a href="type.do?index=2">点我刷新喔~</a>
</div>
</c:if>


相关文章
|
14天前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
3月前
|
存储 关系型数据库 数据库
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
|
1月前
|
SQL Java 关系型数据库
Java连接MySQL数据库环境设置指南
请注意,在实际部署时应该避免将敏感信息(如用户名和密码)硬编码在源码文件里面;应该使用配置文件或者环境变量等更为安全可靠地方式管理这些信息。此外,在处理大量数据时考虑使用PreparedStatement而不是Statement可以提高性能并防止SQL注入攻击;同时也要注意正确处理异常情况,并且确保所有打开过得资源都被正确关闭释放掉以防止内存泄漏等问题发生。
82 13
|
1月前
|
SQL 关系型数据库 MySQL
MySQL数据库连接过多(Too many connections)错误处理策略
综上所述,“Too many connections”错误处理策略涉及从具体参数配置到代码层面再到系统与架构设计全方位考量与改进。每项措施都需根据具体环境进行定制化调整,并且在执行任何变更前建议先行测试评估可能带来影响。
624 11
|
1月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
128 9
|
1月前
|
存储 弹性计算 安全
现有数据库系统中应用加密技术的不同之处
本文介绍了数据库加密技术的种类及其在不同应用场景下的安全防护能力,包括云盘加密、透明数据加密(TDE)和选择列加密。分析了数据库面临的安全威胁,如管理员攻击、网络监听、绕过数据库访问等,并通过能力矩阵对比了各类加密技术的安全防护范围、加密粒度、业务影响及性能损耗。帮助用户根据安全需求、业务改造成本和性能要求,选择合适的加密方案,保障数据存储与传输安全。
|
2月前
|
存储 人工智能 数据库
视图是什么?为什么要用视图呢?数据库视图:定义、特点与应用
本文三桥君深入探讨数据库视图的概念与应用,从定义特点到实际价值全面解析。视图作为虚拟表具备动态更新、简化查询、数据安全等优势,能实现多角度数据展示并保持数据库重构的灵活性。产品专家三桥君还分析了视图与基表关系、创建维护要点及性能影响,强调视图是提升数据库管理效率的重要工具。三桥君通过系统讲解,帮助读者掌握这一常被忽视却功能强大的数据库特性。
563 0
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
404 0

热门文章

最新文章