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>


相关文章
|
2月前
|
存储 关系型数据库 数据库
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
|
3月前
|
安全 druid Nacos
0 代码改造实现应用运行时数据库密码无损轮转
本文探讨了敏感数据的安全风险及降低账密泄漏风险的策略。国家颁布的《网络安全二级等保2.0标准》强调了企业数据安全的重要性。文章介绍了Nacos作为配置中心在提升数据库访问安全性方面的应用,并结合阿里云KMS、Druid连接池和Spring Cloud Alibaba社区推出的数据源动态轮转方案。该方案实现了加密配置统一托管、帐密全托管、双层权限管控等功能,将帐密切换时间从数小时优化到一秒,显著提升了安全性和效率。未来,MSE Nacos和KMS将扩展至更多组件如NoSQL、MQ等,提供一站式安全服务,助力AI时代的应用安全。
229 14
|
4月前
|
关系型数据库 数据库 RDS
【瑶池数据库训练营及解决方案本周精选(探索PolarDB,参与RDS迁移、连接训练营)】(5.30-6.8)
本周精选聚焦数据库迁移训练营、快速连接云数据库RDS训练营及智能多模态搜索解决方案。为用户提供模拟教程与实战演练,学习RDS MySQL实例连接与数据管理技能,助力企业智能化发展。每周解锁数据库实战新场景,抓紧时间,精彩不容错过!
|
2月前
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
1月前
|
存储 人工智能 数据库
视图是什么?为什么要用视图呢?数据库视图:定义、特点与应用
本文三桥君深入探讨数据库视图的概念与应用,从定义特点到实际价值全面解析。视图作为虚拟表具备动态更新、简化查询、数据安全等优势,能实现多角度数据展示并保持数据库重构的灵活性。产品专家三桥君还分析了视图与基表关系、创建维护要点及性能影响,强调视图是提升数据库管理效率的重要工具。三桥君通过系统讲解,帮助读者掌握这一常被忽视却功能强大的数据库特性。
267 0
|
2月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
192 0
|
3月前
|
SQL 数据库
软考软件评测师——数据库系统应用
本文介绍了关系数据库的基础知识与应用,涵盖候选码定义、自然连接特点、实体间关系(如1:n和m:n)、属性分类(复合、多值与派生属性)以及数据库设计规范。同时详细解析了E-R图转换原则、范式应用(如4NF)及Armstrong公理体系。通过历年真题分析,结合具体场景(如银行信用卡额度、教学管理等),深入探讨了候选键求解、视图操作规范及SQL语句编写技巧。内容旨在帮助读者全面掌握关系数据库理论与实践技能。
|
5月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
260 14
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
576 1