JdbcTemplate实操查询数据库表中所有记录信息(十六课)

简介: JdbcTemplate实操查询数据库表中所有记录信息(十六课)

JdbcTemplate的功能类似于SSM三层架构的查询数据库的信息页面(十六课)

实现的功能:查询整张表的数据信息并且完成一级联动的下拉表:

代码模块的展示

第一步 定义一个页面用于在Html中展示数据的所有信息 这个页面发出Ajax请求到服务器中去 利用Json解析数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>员工管理系统-员工信息列表</title>
    <style>
        * {
            font-size: 28px;
            font-family: 方正粗黑宋简体;
        }
        h1 {
            background-color: lightseagreen;
            color: white;
        }
        button {
            width: 90%;
        }
        #sea, .delete, .update {
            color: white;
            font-weight: bold;
            padding: 5px 10px;
            border-width: 0px;
            border-radius: 6px;
        }
        #sea {
            background-color: #aae5f2;
            width: 100px;
        }
        .update {
            background-color: lightseagreen;
            color: black;
        }
        .delete {
            background-color: white;
            color: black;
        }
        #sea:hover, .update:hover {
            background-color: green;
            opacity: 0.9;
            color: white;
            height: 40px;
        }
        .delete:hover {
            background-color: red;
            color: white;
            height: 40px;
        }
        table {
            width: 100%;
            background-color: lightseagreen;
            color: white;
            border-radius: 20px;
            text-align: center;
            padding: 4px;
        }
        td:hover {
            background-color: white;
            color: black;
            border-radius: 20px;
            height: 40px;
        }
        td {
            height: 20%;
        }
        input {
            border-radius: 8px;
            border: 2px solid black;
        }
        datalist:hover {
            background-color: black;
            color: red;
        }
    </style>
    <script src="js/jquery-3.6.js"></script>
    <script>
        $(function () {
            //当页面加载完成后,自动发出ajax请求
            $.ajax({
                url: "ListServlet",
                type: "POST",
                data: "",
                success: function (json) {
                },
                error: function () {
                    alert("连接失败");
                },
                dataType: "json"
            });
        });
        //定义方法,用于判断文本框中内容改变事件
        function change(obj) {
            //获得用户选择的部门名称
            var info= obj.value;
            //将部门名称通过ajax请求发送给服务器,要求服务器根据部门名称查询该部门下的员工的入职时间
            $.ajax({
                url:"ListServlet",
                type:"GET",
                data:"workClass="+info,
                success:function (json) {
                    //将原有的数据进行清空
                    $("#d3").empty();
                    //["","",""]
                    for (var i = 0; i <json.length ; i++) {
                        $("#d3").append("<option>"+json[i]+"</option>");
                    }
                },
                error:function () {
                    alert("链接失败");
                },
                dataType:"json"
            });
        }
    </script>
</head>
<body>
<div align="center">
    <h1>员工信息列表</h1>
    <p>
    <input type="search" list="d2" onchange="change(this)" name="workClass" placeholder="请选择部门">&nbsp;&nbsp;
    <datalist id="d2"></datalist>
    <input type="search" list="d3" name="openDate" placeholder="请选择入职时间">&nbsp;&nbsp;
    <datalist id="d3"></datalist>
    <input id="sea" type="button" onclick="search()" value="搜索">
    </p>
    <table id="tab">
        <tr>
            <th>员工编号</th>
            <th>员工姓名</th>
            <th>员工性别</th>
            <th>员工年龄</th>
            <th>入职时间</th>
            <th>所属部门</th>
            <th>修改</th>
            <th>删除</th>
        </tr>
    </table>
    <input type="search" list="d4" name="name" placeholder="请查看姓名">&nbsp;&nbsp;
    <datalist id="d4"></datalist>
    <input type="search" list="d5" name="age" placeholder="请查看年龄">&nbsp;&nbsp;
    <datalist id="d5"></datalist>
    <input type="search" list="d6" name="name" placeholder="请查看性别">&nbsp;&nbsp;
    <datalist id="d6"></datalist>
</div>
</body>
</html>

访问这个地址进入SSM中的控制层ListServlet

第二步:SSM三层的架构搭建

控制层   @WebServlet(urlPatterns = "/ListServlet")

package Com.Emp.Controller;
import Com.Emp.Service.EmpServiceImp;
import Com.Emp.Service.IEmpService;
import com.fasterxml.jackson.databind.ObjectMapper;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@WebServlet(urlPatterns = "/ListServlet")
public class ListServlet extends HttpServlet {
    IEmpService service = new EmpServiceImp();
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");
        //1.从数据库中查询所有部门名称
        List<String> workClass = service.getWorkClass();
        List<String> name = service.getName();
        List<String> age = service.getAge();
        List<String> sex = service.getSex();
        //2.从数据库中查询所有入职时间
        List<String> dates = service.getDates();
        //3.从数据库中查询所有员工信息  SELECT * FROM  emp
        List<Map<String, Object>> list = service.getList();
        //采用jso格式封装 将三部分的数据采用json格式进行封装 [][][]  map中调用list集合
        Map<String, Object> map = new HashMap<>();
        map.put("workClass", workClass);
        map.put("name", name);
        map.put("age", age);
        map.put("sex", sex);
        map.put("dates", dates);
        map.put("list", list);
    }

业务逻辑层

package Com.Emp.Service;
import java.util.List;
import java.util.Map;
public interface IEmpService {
//查询的是一个字段 然后是多个部门信息所以在java中用的类型是
    //list<String>的类型的方式
    List<String> getWorkClass();
    List<String> getName();
    List<String> getSex();
    List<String> getAge();
    int add(Map<String, String[]> map);
    List<String> getDates();
    List<Map<String, Object>> getList();
    //根据部门名称查询该部门下的入职时间
    List<String> getDateByWorkClass(String workClass);
    List<Map<String, Object>> getlist(String woClass,String openDate);
}
package Com.Emp.Service;
import Com.Emp.Dao.EmpDaoImp;
import Com.Emp.Dao.IEmpDao;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class EmpServiceImp implements IEmpService {
    IEmpDao dao = new EmpDaoImp();
    @Override
    public List<String> getWorkClass() {
        return dao.getWorkClass();
    }
    @Override
    public List<String> getName() {
        return dao.getName();
    }
    @Override
    public List<String> getSex() {
        return dao.getSex();
    }
    @Override
    public List<String> getAge() {
        return dao.getAge();
    }
    @Override
    public List<String> getDates() {
        return dao.getDates();
    }
    @Override
    public List<Map<String, Object>> getList() {
        return dao.getList();
    }
    @Override
    public List<String> getDateByWorkClass(String workClass) {
        //判断部门信息是否是空的,如果不为空,则将部门信息作为查询条件
        //select openDate from emp where workClass=? order by openDate
        //如果为空,查询整张表的入职时间
        //select openDate from emp  order by openDate
        //以上两种情况可以通过模糊查询解决
        workClass=(workClass!=null)?"%"+workClass+"%":"%%";
        return dao.getDateByWorkClass(workClass);
    }
    @Override
    public List<Map<String, Object>> getlist(String woClass, String openDate) {
        //用户选择部门 no 时间
//        woClass=(woClass!=null,openDate=null);
        //用户选择时间  no 部门
        //        woClass=(woClass=null,openDate!=null);
        //用户 选择 部门  选择时间
        //        woClass=(woClass!=null,openDate=null);
        //啥也不想干
//        workClass = (workClass != null) ? "%" + workClass + "%" : "%%";
        woClass = (woClass != null) ? "%" + woClass + "%" : "%%";
        openDate = (openDate != null) ? "%" + openDate + "%" : "%%";
        return dao.getlist(woClass, openDate);
    }
}

数据访问层

package Com.Emp.Dao;
import java.util.List;
import java.util.Map;
public interface IEmpDao {
    List<String> getWorkClass();
    /*select distinct name from emp
    select distinct sex from emp
    select distinct age from emp*/
    List<String> getName();
    List<String> getSex();
    List<String> getAge();
    int add(Map<String, Object> map);
    //获取入职时间
    List<String> getDates();
    List<Map<String, Object>> getList();
    //根据部门名称查询该部门下的入职时间
    List<String> getDateByWorkClass(String workClass);
    //重载
    List<Map<String, Object>> getlist(String woClass,String openDate);
}
package Com.Emp.Dao;
import Com.Emp.Utils.DBUtil;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public class EmpDaoImp implements IEmpDao {
    /*一级联动*/
    @Override
    public List<String> getWorkClass() {
        /*在*/
        return DBUtil.jt.query("select distinct workClass from emp",
                new MyRowMapper("workClass"));
    }
    @Override
    public List<String> getName() {
        return DBUtil.jt.query("select distinct name from emp",
                new MyRowMapper("name"));
    }
    @Override
    public List<String> getSex() {
        return DBUtil.jt.query("select distinct sex from emp",
                new MyRowMapper("sex"));
    }
    @Override
    public List<String> getAge() {
        return DBUtil.jt.query("select distinct age from emp",
                new MyRowMapper("age"));
    }
    /**
     * 增加
     * @param map
     * @return
     */
    @Override
    public int add(Map<String, Object> map) {
        return DBUtil.jt.update("insert into emp values(?,?,?,?,?,?)",
                new Object[]{0, map.get("name"),
                        map.get("sex"), map.get("age"),
                        map.get("openDate"), map.get("workClass")});
    }
    @Override
    public List<String> getDates() {
        //SELECT DISTINCT openDate FROM emp ORDER BY openDate
        return DBUtil.jt.query("SELECT DISTINCT openDate FROM emp ORDER BY openDate", new MyRowMapper("openDate"));
    }
    @Override
    public List<Map<String, Object>> getList() {
        return DBUtil.jt.queryForList("SELECT * FROM  emp");
    }
    @Override
    public List<String> getDateByWorkClass(String workClass) {
        return DBUtil.jt.query("select distinct openDate from emp where workClass like ? order by openDate",
                new Object[]{workClass},
                new MyRowMapper("openDate"));
    }
    @Override
    public List<Map<String, Object>> getlist(String woClass, String openDate) {
        return DBUtil.jt.queryForList("select * from emp where workClass like ?and operDate like ?", new Object[]{woClass, openDate});
    }
    /*自己定义*/
    class MyRowMapper implements RowMapper<String> {
        String str = "";
        public MyRowMapper(String str) {
            this.str = str;
        }
        @Override
        public String mapRow(ResultSet resultSet, int i) throws SQLException {
            return resultSet.getString(str);
        }
    }
}

返回控制层

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");
        //1.从数据库中查询所有部门名称
        List<String> workClass = service.getWorkClass();
        List<String> name = service.getName();
        List<String> age = service.getAge();
        List<String> sex = service.getSex();
        //2.从数据库中查询所有入职时间
        List<String> dates = service.getDates();
        //3.从数据库中查询所有员工信息  SELECT * FROM  emp
        List<Map<String, Object>> list = service.getList();
        //采用jso格式封装 将三部分的数据采用json格式进行封装 [][][]  map中调用list集合
        Map<String, Object> map = new HashMap<>();
        map.put("workClass", workClass);
        map.put("name", name);
        map.put("age", age);
        map.put("sex", sex);
        map.put("dates", dates);
        map.put("list", list);
        //{workclass:[],dates:[],listMap:[]}
        //{} Map集合 自定义 实体类
        //数组 list集合 set集合
        //{workclass:["","",""] ,dates:["","",""],list[{"id":1,"name":"李四"}],{},{}}
        new ObjectMapper().writeValue(response.getWriter(), map);
    }

运行结果展示:

 

 

 

下篇博客的内容介绍

SsmAjaxJson分页效果的操作(第十七课)_星辰镜的博客-CSDN博客

相关文章
|
4月前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
448 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
6月前
|
Cloud Native 关系型数据库 分布式数据库
|
6月前
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
4月前
|
安全 Java 数据库
Jasypt加密数据库配置信息
本文介绍了使用 Jasypt 对配置文件中的公网数据库认证信息进行加密的方法,以提升系统安全性。主要内容包括:1. 背景介绍;2. 前期准备,如依赖导入及版本选择;3. 生成密钥并实现加解密测试;4. 在配置文件中应用加密后的密码,并通过测试接口验证解密结果。确保密码安全的同时,保障系统的正常运行。
291 3
Jasypt加密数据库配置信息
|
7月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
7月前
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
7月前
|
数据库
【YashanDB知识库】数据库用户所拥有的权限查询
【YashanDB知识库】数据库用户所拥有的权限查询
|
7月前
|
存储 运维 监控
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
221 1
|
7月前
|
缓存 NoSQL 关系型数据库
WordPress数据库查询缓存插件
这款插件通过将MySQL查询结果缓存至文件、Redis或Memcached,加速页面加载。它专为未登录用户优化,支持跨页面缓存,不影响其他功能,且可与其他缓存插件兼容。相比传统页面缓存,它仅缓存数据库查询结果,保留动态功能如阅读量更新。提供三种缓存方式选择,有效提升网站性能。
113 1

热门文章

最新文章