要一直做勤快的人,加油
使用eclipse+tomcat7+mysq+maven实现SSM框架下的增删查改功能,把自己的知识整理一下,方便以后查阅。
SSM框架在项目开发中经常使用到,相比于SSH框架,它在近几年的开发中运用的更加广泛。
1.Spring作为一个分层的轻量级开源框架,解决了项目中的耦合问题。
两个核心:IOC(控制反转)和AOP(面向切面编程)。
同时,在也是我们在项目中我们经常使用的。
2.SpringMVC是Spring实现的一个Web层,相当于Struts的框架,但是比Struts更加灵活和强大!
3.Mybatis是 一个动态SQL语句的持久层的框架,它对JDBC的操作数据库的过程进行封装,使开发者只需关注SQL本身。在使用上相比Hibernate更加灵活,可以控制sql的编写,使用 XML或注解进行相关的配置!
这里简单介绍一下,更多信息请上百度搜索。
1.使用Maven管理项目
使用Maven在Eclipse中创建一个webapp的项目 ,具体的创建过程不做演示,如有不会创建的创建项目创建maven项目
也可以使用Maven命令进行创建,在Dos窗口进入指定的目录,执行下面命令
mvn archetype:create -DgroupId=org.ssm.dufy -DartifactId=ssm-demo
-DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
使用命令要注意,系统安装了Maven,并配置好了环境变量!(这个方法我没用过,网上看的,扩展一下自己)
2.导入项目(命名创建),添加依赖
导入项目是IDE中,或者直接在IDE创建,一般默认有【src/main/java】,手动创建【src/test/resources】、【src/test/java】文件夹。
注意导入maven项目和导入javaWeb项目有点不太一样。
数据请求过程如下:
1.客户端通过ajax发送请求;
2.控制层controller接收请求;
3.获取mysql数据,转为Json格式并返回给客户端;
4.客户端接收数据后显示。
项目结构如下:
然后直接在pom.xml中配置包的依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wcx</groupId>
<artifactId>SSMR0308</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<!-- 版本管理 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jackson.version>2.5.0</jackson.version>
<spring.version>4.3.16.RELEASE</spring.version>
<aop.version>1.9.1</aop.version>
<mybatis.version>3.4.6</mybatis.version>
</properties>
<dependencies>
<!-- spring相关依赖包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- aop相关依赖包 -->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aop.version}</version>
</dependency>
<!-- <dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.1</version>
</dependency> -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aop.version}</version>
</dependency>
<!-- mybatis依赖包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mysql数据库驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
<scope>runtime</scope>
</dependency>
<!-- dbcp数据库连接池包 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- spring与mybatis整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- jsp标准标签库包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- jedis依赖包 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- mybatis 包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!--mybatis spring 插件 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>
<!-- mysql连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- 数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.12</version>
</dependency>
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>3.0-alpha-1</version>
<scope>provided</scope>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- json -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
</project>
在resources文件下创建相关文件
1.配置jdbc.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
2.配置ApplicationContent.xml文件
这个文件就是用来完成spring和mybatis的整合的。这里面也没多少行配置,主要的就是自动扫描,自动注入,配置数据库。
<?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-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 自动扫描 -->
<context:component-scan base-package="com.wcx.service" />
<!-- 引入配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 配置数据库连接池 -->
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="3" />
<property name="minIdle" value="3" />
<property name="maxActive" value="20" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="SELECT 'x'" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize"
value="20" />
<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
<property name="filters" value="stat" />
</bean>
<!-- 配置mybatis工厂 spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mybatis配置文件 日志 -->
<!-- <property name="configLocation" value="classpath:mybatis-config.xml"></property> -->
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>
<!-- 配置增强版的动态dao DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- <property name="sqlSessionFactory" ref="sqlSessionFactory" /> -->
<property name="basePackage" value="com.wcx.dao" />
</bean>
<!-- 配置事务管理 -->
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
3.配置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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 注解扫描器 -->
<context:component-scan base-package="com.wcx.controller"></context:component-scan>
<!-- 开启注解 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 静态资源处理 -->
<mvc:resources location="/html/" mapping="/html/**" />
<mvc:resources location="/js/" mapping="/js/**" />
<mvc:resources location="/images/" mapping="/images/**" />
<mvc:resources location="/css/" mapping="/css/**" />
<mvc:resources location="/resources/" mapping="/resources/**" />
<!-- 拦截器配置 -->
<mvc:interceptors>
<!-- 注册1个登录拦截器 -->
<mvc:interceptor>
<!-- 对哪些资源有拦截作用 如果不配置或,将拦截所有的controller -->
<mvc:mapping path="/**" />
<!-- 对哪些资源没有拦截作用 -->
<mvc:exclude-mapping path="/**/login.html" />
<mvc:exclude-mapping path="/**/reg.html" />
<!-- 哪个Bean是拦截器 -->
<bean class="com.wcx.Interceptor.UserInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
</beans>
4.配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>SSM_CRUD1130</display-name>
<!-- 默认主页 -->
<welcome-file-list>
<welcome-file>login.html</welcome-file>
</welcome-file-list>
<!-- Spring配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ApplicationContent.xml</param-value>
</context-param>
<!-- Spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!-- 添加对Spring MVC的支持 -->
<servlet>
<servlet-name>Springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:Springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
5.创建UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wcx.dao.UserDao">
<!-- 增删改没有返回值 -->
<!-- 登录 -->
<select id="login" parameterType="map" resultType="map">
select * from
user where name=#{name} and password=#{password}
</select>
<!-- 显示用户名到页面 -->
<select id="SelectName" parameterType="map" resultType="map">
</select>
<!-- 注册 和显示用户名到页面 -->
<select id="SelectByName" parameterType="map" resultType="map">
select
* from user where name=#{name}
</select>
<insert id="Reg" parameterType="map">
insert into
user(name,password,lock_flag,failure_num,login_time)
values(#{name},#{password},'0',0,'0000-00-00 00:00:00')
</insert>
<!-- 全查询 -->
<select id="SelectAll" parameterType="map" resultType="map">
select *
from books
</select>
<!-- 根据书名查询 -->
<select id="SelectByBNAME" parameterType="map" resultType="map">
select * from books where BNAME like "%"#{find_BNAME}"%"
</select>
<!-- 根据id删除 -->
<delete id="DeleteById" parameterType="String">
delete from books where
BON=#{BON}
</delete>
<!-- 根据id修改 -->
<update id="UpdateById" parameterType="map">
update books set
BNAME=#{BNAME},AUTHOR=#{AUTHOR},PRICE=#{PRICE},QUANITITY=#{QUANITITY}
where BON=#{BON}
</update>
<!-- 添加书籍信息 -->
<insert id="InsertData" parameterType="map">
insert into
books(BON,BNAME,AUTHOR,PRICE,QUANITITY)
values(#{BON},#{BNAME},#{AUTHOR},#{PRICE},#{QUANITITY})
</insert>
</mapper>
1.创建service接口
package com.wcx.service;
import java.util.List;
import java.util.Map;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author xiang
* @versioon 2019年11月30日 上午9:54:57 业务层接口模块
**/
public interface UserService {
// 登录 相当于根据账号和密码查询 用map传值
public Map login(Map map);
// 根据用户状态查询是否被锁定
public Map selectlock_flag(Map map);
// 先查询一下账号是否存在,不存在则注册 显示用户名到页面
public Map SelectByName(Map map);
// 注册
public int Reg(Map map);
// 全查询
public List<Map> SelectAll(Map map);
// 根据书名查询
public List<Map> SelectByBNAME(Map map);
// 根据id删除
public int DeleteById(String BON);
// 根据id修改
public int UpdateById(Map map);
// 添加书籍信息
public int InsertData(Map map);
}
2.创建service业务层实现类
package com.wcx.service.Imp;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.wcx.dao.UserDao;
import com.wcx.service.UserService;
/**
* @author xiang
* @versioon 2019年11月30日 上午9:55:48 业务层实现类模块
**/
@Service("userService")
public class UserServiceImp implements UserService {
@Autowired
UserDao userDao;
public UserServiceImp() {
System.out.println("UserServiceImp构造方法。。。");
}
// 登录的方法
@Override
public Map login(Map map) {
// TODO Auto-generated method stub
return userDao.login(map);
}
// 根据用户状态查询是否被锁定
@Override
public Map selectlock_flag(Map map) {
return userDao.selectlock_flag(map);
}
// 登录后修改状态为0
@Override
public int Updatelock_flag(Map map) {
return userDao.Updatelock_flag(map);
}
// 根据name修改锁定时间
@Override
public int Updatelock_time(Map map) {
return userDao.Updatelock_time(map);
}
// 获取数据库被锁定的时间
@Override
public Map selectlock_time(Map map) {
return userDao.selectlock_time(map);
}
// 解锁定后修改状态为0
@Override
public int Updatelock_flag1(Map map) {
return userDao.Updatelock_flag1(map);
}
// 解锁定后修改时间为0
@Override
public int Updatelock_time1(Map map) {
return userDao.Updatelock_time1(map);
}
// 注册前的查询方法 显示用户名到页面
@Override
public Map SelectByName(Map map) {
return userDao.SelectByName(map);
}
// 注册的方法
@Override
public int Reg(Map map) {
return userDao.Reg(map);
}
// 全查询
@Override
public List<Map> SelectAll(Map map) {
return userDao.SelectAll(map);
}
**********此处省略重复步骤**********
3.创建controller控制器
package com.wcx.controller;
import java.io.ByteArrayOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.http.ResponseEntity;
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.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.wcx.Utils.excel.AppFileUtils;
import com.wcx.Utils.excel.ExportListExcelUtils;
import com.wcx.Utils.excel.ExprotUtils;
import com.wcx.bean.GetBean;
import com.wcx.dao.RedisDao;
import com.wcx.service.UserService;
import net.sf.json.JSONArray;
/**
* @author xiang
* @versioon 2019年11月30日 上午10:00:46 @Scope("prototype") 访问若在一人以上需设置成多列
* @RequestMapping return返回值是默认解析为跳转路径
* @ResponseBody 将java对象转为json格式的数据。若没有这个转化的话,在前台得到的是Object对象
* 在@RequestMapping下添加@ResponseBody注解后不会解析成跳转地址,会解析成相应的json格式的对象、集合字符串或xml等直接返回给前台
* 可通过ajax的success:function(data){} data直接获取
* @RequestParam 常用来处理简单类型的绑定 value 前端传过来的参数名 必传参数
**/
@Controller("userController")
@Scope("prototype") // 若是有多人访问这个接口则需要使用,若只有一人则无需使用
@RequestMapping("xiang") // 加这个相当于又加了一层路径 /xiang/login
public class UserController {
@Autowired
UserService userservice;
// 定义一个变量用来记录登录的次数
private static int failure_num = 0;
// 定义一个map接收传入session中的数据
public static Map<Object, String> map2 = new HashMap<Object, String>();
// 获取redis
RedisDao redisDao = (RedisDao) GetBean.getApplicationContext().getBean("RedisDao");
public UserController() {
System.out.println("UserController层构造方法。。。");
}
// 显示用户名到页面
@RequestMapping(value = "/showname", method = RequestMethod.POST, produces = {
"application/json;charset=UTF-8" })
@ResponseBody
public String showname(HttpServletRequest request) {
String name = (String) request.getSession().getAttribute("Name");
return name;
}
// 注册
@RequestMapping(value = "/reg", method = RequestMethod.POST)
@ResponseBody
public String reg(@RequestParam Map map) {
// 调用service层的注册前的查询方法
Map selectByName = userservice.SelectByName(map);
// 判断
if (selectByName != null) {
return "reged";
} else {
// 调用service层注册的方法
int reg = userservice.Reg(map);
if (reg != 0) {
return "success";
} else {
return "false";
}
}
}
/*
* 如果需要传中文到前端, 必须在 RequestMapping 中配置produces属性,里面的值得看项目的前端需要的数据的类型。视情况而定。
*/
// 全查询 数据回显到首页
@RequestMapping(value = "/selectAll", method = { RequestMethod.POST, RequestMethod.GET }, produces = {
"application/json;charset=UTF-8" })
@ResponseBody
public List<Map> selectAll(@RequestParam Map map) {
// 调用service层的全查询方法
List<Map> list = userservice.SelectAll(map);
// 把获取到的数据转换成json类型
JSONArray json = JSONArray.fromObject(list);
String data = json.toString();// 将json对象转化为字符串
return list;
}
// 根据书名查询 数据回显到首页
@RequestMapping(value = "/selectByBNAME", method = { RequestMethod.POST,
RequestMethod.GET }, produces = "text/html;charset=UTF-8")
@ResponseBody
public String selectByBNAME(@RequestParam Map map) {
// 调用service层根据书名查询的方法
List<Map> list = userservice.SelectByBNAME(map);
// 把获取到的数据转换成json类型
JSONArray json = JSONArray.fromObject(list);
// 将json对象转化为字符串
String data = json.toString();
return data;// 把获取的数据返回到页面中,不是用来做判断的依据,是数据
}
}
// 根据id删除
@RequestMapping(value = "/delete", method = { RequestMethod.POST, RequestMethod.GET })
@ResponseBody
public String deleteById(@RequestParam String BON) {
// 调用service层根据id删除的方法
int deleteById = userservice.DeleteById(BON);
// 判断
if (deleteById != 0) {
return "success";
} else {
return "false";
}
}
// 根据id修改
@RequestMapping(value = "/update", method = { RequestMethod.POST, RequestMethod.GET }, produces = {
"application/json;charset=UTF-8" })
@ResponseBody // 将返回的对象自动转为json格式的数据
public String updateById(@RequestParam Map map) {
// 调用service层根据id修改的方法
int updateById = userservice.UpdateById(map);
// 判断
if (updateById != 0) {
return "success";
} else {
return "false";
}
}
// 添加书籍信息
@RequestMapping(value = "/insertData", method = { RequestMethod.POST, RequestMethod.GET })
@ResponseBody
public String insertData(@RequestParam Map<String, String> map) {
int addData = userservice.InsertData(map);
if (addData != 0) {
return "success";
} else {
return "false";
}
}
1.创建index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript" src="../js/jquery-3.4.1.js"></script>
<title>首页</title>
</head>
<body>
<div class="bigbox">
<form id="table1">
<div>
<h1>
天天图书管理<span></span>
</h1>
</div>
根据书名查询:<input type="text" name="find_BNAME" id="find_BNAME"
placeholder="请输入要查询的书名" />
<button type="button" id="findByBNAME">查询</button>
<a href="addData.html"><button type="button" id="insertbook">添加</button></a>
<button onclick="distroy()">注销</button>
<button type="button" id="exportData">导出</button>
<table id="dataALL" class="data" width="700" cellspacing="0"
cellpadding="0">
<tr>
<th>书籍编号</th>
<th>书籍名字</th>
<th>书籍作者</th>
<th>书籍价格</th>
<th>书籍销量</th>
<th>书籍操作</th>
</tr>
</table>
<div>
<a id="btn0"></a> <input id="pageSize" type="text" size="1"
maxlength="2" /><a> 条 </a> <a id="sjzl"></a> <a href="#" id="btn1">首页</a>
<a href="#" id="btn2">上一页</a> <a href="#" id="btn3">下一页</a> <a
href="#" id="btn4">尾页</a> <a>转到 </a> <input id="changePage"
type="text" size="1" maxlength="4" /> <a>页 </a> <a href="#"
id="btn5">跳转</a>
</div>
</form>
</div>
</body>
</html>
2.js部分
$(document).ready(function() {
$.ajax({
url: "../xiang/selectAll",
async: false, //同步
type: "post",
data:$("#table1").serialize(),
dataType: "json",
success: function(data) {
//alert(data);
if(data==="false"){
alert("获取数据失败");
}else {
/*字符串转json eval函数就是实现list、dict、tuple与str之间的转化*/
for (var i = 0; i < data.length; i++) {//第一层循环获取到各个list
var trHTML=""
+data[i].BON+" "
+data[i].BNAME+" "
+data[i].AUTHOR+" "
+data[i].PRICE+" "
+data[i].QUANITITY+" ";
document.getElementById("dataALL").innerHTML+=trHTML;
}
}
});
});
/*根据id删除*/
function delete1(BON){
alert("确定要删除?");
$.ajax({
async: false, //同步
url: "../xiang/delete?BON="+BON,
type: "post",
dataType: "text",
success:function(data){
var id=BON;
if(data.name==="删除失败"){
layer.msg('成功删除', {icon: 1,shade: [0.5,'#333333'],shadeClose:true},function(index){
location.href='index.html';
layer.close(index);
});
//location.href="index.html";
}else {
location.href="index.html";
}
}
});
}
至此SSM框架下的CRUD结束,部署项目到tomcat上运行访问。
服务启动成功后输入地址http://localhost:8088/项目名/页面路径 进行测试,页面将展示数据库中查询的信息。