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
文章目录
效果图
登录页面
登录后进入的页面(主页)
新增
更新
前端效果可以去前端原文看,基本差不多,这里不过多展示。
下面开始进入正文
搭建项目
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 邮箱联系我(aaa@qq.com)
希望大家共同进步。