SSM 实训笔记 -11- 使用 Spring MVC + JDBC Template 实现筛选、检索功能(maven)

本篇是新建的一个数据库,新建的一个完整项目。

本篇内容:

(1)使用 Spring MVC + JDBC Template 实现数据库查询

(2)实现对数据库信息的筛选、检索功能

(3)分类查询的功能

效果演示:

一、创建数据库

(1)如果没有 Navicat 可以自己手动在命令行建库。

分享一篇文章:Navicat for MySQL 最新版安装与破解 + 报错解决办法

(2)创建 hrdb 数据库,创建 employee 表:

(3)创建 post 表(职位表):

二、创建和配置 Maven Web 项目、

(1)如果不会创建项目请参考:

(!特别提醒,建议项目名及包名和下面的本篇的项目文件名一致)

SSM 实训笔记 -05- 创建 Maven Web 项目 + Tomcat 及目录结构配置

(2)完整项目目录结构:

(3)先创建项目,标记文件夹(java、resources)

(4)使用 Maven 加载依赖包:

  <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency> </dependencies>

配置 pom 需要导入,我们选择自动导入:

(5)打开配置 web.xml 文件:

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>

(6)在 web.xml 文件的目录下,创建 springmvc.xml (建议名称一致):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.xpwi.controller"/> <!--配置 json 消息转换器-->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
</list>
</property>
</bean> </beans>

(7)同样在 web.xml 文件的目录下,创建 applicationContext.xml (建议名称一致):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
<context:component-scan base-package="com.xpwi.dao,com.xpwi.service"/>
<!-- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath*:jdbcConfig.properties">
</property>
</bean>-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/hrdb?serverTimezone=UTC"></property>
<property name="username" value="root"></property>
<property name="password" value="xiaopengwei"></property>
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
</bean>
<bean id="jdbcTemplage" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>

(8)在 resources/jdbc.properties(手动创建的目录,没有直接创建此类的文件的方式,直接新建 file,自己写后缀名即可,内容:

(填写自己创建的数据库的信息)

url=jdbc:mysql://localhost:3306/hrdb?serverTimezone=UTC
username=root
password=xiaopengwei
driverClassName=com.mysql.cj.jdbc.Driver

**(9)在 webapp/node 目录下,安装 jQuery 和 Bootstrap3 **:

步骤:

  • 安装 node.js
  • 在 cmd 进入上述目录
  • 使用:
npm install jquery
npm install bootstrap3

三、项目源代码

(1)index.html 文件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>查询用户</title>
<link rel="stylesheet" href="node/node_modules/bootstrap3/dist/css/bootstrap.min.css">
<script type="text/javascript" src="node/node_modules/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="node/node_modules/bootstrap3/dist/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(function () {
$.ajax({
url:"findAllPost.do",
//async:false,
method:"get",
dataType:"json",
success:function (data) {
//alert(data);
var str="<option value='0'>未选择</option>";
//var jsonObj = JSON.parse(data);
$.each(data,function (index,row,rs) {
str+="<option value='"+row.id+"'>"+row.post_name+"</option>";
});
$("#input_post").html(str);
},
error:function () {
alert("请求失败");
}
});
});
function doSelect() { var input_name = $("#input_name").val();
var input_post = $("#input_post").val(); $.ajax({
// url:"http://10.2.21.34:8080/StudentSystem/userServletForAjax",
url:"doSelect.do",
method:"get",
data:{
"emp_name":input_name,
"post_type":input_post
},
dataType:"json",
success:function (data) {
//alert("成功");
var str = "";
$.each(data,function (i,item) {
//对数据库数据进行转换
if (item.post_type == 1) {
item.post_type = "行政助理";
}else if(item.post_type == 2) {
item.post_type = "业务经理";
}else{
item.post_type = "总经理";
};
if (item.emp_sex == 1) {
item.emp_sex = "男";
}else{
item.emp_sex = "女";
};
str+="<tr><td><input type='checkbox' value='"
+item.id+"'></td><td>"
+item.id+"</td><td>"
+item.post_type+"</td><td>"
+item.emp_name+"</td><td>"
+item.emp_sex+"</td><td>"
+item.emp_age+"</td><td>"
+item.emp_depart+"</td><td>"
+item.emp_year+"</td><td>"
+"<a href='javascript:deleteUserById(\""+data.id+"\")' title='删除' onclick='return confirm(\"是否真的删除记录?\")'><span class='glyphicon glyphicon-remove'></span>删除</a></td></tr>";
});
$("#alluser").html(str); },
error:function () {
alert("服务器请求失败")
}
})
}
</script>
<!--数据展示部分 js -->
<script>
function addUserInfo() {
$.post("deleteUserByIdServlet",{"uname":$("#uname").val(),"role":$("#role").val()},function (data) {
if (data == "true"){
alert("添加成功!");
findAllUser();
} else {
alert("添加失败!"); } });
} function showAddModal() {
$("#myModal").modal("show");
} //删除
function deleteUserById(id) {
$.ajax({
url:"deleteUserByIdServlet",
data:{"id":id},
success:function (result) {
if (result=="true"){
findAllUser();
} else {
alert("删除记录失败!");
} },error:function () {
alert("访问服务器失败")
}
}) } //查询
function findAllUser() {
$.ajax({
// url:"http://10.2.21.34:8080/StudentSystem/userServletForAjax",
url:"doFindAllUser.do",
method:"get",
dataType:"json",
success:function (data) {
//alert("成功");
var str = "";
$.each(data,function (i,item) {
//对数据库数据进行转换
if (item.post_type == 1) {
item.post_type = "行政助理";
}else if(item.post_type == 2) {
item.post_type = "部门经理";
}else{
item.post_type = "总经理";
};
if (item.emp_sex == 1) {
item.emp_sex = "男";
}else{
item.emp_sex = "女";
};
str+="<tr><td><input type='checkbox' value='"
+item.id+"'></td><td>"
+item.id+"</td><td>"
+item.post_type+"</td><td>"
+item.emp_name+"</td><td>"
+item.emp_sex+"</td><td>"
+item.emp_age+"</td><td>"
+item.emp_depart+"</td><td>"
+item.emp_year+"</td><td>"
+"<a href='javascript:deleteUserById(\""+data.id+"\")' title='删除' onclick='return confirm(\"是否真的删除记录?\")'><span class='glyphicon glyphicon-remove'></span>删除</a></td></tr>";
});
$("#alluser").html(str); },
error:function () {
alert("服务器请求失败")
}
}) }
findAllUser();
</script>
</head>
<body>
<div style="width: 80%;margin-left: 10%">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="text-info">
雇员信息管理系统
</h3>
</div>
<form name="loginForm">
<div class="panel-body">
雇员姓名
<input class="form-control" name="input_name" id="input_name" placeholder="请输入姓名"><br>
雇员职位
<select id="input_post" name="input_post" class="form-control">
<option value="0">请选择</option>
</select>
</div> <!--查询按钮-->
<a class="btn btn-primary" style="margin-left: 10%" onclick="doSelect()">查询一下</a>
</form>
</div> </div>
<!--最外层控制--> <hr> <!--数据展示部分-->
<div style="width: 80%;margin-left: 10%">
<div class="well" style="height: 70px">
<h3>用户信息</h3>
<!--<a class="btn btn-primary" style="float:right;margin-right: 10%" onclick="showAddModal()"><span class="glyphicon glyphicon-plus"></span>添加</a>-->
</div>
<table class="table table-striped table-hover">
<tr>
<td>全选</td>
<td>雇员编号</td>
<td>雇员职位</td>
<td>雇员姓名</td>
<td>雇员性别</td>
<td>雇员年龄</td>
<td>所属部门</td>
<td>雇员工龄</td>
<td>操作</td>
</tr>
<tbody id="alluser"> </tbody>
</table> <!-- 按钮触发模态框 -->
<!--<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">开始演示模态框</button>-->
<!-- 模态框(Modal) -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel">添加用户信息</h4>
</div> <div class="modal-footer">
<div> <!--输入框内容-->
<div class="input-group">
<input id="uname" type="text" class="form-control" placeholder="请输入用户名">
<span class="glyphicon glyphicon-user input-group-addon"></span>
</div>
<br>
<select id="role" name="role" class="form-control ">
<option value="">请选择</option>
<option value="admin">管理员</option>
<option value="teacher">教师</option>
<option value="student">学生</option>
</select>
</div>
<br>
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" onclick="addUserInfo()">添加</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal -->
</div> </div>
<!--80% 控制-->
</body>
</html>

(2)pojo/UserInfo.java 文件:

package pojo;

import org.springframework.jdbc.core.ResultSetExtractor;

import java.util.List;
import java.util.Map; public class UserInfo { private int id;
private int post_type;
private String emp_name;
private int emp_sex;
private int emp_age;
private String emp_depart;
private int emp_year; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getPost_type() {
return post_type;
} public void setPost_type(int post_type) {
this.post_type = post_type;
} public String getEmp_name() {
return emp_name;
} public void setEmp_name(String emp_name) {
this.emp_name = emp_name;
} public int getEmp_sex() {
return emp_sex;
} public void setEmp_sex(int emp_sex) {
this.emp_sex = emp_sex;
} public int getEmp_age() {
return emp_age;
} public void setEmp_age(int emp_age) {
this.emp_age = emp_age;
} public String getEmp_depart() {
return emp_depart;
} public void setEmp_depart(String emp_depart) {
this.emp_depart = emp_depart;
} public int getEmp_year() {
return emp_year;
} public void setEmp_year(int emp_year) {
this.emp_year = emp_year;
}
}

(3)service/EmployeeService.java 文件:

package com.xpwi.service;

import com.xpwi.dao.EmployeeDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List;
import java.util.Map; @Service
public class EmployeeService {
@Autowired
EmployeeDAO employeeDAO;
public List<Map<String, Object>> findPost() {
return employeeDAO.findPost();
} public List<Map<String, Object>> doFindAllUser() {
return employeeDAO.doFindAllUser();
} public List<Map<String, Object>> doSelect(String emp_name, int post_type) {
return employeeDAO.doSelect(emp_name,post_type);
}
}

(4)dao/Employee.java 文件:

package com.xpwi.dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Repository; import java.util.List;
import java.util.Map; @Repository
public class EmployeeDAO {
@Autowired
JdbcTemplate jdbcTemplate;
public List<Map<String,Object>> findPost(){
String sql="select * from post";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
return maps;
} public List<Map<String, Object>> doFindAllUser() {
String sql="select * from employee";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
return maps;
} public List<Map<String, Object>> doSelect(String emp_name, int post_type) {
String sql = "select * from employee where emp_name = '"+emp_name +"'";
String sql2 = "select * from employee where post_type = "+ post_type;
//System.out.println("111");
//System.out.println("**2**:"+post_type);
List<Map<String, Object>> maps;
maps = jdbcTemplate.queryForList(sql);
if (maps.isEmpty()){
maps = jdbcTemplate.queryForList(sql2);
return maps;
}else {
return maps;
}
}
}

(5)controller/Employee.java 文件:

package com.xpwi.controller;

import com.xpwi.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import pojo.UserInfo; import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map; @Controller
public class Employee {
@Autowired
EmployeeService employeeService;
@RequestMapping(value = "/findAllPost.do",method = RequestMethod.GET)
@ResponseBody
public List<Map<String, Object>> findPost() throws UnsupportedEncodingException {
List<Map<String, Object>> post = employeeService.findPost();
return post;
} @RequestMapping(value = "/doFindAllUser.do",method = RequestMethod.GET)
@ResponseBody
public List<Map<String, Object>> doFindAllUser() throws UnsupportedEncodingException {
List<Map<String, Object>> post = employeeService.doFindAllUser();
return post;
} @RequestMapping(value = "/doSelect.do")
@ResponseBody
public List<Map<String, Object>> doSelect(UserInfo userInfo) throws UnsupportedEncodingException { System.out.println(userInfo.getEmp_name()+userInfo.getPost_type());
if (userInfo.getEmp_name()==""){
userInfo.setEmp_name("1");
}
String emp_name = userInfo.getEmp_name();
int post_type = userInfo.getPost_type(); List<Map<String, Object>> post = employeeService.doSelect(emp_name,post_type);
return post;
}
}

四、运行调试

更多文章链接:

SSM 实训笔记 -11- 使用 Spring MVC + JDBC Template 实现筛选、检索功能(maven)的更多相关文章

  1. Spring的JDBC Template

    Spring的JDBC Template(JDBC模板)简化JDBC API开发,使用上和Apache公司的DBUtils框架非常类似) 快速入门实例 1.创建项目后,导入Spring基础核心开发包. ...

  2. Spring MVC 学习总结(十一)——IDEA+Maven+多模块实现SSM框架集成

    一.SSM概要 与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC ...

  3. 【Spring学习笔记-MVC-12】Spring MVC视图解析器之ResourceBundleViewResolver

    场景 当我们设计程序界面的时候,中国人希望界面是中文,而美国人希望界面是英文. 我们当然希望后台代码不需改变,系统能够通过配置文件配置,来自己觉得是显示中文界面还是英文界面. 这是,Spring mv ...

  4. 【Spring学习笔记-MVC-16】Spring MVC之重定向-解决中文乱码

    概述 spring MVC框架controller间跳转,需重定向,主要有如下三种: 不带参数跳转:形如:http://localhost:8080/SpringMVCTest/test/myRedi ...

  5. 【Spring学习笔记-MVC-15】Spring MVC之异常处理

    作者:ssslinppp       1. 描述 在J2EE项目的开发中,不管是对底层的数据库操作过程,还是业务层的处理过程,还是控制层的处理过程,都不可避免会遇到各种可预知的.不可预知的异常需要处理 ...

  6. 【Spring学习笔记-MVC-14】Spring MVC对静态资源的访问

    作者:ssslinppp       参考链接: http://www.cnblogs.com/luxh/archive/2013/03/14/2959207.html  http://www.cnb ...

  7. 【Spring学习笔记-MVC-13】Spring MVC之文件上传

    作者:ssslinppp       1. 摘要 Spring MVC为文件上传提供了最直接的支持,这种支持是通过即插即用的MultipartResolve实现的.Spring使用Jakarta Co ...

  8. 【Spring学习笔记-MVC-10】Spring MVC之数据校验

    作者:ssslinppp       1.准备 这里我们采用Hibernate-validator来进行验证,Hibernate-validator实现了JSR-303验证框架支持注解风格的验证.首先 ...

  9. SSM学习(三)--集成spring mvc

    spirng mvc是一个mvc框架,与struts2类似,都是基于Servlet封装而成的框架,所以要了解spring mvc或者struts2比需先了解Servlet,本篇我们先把spring m ...

随机推荐

  1. JVM(四)JVM的双亲委派模型

    1.两种不同的类加载器 从JAVA虚拟机的角度来讲,只存在两种不同的类加载器:一种是启动类加载器(Bootstrap ClassLoader),这个类加载器使用C++语言实现,是虚拟机自身的一部分:另 ...

  2. Vue笔记:webpack项目vue启动流程

    VUE启动流程 1. package.json 在执行npm run dev的时候,会在当前目录中寻找 package.json 文件, 有点类似 Maven 的 pom.xml 文件,包含项目的名称 ...

  3. redis学习(六)redis管道

    redis管道 1.redis管道介绍 redis采用的是CS架构,客户端与服务器端通过tcp协议进行连接通信,因此无论是发出请求还是接收响应,都必须经过网络传输.在tcp连接过程中,客户端和服务器端 ...

  4. Git 管理项目

    一个很小的HTML项目,使用.Git来记录和跟踪这个项目.包括以下内容: 创建版本库. 添加与修改文件. 创建新分支. 打标签并整理版本库. 克隆版本库. 创建版本库 Creating a Repos ...

  5. Restful API 设计参考原则

    在项目中,需要为后台服务撰写API.刚开始接触的时候,并没有考虑太多,就想提供URL,服务端通过该URL进行查询.创建.更新等操作即可.但再对相关规范进行了解后,才发现,API的设计并没有那么简单,远 ...

  6. MQ5.3在redhat9上的安装

    一.准备工作 1.安装linux软件包 确保系统中有libgcc_s.so和libstdc++.so.3. 如无意外,libgcc_s.so在redhat中已经存在,存放路径为:/usr/lib/gc ...

  7. spinnaker自动发布k8s部署应用<一>

    一.准备环境 !docker-ce---17.06.2-ce !k8s集群----1.11.1 !helm部署工具---helm-v2.10.0 !spinnaker-charts---spinnak ...

  8. redis-小用

    1.redis之flushall.flushdb‘尴尬’操作恢复 redis是基于内存的一种高效数据库,在内存中高效但是不安全,重启和断电都会导致数据丢失.所以就需要用到数据的持久化,redis有两种 ...

  9. Python web 框架之 Django 基础搭建服务

    1. 需要安装 Python 和 Django 环境,Python 环境的安装我就不在多说了 2. 安装框架 Django Django 安装,推荐先装个 pip吧,easyinstall也可以,然后 ...

  10. Spring Boot项目属性配置

    接着上面的入门教程,我们来学习下Spring Boot的项目属性配置. 1.配置项目内置属性 属性配置主要是在application.properties文件里配置的(编写时有自动提示)这里我们将se ...