ssm整合(一)
进度:项目搭建—》分页查询
1.新建web项目
2.导入jar包
3.navicat导入sql文件
4.web.xml
<?xml version="1.0" encoding="UTF-8"?>
contextConfigLocation
classpath:applicationContext-*.xml
org.springframework.web.context.ContextLoaderListener
encodingFiltert
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
encodingFiltert
/*
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
dispatcherServlet
/
5.springmvc.xml
6.applicationContext-mapper.xml
<?xml version="1.0" encoding="UTF-8"?>
7.applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?>
8.使用工具生成entity类和mapper接口、xml
9.编写异常处理类(发json格式的异常过去)
9.1编写枚举类 EnumStatus.class
package stu.adam.ssm.controller;
public enum EnumStatus {
//这里的格式取决于属性如何定义
SUCCESS(2000,"成功"),
ERROR(50000,"失败"),
USERNAME_ERROR(4001,"用户名错误"),
PASSWORD_ERROR(4002,"密码错误"),
NO_LOGIN(5001,"未登录");
private int status;
private String message;
EnumStatus(int status, String message) {
this.status = status;
this.message = message;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
9.2 对返回结果进行封装
AjaxResult.class
package stu.adam.ssm.controller; import org.aspectj.weaver.loadtime.Aj; import java.util.HashMap; /** * @program: ssm-conformity * @description:ajax类型封装 * @author: adam * @create: 2021-12-21 20:24 **/ public class AjaxResult extends HashMap{ //1.map的key private static final String STATUS ="status"; private static final String MESSAGE="message"; private static final String DATA="data"; private static final String TOTAL="total"; //构造器私有话,放key private AjaxResult(EnumStatus enumStatus) { this.put(STATUS,enumStatus.getStatus()); this.put(MESSAGE,enumStatus.getMessage()); } //1.成功的默认状态码和信息 public static AjaxResult success(){ return new AjaxResult(EnumStatus.SUCCESS); } //2.返回自定义状态码 public static AjaxResult success(EnumStatus enumStatus){ return new AjaxResult(enumStatus); } //3.成功后返回数据 public static AjaxResult success(Object data){ //调用success AjaxResult success=success(); //加key和value success.put(DATA,data); return success; } //4.返回成功后,翻页查询携带数据和总记录数 public static AjaxResult success(Object data,long total){ AjaxResult success=success(); success.put(DATA,data); success.put(TOTAL,total); return success; } //5.失败后 返回默认状态码和信息 public static AjaxResult error(){ return new AjaxResult(EnumStatus.ERROR); } //6.失败后 返回默认状态码和信息 public static AjaxResult error(EnumStatus enumStatus){ return new AjaxResult(enumStatus); } }
10.使用pagehelper插件完成分页操作(后台信息)
10.1导包
10.2 pagehelper在applicationcontext-mapper的sqlsessionfactorybean中加入
class="org.mybatis.spring.SqlSessionFactoryBean">
"dataSource" ref="dataSource">
"plugins">
class="com.github.pagehelper.PageInterceptor">
10.3分页接口及服务编写
AdminService
package com.javasm.ssm.service; import com.javasm.ssm.entity.Admin; import java.util.List; /** * @Author:liulei * @Version:1.0 * @Date:2021/12/21-15:40 * @Since:jdk1.8 * @Description: */ public interface AdminService { ListfindByPage(); }
AdminServiceImpl
package stu.adam.ssm.service.serviceimpl; import org.springframework.beans.factory.annotation.Autowired; import stu.adam.ssm.entity.Admin; import stu.adam.ssm.mapper.AdminMapper; import stu.adam.ssm.service.AdminService; import java.util.List; /** * @program: ssm-conformity * @description: * @author: adam * @create: 2021-12-21 21:20 **/
//一开始忘记写了直接gg @service public class AdminServiceImpl implements AdminService { @Autowired private AdminMapper adminMapper; @Override public ListfindByPage() { return adminMapper.selectByExample(null); } }
10.4 分页controller编写
package stu.adam.ssm.controller; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import stu.adam.http.AjaxResult; import stu.adam.ssm.entity.Admin; import stu.adam.ssm.service.AdminService; import java.util.List; /** * @program: ssm-conformity * @description: * @author: adam * @create: 2021-12-21 21:17 **/ //相当于都返回json @RestController public class AdminController { @Autowired private AdminService adminService; @RequestMapping("findByPage") public AjaxResult findByPage(@RequestParam(defaultValue = "1")Integer currentPage,@RequestParam(defaultValue = "3")Integer pageSize){ PageHelper.startPage(currentPage,pageSize); ListadminList = adminService.findByPage(); PageInfo adminPageInfo=new PageInfo<>(adminList); long total=adminPageInfo.getTotal(); return AjaxResult.success(adminList,total); } }
效果:
11.前端页面编写以及前端数据显示
11.1放页面资源进去
附(前端页面)
DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<title>ssm综合练习title>
<meta content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0, shrink-to-fit=no'
name='viewport'/>
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700,200" rel="stylesheet"/>
<link rel="stylesheet" href="css/bootstrap.min.css">
<link rel="stylesheet" href="css/font-awesome.min.css">
<link href="css/now-ui-kit.css?v=1.1.0" rel="stylesheet"/>
<style>
.form-control {
height: 44px;
}
.footer {
padding: 0;
}
.logo-container {
margin-bottom: 20px !important;
}
style>
head>
<body class="login-page sidebar-collapse">
<div class="page-header" filter-color="orange">
<div class="page-header-image" style="background-image:url(images/intro-bg.jpg)">div>
<div class="container">
<div class="col-md-4 content-center">
<div class="card card-login card-plain">
<form class="form" id="form">
<div class="header header-primary text-center">
<div class="logo-container">
<img src="images/now-logo.png" alt="">
div>
div>
<span style="margin-bottom: 20px;color: red;font-weight: bold; font-size: 20px; display: none" id="tips">用户名或者密码错误span>
<div class="content">
<div class="input-group form-group-no-border input-lg">
<span class="input-group-addon">
<i class="fa fa-envelope">i>
span>
<input type="text" class="form-control" placeholder="请输入用户名" name="username">
div>
<div class="input-group form-group-no-border input-lg">
<span class="input-group-addon">
<i class="fa fa-lock">i>
span>
<input type="password" placeholder="请输入密码" class="form-control" name="password"/>
div>
div>
<div class="footer text-center">
<a href="javascript:void(0)" class="btn btn-primary btn-round btn-lg btn-block loginBtn">登录a>
div>
form>
div>
div>
div>
div>
<script src="js/jquery.min.js">script>
body>
html>
11.2改Js
html页面底下写入:
11.3admin.html的js文件编写
$(function () { //1.定义变量 var total; let currentPage=1; let pageSize=3; //2.定义方法 function findByPage() { $.get(`/findByPage?currentPage=`+currentPage+"&pageSize="+pageSize).then(response=>{ let str=``; if (response.status==2000) { response.data.forEach(item=>{ str+=``; }) $("tbody").html(str); } total=response.total; initPage(total); }) } function initPage(total){ $("#pagination").pagination(total, //分布总数量,必须参数 { callback: PageCallback, //PageCallback() 点击分页选项卡时调用,初始化分页插件时调用 prev_text: "? 上一页", next_text: "下一页 ?", items_per_page:pageSize, num_edge_entries: 2, //两侧首尾分页条目数 num_display_entries: 10, //连续分页主体部分分页条目数 current_page: currentPage-1, //当前页索引 load_first_page:false }); } ///////////////////////////////分页插件//////////////////////////// // function PageCallback(index,aa) { // console.log("index==="+index); // console.log("index==="+aa); // } function PageCallback(index) { console.log("index===="+index); currentPage = index+1; findByPage() } ////////////////////////////分页插件//////////////////////////// //3.调用方法 findByPage(); }) # `+item.userId+` `+item.username+` `+item.phone+` `+item.description+` `+item.avater+`
效果:
==== 整合(第一天) 完