JdbcTemplate中的三层架构主要是灵活掌控Ajax和Json解析:
采用的技术有 SSM三层架构 Service的技术 Ajax访问服务器 Json解析数据信息 Html CSS Jquery JavaScript都用到了一些基础操作
为了切合实际的开发本案例还用上了注册页面和登录页面还有异常页面
实现的功能:查询操作和增加操作 还会实现一级联动
完成增加的功能
为什么要使用jdbctemplate
如果直接使用JDBC的话,需要我们加载数据库驱动、创建连接、释放连接、异常处理等一系列的动作,繁琐且代码看起来不直观。而使用 jdbctemplate 则无需关注加载驱动、释放资源、异常处理等一系列操作,我们只需要提供 sql 语句并且提取最终结果即可,大大方便我们编程开发。此外,Spring提供的JdbcTempate能直接数据对象映射成实体类,不再需要获取ResultSet去获取值、赋值等操作,提高开发效率;
jdbctemplate常用方法
jdbcTemplate主要提供的5类方法及使用:
(1)execute() 方法:可以执行任何SQL语句,一般用于执行DDL语句。
(2)update(sqlStr, 参数列表) 方法:用于执行新增、修改、删除等语句。
(3)batchUpdate() 方法:用于执行批处理相关语句,batchUpdate方法第二参数是一个元素为 Object[] 数组类型的 List 集合。
(4)query() 方法及 queryForXXX() 方法:用于执行查询相关语句,查询结果为基本数据类型或者是单个对象一般使用 queryForObject()
queryForInt():查询一行数据并返回 int 型结果。例子:jdbcTemplate.queryForInt("select count(*) from user")
queryForObject(sqlStr, 指定的数据类型, 参数列表):查询一行任何类型的数据,最后一个参数指定返回结果类型。例子:jdbcTemplate.queryForObject("selct count(*) from user", Integer.class)
queryForMap(sqlStr, 参数列表):查询一行数据并将该行数据转换为 Map 返回。将会将列名作为key,列值作为 value 封装成 map。当查询出来的行数大于1时会报错。例子:jdbcTemplate.queryForMap("select * from user where username = ?", "aaa");
List<Map<String, Object>> queryForList(sqlStr, 参数列表):将查询结果集封装为 list 集合,该集合的每一条元素都是一个 map。
query(sqlStr, RowMapper对象, 参数列表):查询多行数据,并将结果集封装为元素是 JavaBean 的 list。(注意,指定的JavaBean的属性最好不要是基本类型,因为查询出来的结果可能是null,而null赋值为基本数据类型将会报错。比如int最好定义为Integer)
(5)call() 方法:用于执行存储过程、函数相关语句。
增加一条数据页面的实现的功能
增加的页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>员工管理系统-添加新员工</title> <style> * { font-family: Consolas; font-size: 30px; } table { width: 50%; height: 50%; background-color: #c1e9f2; color:lightseagreen; border-width: 0px; border-radius: 8px; text-align: center; } #sub { width: 100px; padding: 5px 10px; background-color: cornflowerblue; color: white; font-weight: bold; border-width: 0px; border-radius: 6px; } #sub:hover { background-color: red; } </style> <script src="js/jquery-3.6.js"></script> <script> //当该页面加载完成,自动触发事件,发送ajax请求 //获得数据库中现有的部门信息 $(function () { $.ajax({ url: "HomeServlet", type: "POST", data: "", success: function (json) { //["行政管理部","前端开发部","人力资源部"] 获得请求为post请求 for (var i = 0; i < json.length; i++) { $("#dl").append("<option>" + json[i] + "</option>"); } }, error: function () { alert("连接服务器失败"); }, dataType: "json" }); }); </script> </head> <body> <div align="center"> <form action="HomeServlet" method="get"> <table> <tr> <th colspan="2">在数据库的表中增加一条记录</th> </tr> <tr> <td>姓名:</td> <td><input type="text" name="name" placeholder="请输入新员工姓名"></td> </tr> <tr> <td>性别:</td> <td><input type="radio" value="男" name="sex">男 <input type="radio" value="女" name="sex">女 </td> </tr> <tr> <td>年龄:</td> <td><input type="number" name="age" placeholder="请输入新员工年龄"></td> </tr> <tr> <!--可以选择现有的部门,也可以新增部门--> <td>部门名称:</td> <td><input type="search" list="dl" name="workClass" placeholder="请选择部门"> <datalist id="dl"> </datalist> </td> </tr> <tr> <td colspan="2"><input id="sub" type="submit" value="添加"></td> </tr> </table> </form> </div> </body> </html>
控制层
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //接收添加新员工页面提交的数据 //request对象的getParameterMap方法只能用于接收浏览器发送的参数数据 //开发者不能手动再添加数据至该Map集合,该方法是具备线程锁 Map<String, String[]> parameterMap = request.getParameterMap(); int add = service.add(parameterMap); if (add > 0) { //添加成功,跳回主页面 response.sendRedirect("index.html"); } }
业务逻辑层
@Override public int add(Map<String, String[]> map) { String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); //定义Map集合,将数据全部提取至新的map集合中 Map<String, Object> m = new HashMap<>(); //使用map集合迭代 for (Map.Entry<String, String[]> entry : map.entrySet()) { m.put(entry.getKey(), entry.getValue()[0]); } m.put("openDate", date); return dao.add(m); }
数据访问层
int add(Map<String, Object> map);
@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")}); }
本博客是功能展示:
图一
图二
图三
图四
图五指令要实现一级联动
图六
图七
图八实现了一级联动
图九
下篇博客的介绍
JdbcTemplate的功能类似于SSM中的M一级联动(十五课)_星辰镜的博客-CSDN博客