欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 22:33:05
...

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

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

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

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


效果图

登录页面

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

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

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

新增

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

更新

SSM入门小项目----学生信息管理系统
前端效果可以去前端原文看,基本差不多,这里不过多展示。

下面开始进入正文

搭建项目

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

目录结构

其中以Test开头的是为了测试使用,可以不用理会
SSM入门小项目----学生信息管理系统

具体代码

登录

  • 新建一个数据表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 邮箱联系我(aaa@qq.com)

希望大家共同进步。