当前位置:网站首页>SSM整合开发案例
SSM整合开发案例
2022-08-09 07:24:00 【哈希疯】
SSM整合开发
SSM :
SpringMVC
+Spring
+MyBatis
SpringMVC
:视图层,界面层, 负责接收请求,显示处理结果的。Spring
:业务层,管理Service
,Dao
,工具类对象的。MyBatis
:持久层,访问数据库的用户发起请求 ——
SpringMVC
接收 ——Spring
中的Service
对象处理业务 ——MyBatis
处理数据SSM整合也叫做SSI(
IBatis
也就是MyBatis
的前身),整合中有容器。
第一个容器
SpringMVC
容器, 管理Controller
控制器对象的。第二个容器
Spring
容器,管理Service
,Dao
,工具类对象的
我们要做的:把使用的对象交给合适的容器创建,管理。 把Controller
还有web开发的相关对象交给SpringMVC
容器,这些web用的对象导在SpringMVC
配置文件中
Service
,Dao
对象定义在Spring
的配置文件中,让Spring
管理这些对象。
SpringMVC
容器和Spring
容器是有关系的,关系已经确定好了
SpringMVC
容器是Spring
容器的子容器,类似java中的继承。子可以访问父的内容
在子容器中的Controller
可以访问父容器中的Service
对象,就可以实现Controller
使用Service
对象
1. 实现步骤
使用
spring_db
的MySQL库,表使用t_student
CREATE DATABASE IF NOT EXISTS `spring_db` DEFAULT CHARSET utf8; USE `spring_db`; DROP TABLE IF EXISTS `t_student`; CREATE TABLE `t_student` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(80), `age` INT, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=10000; # 插入初始数据 INSERT into t_student(name,age) VALUES ("孙四",27),("李八",30),("赵五",24),("孙五",23),("王七",21),("赵六",29),("赵一",30),("王八",27),("吴一",27),("赵二",28),("周二",21),("周一",22),("郑六",22),("王七",22),("吴四",23),("李六",22),("郑五",22),("郑三",21),("赵六",24),("王五",24),("周八",23),("郑七",20),("郑一",30),("吴五",30),("孙一",20),("郑二",21),("王三",28),("赵一",20),("吴五",27),("王七",27);
新建
maven web
项目File
>>Project Structure
>>点击+
>>选择New Module
>>左侧选择Maven
,右侧选择maven-archetype webapp
>>点击Next
>>输入项目名ch07-ssm
,设置项目存放路径为..\SpringMVC\ch07-ssm
>>点开Artifact Coordinates
设置Groupld
为org.jason
>>点击Finish
>>选择Dependencies
选项卡>>在Module SDK
处选择好JDK的版本>>点击OK
加入依赖
配置
pom.xml
文件,加入SpringMVC
、Spring
、MyBatis
三个框架的依赖、Jackson
、MySQL
驱动、Druid
连接池、jsp
、servlet
依赖<dependencies> <!--单元测试依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--servlet依赖--> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!--jsp依赖--> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2.1-b03</version> <scope>provided</scope> </dependency> <!--Spring依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.5.RELEASE</version> </dependency> <!--Jackson依赖--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <!--Spring整合MyBatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.1</version> </dependency> <!--MyBatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.1</version> </dependency> <!--MySQL连接驱动依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <!--Druid连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> </dependencies>
加入资源文件扫描和编译插件
<build> <resources> <resource> <directory>src/main/java</directory><!--所在目录--> <includes><!--所在目录下的.properties与.xml文件都会扫描到--> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> <!--编译插件--> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
配置
web.xml
File
>>Project Structure
>>在左侧当前项目名栏目下选择Web
>>在右侧Deployment Descriptors
选项卡处点击-
>>点击Apply
>>在右侧Deployment Descriptors
选项卡处点击+
选择1 web.xml
>>选择4.0
版本后点击OK
>>点击Apply
,再点击OK
(1) 注册
DispatcherServlet
目的:1. 创建
SpringMVC
容器对象,才能创建Controller
类对象 2. 创建的是
Servlet
,才能接收用户的请求(2) 注册
Spring
的监听器:ContextLoaderListener
目的:创建
Spring
的容器对象,才能创建Service
,Dao
等对象。(3) 注册字符集过滤器,解决
post
请求乱码的问题<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--1.注册DispatcherServlet--> <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:conf/dispatcherServlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!--2.注册Spring的监听器:ContextLoaderListener--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:conf/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--3.注册字符集过滤器,解决post请求乱码的问题--> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <param-name>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
注:
- 在
src/main
目录下船舰java
、resources
、test
三个目录,并分别将三个目录设置为Sources Root
、Resources Root
、Test Sources Root
(目录上单击右键选择Mark Directory as
进行设置) - 在
resources
目录下创建conf
目录,并在conf
目录下创建dispatcherServlet.xml
、applicationContext.xml
两个Spring
配置文件(目录上单击右键->New
->XML Configuration File
->Spring Config
)
- 在
创建包
com.jason.controller
、com.jason.service
、com.jason.dao
、com.jason.bean
写
SpringMVC
、Spring
、MyBatis
的配置文件(1)
SpringMVC
配置文件<?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/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--SpringMVC配置文件,声明controller和其它web相关的对象--> <!-- 1.组件扫描 --> <context:component-scan base-package="com.jason.controller" /> <!-- 2.视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 3.注解驱动(http://www.springframework.org/schema/mvc) --> <mvc:annotation-driven /> <!-- (1) 响应Ajax请求,返回json (2) 解决静态资源访问问题 --> <!-- 4.配置静态资源 --> <mvc:resources mapping="/static/**" location="/static/" /> </beans>
(2)
Spring
配置文件<?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 https://www.springframework.org/schema/context/spring-context.xsd"> <!-- Spring配置文件:声明Service,Dao --> <!-- 1. 声明数据源,连接数据库 --> <context:property-placeholder location="classpath:conf/jdbc.properties" /> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- SqlSessionFactoryBean创建sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:conf/mybatis.xml" /> </bean> <!-- 2. 声明MyBatis的扫描器,创建dao对象 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> <property name="basePackage" value="com.jason.dao" /> </bean> <!-- 3. 声明Service的注解@Service所在的包名位置 --> <context:component-scan base-package="com.jason.service" /> <!-- 4. 事务配置:注解的配置,aspectj的配置 --> </beans>
(3)
MyBatis
主配置文件<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--settings:控制mybatis全局行为--> <!--设置mybatis输出日志--> <!--<settings> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings>--> <!-- 设置别名 --> <typeAliases> <!-- name:实体类所在的包名(不是实体类的包名也可以) --> <package name="com.jason.bean"/> </typeAliases> <!-- sql mapper(sql映射文件)的位置 --> <mappers> <!-- name:是包名,这个包中的所有mapper.xml一次都能加载 使用package的要求: 1. mapper文件名称和dao接口名必须完全一样,包括大小写 2. mapper文件和dao接口必须在同一目录 --> <package name="com.jason.dao"/> </mappers> </configuration>
若IDEA中的
New
没有MyBatis Config
配置文件的创建项,可自定义配置文件模板,方法如下:File
>>Settings
>>Editor
>>FIle and Code Templates
>>+
>>在左侧Name
输入框中输入MyBatis Config
,Extension
输入框中输入xml
,下面文本框粘贴以下内容:<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--settings:控制mybatis全局行为--> <settings> <!--设置mybatis输出日志--> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings> <!--设置别名--> <typeAliases> <!--name:实体类所在的包名 --> <package name="实体类的包名"/> </typeAliases> <!-- sql mapper(sql映射文件)的位置--> <mappers> <!-- name:是包名,这个包中的所有mapper.xml一次都能加载 --> <package name="mapper文件所在的包名"/> </mappers> </configuration>
添加
MyBatis Mapper
配置文件模板方法同上(4) 数据库的属性配置文件
在
conf
目录下创建jdbc.properties
数据库连接配置文件jdbc.url=jdbc:mysql://localhost:3306/spring_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC jdbc.driverClass=com.mysql.jdbc.Driver jdbc.username=root jdbc.password=root
写代码,
dao
接口和mapper
文件、service
和实现类、controller
和实体类(1)创建持久层处理数据
创建接口
StudentDao
和对应的mapper
文件StudentDao.xml
package com.jason.dao; public interface StudentDao { Integer recordSize(); Integer delStudent(Integer id); Integer alterStudent(Student stu); Integer insertStudent(Student student); Student findOneOfStudent(Integer id); List<Student> selectStudent(MessageModel page); }
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.jason.dao.StudentDao"> <!-- 查询学生人数 --> <select id="recordSize" resultType="Integer"> SELECT COUNT(*) FROM t_student </select> <!-- 分页查询所有学生 --> <select id="selectStudent" resultType="Student"> SELECT id,name,age FROM t_student ORDER BY id DESC LIMIT #{start},#{size} </select> <!-- 注册学生 --> <insert id="insertStudent" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> INSERT INTO t_student(name,age) VALUES (#{name}, #{age}) </insert> <!-- 查找单个学生 --> <select id="findOneOfStudent" resultType="Student"> SELECT id,name,age FROM t_student WHERE id = #{id} </select> <!-- 删除学生 --> <delete id="delStudent"> DELETE FROM t_student WHERE id = #{id} </delete> <!-- 修改学生 --> <update id="alterStudent"> UPDATE t_student SET name = #{name}, age = #{age} WHERE id = #{id} </update> </mapper>
(2)创建业务层接口处理业务逻辑
创建
StudentService
和StudentServiceImpl
package com.jason.service; public interface StudentService { Integer dataSize(); Integer delStudent(Integer id); Integer addStudent(Student student); Student findOneOfStudent(Integer id); Integer alterStudent(Student student); List<Student> findStudent(MessageModel page); }
package com.jason.service.impl; @Service public class StudentServiceImpl implements StudentService { @Autowired private StudentDao studentDao; @Override public Integer addStudent(Student student) { try { return studentDao.insertStudent(student) > 0 ? 1 : null; }catch (Exception e) { return null; } } @Override public Integer dataSize() { try { Integer num = studentDao.recordSize(); return num > 0 ? num : null; }catch (Exception e) { return null; } } @Override public List<Student> findStudent(MessageModel page) { try { return studentDao.selectStudent(page); }catch (Exception e) { return null; } } @Override public Integer delStudent(Integer id) { try { return studentDao.delStudent(id) > 0 ? 1 : null; }catch (Exception e) { return null; } } @Override public Student findOneOfStudent(Integer id) { try { return studentDao.findOneOfStudent(id); }catch (Exception e) { return null; } } @Override public Integer alterStudent(Student student) { try { return studentDao.alterStudent(student) > 0 ? 1 : null; }catch (Exception e) { return null; } } }
(3)创建视图层的处理器
创建
StudentController
处理器package com.jason.controller; @Controller @RequestMapping("/student") // 学生模块 public class StudentController { @Autowired private StudentService service; // 注册 @ResponseBody @RequestMapping("/addStudent") public Integer addStudent(Student student) { return service.addStudent(student) != null ? student.getId() : null; } // 浏览 @ResponseBody @RequestMapping("/queryStudent") public MessageModel queryStudent(MessageModel msg) { if (msg == null || msg.getStart() == null || msg.getSize() == null) { msg = new MessageModel(); } // 获取记录条数 msg.setLength(service.dataSize()); // 将结果集保存到消息模型 msg.setObject(service.findStudent(msg)); return msg; } // 删除 @ResponseBody @RequestMapping("/deleteStudent") public Integer deleteStudent(Integer id) { return service.delStudent(id); } // 修改 @ResponseBody @RequestMapping("/updateStudent") public Integer updateStudent(Student student) { return service.alterStudent(student); } }
写
jsp
页面(1)
src/main/webapp/index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <% String basePath = request. getScheme() + "://" + request.getServerName() + ":" + request. getServerPort() + request.getContextPath() + "/" ; %> <html> <head> <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="static/css/jquery-confirm.css"> <style type="text/css"> #message>div:nth-child(2) { position: fixed; z-index: 999; left: 50%; top: 20%; transform: translate(-50%,-20%); } </style> <base href="<%=basePath%>"> <title>SSM整合框架</title> </head> <body> <ul id="myTab" class="nav nav-tabs"> <li class="active"><a href="#home" data-toggle="tab">主页</a></li> <li><a href="#list" data-toggle="tab" οnclick="addStudent()">注册学生</a></li> <li><a href="#list" data-toggle="tab" οnclick="studentList(0)">学生列表</a></li> </ul> <div id="TabContent" class="tab-content"> <%-- 主页 --%> <div class="tab-pane fade in active" id="home"> <img src="static/images/ssm.jpg" alt="SMM整合框架"> <h4>流程图</h4> <img src="static/images/lct.jpg" alt="SMM框架流程图"> </div> <%-- 学生列表 --%> <div class="tab-pane fade col-md-12" id="list"> <br/> <div class="m-5"> <table class="table table-condensed table-hover"> <thead><th width="10%">序号</th><th>学号</th><th>姓名</th><th>年龄</th><th width="20%">操作</th></thead> <tbody id="info"></tbody> </table> </div> <div class="text-center"> <ul id="page-content" class="pagination"></ul> </div> </div> </div> <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="static/js/jquery-confirm.js"></script> <%-- 业务逻辑 --%> <script type="text/javascript" src="static/js/studentAdmin.js"></script> </body> </html>
(2)
src/main/webapp/static/js/studentAdmin.js
let now_page,total_page,start; // 表单数据 function formContent(id,name,age) { return '' + '<hr>' + '<form>' + '<input type="hidden" id="id" value="' + id + '">' + '<div class="form-group text-nowrap">' + '<label for="name">姓名  </label>' + '<input style="display: inline-block; width: 80%" type="text" class="form-control" id="name" placeholder="请输入姓名" autocomplete="off" value="' + name + '">' + '</div>' + '<div class="form-group">' + '<label for="age">年龄  </label>' + '<input style="display: inline-block; width: 80%" type="text" class="form-control" id="age" placeholder="请输入年龄" autocomplete="off" value="' + age + '">' + '</div>' + '</form>'; } // 列表单行数据 function tableTrData(num,id,name,age) { return '' + '<tr>' + '<td>' + num + '</td>' + '<td>' + id + '</td>' + '<td>' + name + '</td>' + '<td>' + age + '</td>' + '<td>' + '<button οnclick="delStudent(this)" class="btn btn-danger" title="删除">' + '<span class="glyphicon glyphicon-trash"></span>' + '</button>  ' + '<button οnclick="alterStudent(this)" class="btn btn-info" title="修改">' + '<span class="glyphicon glyphicon-pencil"></span>' + '</button>' + '</td>' + '</tr>'; } // 提示框 function messageBox(mode,content) { let msgBox,data = [ ['red' ,'错误','remove'], ['blue' ,'信息','info'], ['green' ,'成功','ok'], ['orange','警告','warning'], ['purple','提示','exclamation'], ['dark' ,'帮助','question']]; data.forEach((list,i) => { if (mode === i || mode === list[0]) { msgBox = $.dialog({ icon : 'glyphicon glyphicon-' + list[2] + '-sign', type : list[0], title : list[1], content : content }); } }); setTimeout(function(){ msgBox.close();},800); } // 选择列表当前行指定列 function selectTdVal(obj,n) { return $(obj).parent().parent().children("td:nth-child("+n+")"); } // 注册学生 function addStudent() { $.confirm({ icon : 'glyphicon glyphicon-user', type : 'blue', title: "注册学生", content: formContent('','',''), buttons: { cancel: { text: "取消", keys: ['esc'], btnClass: 'btn-primary', action: function () { } }, formSubmit: { text: '提交', btnClass: 'btn-blue', keys: ['enter'], action: function () { let name = this.$content.find('#name').val(); let age = this.$content.find('#age').val(); if (!name) { messageBox(0, "姓名不能为空!"); return false; } else if (name.length > 25) { messageBox(0, "姓名不能超过25个字符!"); return false; } $.ajax({ url: "student/addStudent", type: "post", data: { name: name, age: age}, dataType: "json", success: function (id) { $("#info").html("").append(tableTrData(1,id,name,age)); messageBox(2, "注册成功!"); }, error: function () { messageBox(0, "注册失败!"); } }); } } } }); } // 学生列表 function studentList(n) { $.ajax({ url: "student/queryStudent", type: "get", data: { start: (n - 1 < 0 ? 0 : n - 1) * 10, size: 10 }, dataType: "json", success: function (data) { start = data.start; now_page = (data.start + data.size) / data.size; total_page = Math.floor(data.length / data.size); $("#info").html(""); $.each(data.object,function (i,n) { let num = i + 1 + (now_page-1) * 10; $("#info").append(tableTrData(num,n.id,n.name,n.age)); }); pageControl(); } }) } // 页码显示控制 function pageControl() { let start,end; if (now_page <= 3) { start = now_page === 0 ? 0 : 1; end = total_page < 5 ? total_page : 5; } else { start = ((now_page + 2) > total_page ? total_page - 2 : now_page)-2; end = (now_page + 2) > total_page ? total_page : (now_page + 2); } let last = now_page - 1 < 1 ? 1 : now_page - 1; let next = now_page + 1 > total_page ? total_page : now_page + 1; // 页面项单条数据 function pageContent(page,val) { return '' + '<li>' + '<a href="javascript:studentList(' + page + ');">' + val + '</a>' + '</li>'; } // 添加首页和上一页按钮 $("#page-content").html("").append(pageContent(1,'首页')).append(pageContent(last,'«')); // 添加页码按钮 for (let i = start; i <= end; i++) { $("#page-content").append(pageContent(i,i)); if (now_page === i) { $("#page-content>li:last").addClass("active"); } } // 添加下一页和尾页按钮 $("#page-content").append(pageContent(next,'»')).append(pageContent(total_page,'尾页')); $("#page-content").attr("title","共" + total_page + "页"); // 样式控制 if(now_page === 1) { $("#page-content>li:nth-child(-n+2)").addClass("disabled").children('a').removeAttr('href'); } else if(now_page === total_page) { $("#page-content>li:nth-last-child(-n+2)").addClass("disabled").children('a').removeAttr('href'); }else if(now_page === 0) { $("#page-content>li:nth-child(n)").addClass("disabled").children('a').removeAttr('href'); } } // 删除学生 function delStudent(obj) { let content = '确定要删除【<span style="color:red;font-weight:bold;">' + selectTdVal(obj,3).html() + '</span>】的记录?'; $.confirm({ icon : 'glyphicon glyphicon-warning-sign', type : 'orange', title : '提示', autoClose: 'close|2000', content : content, buttons : { close : { text: "取消", keys: ['esc'], btnClass: 'btn-primary', action: function () { } }, ok : { text: '确认', keys: ['enter'], btnClass: 'btn-blue', action: function () { $.ajax({ url : "student/deleteStudent", type : "post", data : { id : selectTdVal(obj,2).html() }, dataType : "json", success : function () { $(obj).parent().parent().remove(); messageBox(2, "删除成功!"); }, error : function () { messageBox(0, "删除失败!");} }); } } } }); } // 修改学生 function alterStudent(obj) { let id = selectTdVal(obj,2).html(); let name = selectTdVal(obj,3).html(); let age = selectTdVal(obj,4).html(); $.confirm({ icon : 'glyphicon glyphicon-user', type : 'blue', title : '修改信息', content: formContent(id,name,age), buttons: { cancel: { text: "取消", keys: ['esc'], btnClass: 'btn-primary', action:function () { } }, formSubmit: { text: '提交', keys: ['enter'], btnClass: 'btn-blue', action: function () { let name2 = this.$content.find('#name').val(); let age2 = this.$content.find('#age').val(); if(!name2){ messageBox(0,"姓名不能为空!"); return false; } else if(name2.length > 25){ messageBox(0,"姓名不能超过25个字符!"); return false; }else if(name === name2 && age === age2) { messageBox(0,"未修改任何数据!"); return false; } $.ajax({ url : "student/updateStudent", type : "post", data : { id:id,name:name2,age:age2}, dataType : "json", success : function () { selectTdVal(obj,3).html(name2); selectTdVal(obj,4).html(age2); messageBox(2, "修改成功!"); }, error : function () { messageBox(0, "修改失败!"); } }); } } } }); }
(3)复制图片src/main/webapp/static/images/ssm.jpg
、src/main/webapp/static/images/lct.jpg
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AxLFAaDO-1622986833036)(README.assets/image-20210605033819381.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gHUCv2Os-1622986833041)(README.assets/image-20210605033803776.png)]
(3)复制图片src/main/webapp/static/images/ssm.jpg
、src/main/webapp/static/images/lct.jpg
测试结果
主页
注册
学生列表
修改操作
边栏推荐
猜你喜欢
随机推荐
入门cv必读的10篇baseline论文
Learning Notes---Machine Learning
tianqf's problem-solving ideas
SAP ALV data export many of the bugs
【Docker】Docker安装MySQL
【nuxt】服务器部署步骤
Variable used in lambda expression should be final or effectively final报错解决方案
分布式理论
数据库索引原理
【Reprint】Deep Learning (deep learning) study notes arrangement
Tkinter可以选择的颜色
eyb:Redis学习(2)
数据一致性架构
TCP段重组PDU
生成对抗网络GAN:Generative Adversarial Networks
【ROS2原理8】节点到参与者的重映射
unity第一课
HDU - 3183 A Magic Lamp Segment Tree
leetcode:55. 跳跃游戏
P1505 [National Training Team] Tourism Tree Chain Breakdown