SSM入门小项目----学生信息管理系统

SSM入门小项目----学生信息管理系统

学习了SSM后,自己想动手写个小项目,巩固一下。选择了比较简单的学生信息管理系统,项目比较简单,包括的功能有:登录、学生信息的增删改查、分页(前端实现)

本项目前后端分离,由于本人较菜,所以前端是直接拿别人写好的来修改使用的(已征得原作者同意),前端原文链接:https://blog.csdn.net/qq_43198568/article/details/104432485

完整代码在GitHub上:https://github.com/Fjz-Kuroko/StudentManagePro


效果图

登录页面

在这里插入图片描述

登录后进入的页面(主页)

在这里插入图片描述

新增

在这里插入图片描述

更新

在这里插入图片描述
前端效果可以去前端原文看,基本差不多,这里不过多展示。

下面开始进入正文

搭建项目

IDE:IDEA,运行环境:Tomcat 8.5 + Windows10
本项目使用Maven + Spring + SpringMvc + MyBatis开发,如果有同学不懂怎么使用Maven搭建SSM框架的话,可以参考我上一篇博客:https://blog.csdn.net/weixin_44215175/article/details/108642595

目录结构

其中以Test开头的是为了测试使用,可以不用理会
在这里插入图片描述

具体代码

登录

  • 新建一个数据表Login,我的比较简单,只包含三个属性:username、email、password
  • 在entity包中新建Login实体类
package pers.kuroko.entity;

public class Login {
    
    

    private String username;
    private String email;
    private String password;

    public Login() {
    
    
    }

    public Login(String username, String email, String password) {
    
    
        this.username = username;
        this.email = email;
        this.password = password;
    }

    public String getUsername() {
    
    
        return username;
    }

    public void setUsername(String username) {
    
    
        this.username = username;
    }

    public String getEmail() {
    
    
        return email;
    }

    public void setEmail(String email) {
    
    
        this.email = email;
    }

    public String getPassword() {
    
    
        return password;
    }

    public void setPassword(String password) {
    
    
        this.password = password;
    }
}

  • 在mapper(dao)包中新建LoginMapper.java接口以及loginMapper.xml的配置文件

LoginMapper.java

public interface LoginMapper {
    
    
    public int doLogin(Login login);
}

loginMapper.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">
<!-- namespace:该mapper.xml映射文件的唯一标识 -->
<mapper namespace="pers.kuroko.mapper.LoginMapper">
    <select id="doLogin" parameterType="Login" resultType="int">
        select count(*) from login where username = #{username} and password = #{password}
    </select>
</mapper>
  • 在service包中新建LoginService.java接口,并且新建LoginServiceImpl.java实现类
public interface LoginService {
    
    
    int doLogin(Login login);
}
public class LoginServiceImpl implements LoginService {
    
    
    LoginMapper loginMapper;
    public void setLoginMapper(LoginMapper loginMapper) {
    
    
        this.loginMapper = loginMapper;
    }
    @Override
    public int doLogin(Login login) {
    
    
        return loginMapper.doLogin(login);
    }
}
  • 在controller包中新建LoginController类
//指定在浏览器的路径
@RequestMapping("loginController")
@Controller//注解,表明是Controller
public class LoginController {
    
    
    @Autowired
    @Qualifier("loginService")
    LoginService loginService;

    @RequestMapping(value = "homePage")
    public String homePage(Login login, Map<String, Object> map) {
    
    
        int i = loginService.doLogin(login);
        if (i > 0) {
    
    
            map.put("login", login);
            return "redirect:/studentController/getAllStudent";
        } else {
    
    
            return "error";
        }
    }
    @RequestMapping("login")
    public String login() {
    
    
        return "login";
    }
}
  • login.jsp
<body class="bgimg">
<div >
    <div class="login-box">
        <form action="loginController/homePage" method="post" name="f">
            <h2>学生管理系统-登录</h2>
            <div class="login-field">
                <img src="<%= basePath%>img/user.png"  />
                <input type="text" placeholder="请输入用户名" name="username" id="username" />
            </div>
            <div class="login-field">
                <img src="<%= basePath%>img/password.png" />
                <input type="password" placeholder="请输入密码" name="password" id="password"  />
            </div>
            <div class="login-sub">
                <button type="submit">登录</button>
            </div>
        </form>
    </div>
</div>
</body>

增加

  • 在entity包中新增Student实体类
package pers.kuroko.entity;

public class Student {
    
    

    private int id;
    private String name;
    private String sex;
    private int age;
    private String insitute;
    private String majo;
    private int grade;
    private int clazz;

    public Student() {
    
    
    }

    //此处省略有参构造和setter、getter
    @Override
    public String toString() {
    
    
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", insitute='" + insitute + '\'' +
                ", majo='" + majo + '\'' +
                ", grade=" + grade +
                ", clazz=" + clazz +
                '}';
    }
}
  • 在StuMapper接口中增加一个方法 int addStudent(Student student);
  • 在stuMapper.xml中新增SQL语句
    <insert id="addStudent" parameterType="Student"> insert into student(id,name,sex,age,insitute,majo,grade,clazz) values (#{id}, #{name}, #{sex}, #{age}, #{insitute}, #{majo}, #{grade}, ${clazz}) </insert>
  • 在service包中的StudentService接口和StudentServiceImpl实现类中都增加相应方法
int addStudent(Student student);
@Override
    public int addStudent(Student student) {
    
    
        return stuMapper.addStudent(student);
    }
  • 最后在StudentController中调用service中的方法,进行最后的逻辑处理即可
@ResponseBody
    @RequestMapping(value = "addStudent")
    public String addStudent(Student student) {
    
    
        //判断该学号的学生是否已经存在
        Student studentById = studentService.queryStudentById(student.getId());
        if (studentById != null) {
    
    
            return "isExist";
        }
        //加入数据库,看返回值决定是否成功
        int i = studentService.addStudent(student);
        if (i > 0) {
    
    
            return "success";
        } else {
    
    
            return "error";
        }
    }
  • 前端调用,使用ajax
//data是前端定义的类,包含所有从前端获取的信息,完整url应该是http://localhost:8081/StudentManagePro/studentController/addStudent
$.ajax({
    
    
        type : 'post',
        url : url,
        data : data,
        success : function (data) {
    
    
            if (data === "error") {
    
    
                alert("添加失败");
            } else if (data === "success") {
    
    
                sumbit();
                alert("添加成功");
            } else if (data === "isExist") {
    
    
                alert("学号重复,添加失败");
            }
        },
        error : function (data) {
    
    
            alert("异常情况!")
        }
    })

删除、修改、查询

本质上删除、修改、查询和增加的逻辑是一样的,这里就不一 一展开了,具体代码可以到GitHub去看,本项目GitHub链接

  • 在StuMapper.java中添加对应方法、在stuMapper.xml添加对应的SQL语句
  • 在StudentService和StudentServiceImpl中新增对应方法,调用StuMapper
  • 在StudentController中新增对应方法,调用StudentService

缺点、不足

  • 功能较少
  • 分页功能使用的是前端实现

优点

  • 逻辑简单,适合新手入门
  • 代码层次明了

写在后面

此项目比较适合新手学习SSM的时候用来巩固一些基本操作,代码并不难懂,逻辑比较简单,如果有什么建议或者不懂的地方,可以通过评论 or 邮箱联系我([email protected]

希望大家共同进步。

猜你喜欢

转载自blog.csdn.net/weixin_44215175/article/details/108643279