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博客

相关文章
|
11天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
11 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
8天前
|
存储 缓存 固态存储
怎么让数据库查询更快
【10月更文挑战第28天】
18 2
|
10天前
|
存储 缓存 关系型数据库
怎么让数据库查询更快
【10月更文挑战第25天】通过以上综合的方法,可以有效地提高数据库查询的速度,提升应用程序的性能和响应速度。但在优化过程中,需要根据具体的数据库系统、应用场景和数据特点进行合理的调整和测试,以找到最适合的优化方案。
|
11天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
180 1
|
11天前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
78 1
|
30天前
|
SQL Java 数据库连接
如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
【10月更文挑战第6天】在代码与逻辑交织的世界中,我从一名数据库新手出发,通过不断探索与实践,最终成为熟练掌握JDBC的开发者。这段旅程充满挑战与惊喜,从建立数据库连接到执行SQL语句,再到理解事务管理和批处理等高级功能,每一步都让我对JDBC有了更深的认识。示例代码展示了如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
72 5
|
28天前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
21 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
9天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
46 0
|
10天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
41 0
|
29天前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
57 0
下一篇
无影云桌面