SSM實(shí)現(xiàn)學(xué)生管理系統(tǒng)(spring+springMVC+MyBatis)
一、項(xiàng)目介紹
該項(xiàng)目是基于SSM框架實(shí)現(xiàn)的學(xué)生管理系統(tǒng),能夠?qū)W(xué)生信息進(jìn)行增刪改查,分頁(yè)查詢,以及實(shí)現(xiàn)管理員的注冊(cè)、登錄
數(shù)據(jù)庫(kù):MySQL
開(kāi)發(fā)工具:idea
開(kāi)發(fā)環(huán)境:jdk 1.8 + tomcat
二、項(xiàng)目結(jié)構(gòu)
三、創(chuàng)建數(shù)據(jù)庫(kù)(studentManager)
在studentManger數(shù)據(jù)庫(kù)中,創(chuàng)建登錄注冊(cè)表login和學(xué)生信息表student
請(qǐng)參考JavaWeb實(shí)現(xiàn)學(xué)生管理系統(tǒng)
四、相關(guān)配置文件
1.配置maven環(huán)境,在pom.xml配置文件中導(dǎo)入對(duì)應(yīng)的依賴包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.11.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.11.RELEASE</version>
</dependency>
2.配置數(shù)據(jù)庫(kù)連接池datasource,SqlSessionFactory、mapperScanner、事務(wù)對(duì)象(spring-context.xml)
<?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:tx="http://www.springframework.org/schema/tx" 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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.stu"></context:component-scan>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/studentManager?userSSL=false&serverTimezone=Asia/Shanghai"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
<property name="maxPoolSize" value="10"></property>
<property name="initialPoolSize" value="5"></property>
<property name="minPoolSize" value="5"></property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 設(shè)置別名包 -->
<property name="typeAliasesPackage" value="com.stu.pojo"></property>
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!-- mapper掃描器 -->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.stu.dao"></property>
</bean>
<!-- 配置事務(wù)管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置基于注解的聲明式事務(wù) -->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
</beans>
3.配置springmvc.xml
<?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 http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
<!-- 配置創(chuàng)建 spring 容器要掃描的包 -->
<context:component-scan base-package="com.stu.controller"></context:component-scan>
<!--Spring MVC用來(lái)提供Controller請(qǐng)求轉(zhuǎn)發(fā),json自動(dòng)轉(zhuǎn)換等功能。,默認(rèn)會(huì)幫我們注冊(cè)默認(rèn)處理請(qǐng)求,參數(shù)和返回值的類。會(huì)自動(dòng)注冊(cè)RequestMappingHandlerMapping與RequestMappingHandlerAdapter兩個(gè)Bean,這是Spring MVC為@Controller分發(fā)請(qǐng)求所必需的,并且提供了數(shù)據(jù)綁定支持,@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持讀寫(xiě)XML的支持(JAXB)和讀寫(xiě)JSON的支持(默認(rèn)Jackson)等功能-->
<mvc:annotation-driven/>
<!-- 配置視圖解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
4.配置mybatis-congfig.xml
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 日志 -->
<setting name="logImpl" value="LOG4J"/>
<!-- 下劃線自動(dòng)轉(zhuǎn)成駝峰式 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
5.配置web.xml,讀取bean.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-context.xml</param-value>
</context-param>
<!-- 讀取Spring上下文的監(jiān)聽(tīng)器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置spring mvc的核心控制器 -->
<servlet>
<servlet-name>SpringMVCDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置初始化參數(shù),用于讀取SpringMVC的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 配置servlet的對(duì)象創(chuàng)建的時(shí)間點(diǎn):應(yīng)用加載時(shí)創(chuàng)建。
如果該元素的值為負(fù)數(shù)或者沒(méi)有設(shè)置,則容器會(huì)當(dāng)servlet被請(qǐng)求的時(shí)候加載。
如果值為正整數(shù)時(shí)或者0時(shí),表示容器在應(yīng)用啟動(dòng)時(shí)就加載并初始化這個(gè)servlet,值越小,servlet的優(yōu)先級(jí)越高,越先被加載-->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 所有的請(qǐng)求都會(huì)執(zhí)行對(duì)應(yīng)的這個(gè)方法 -->
<servlet-mapping>
<servlet-name>SpringMVCDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
五、代碼實(shí)現(xiàn)
1.JSP界面實(shí)現(xiàn)
登錄界面(login.jsp)
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<title>學(xué)生信息管理平臺(tái)</title>
<style>
.titleDiv{
height: 85px;
color:white;
padding-top: 30px;
font-size: 50px;
padding-left: 30px;
font-family: 隸書(shū);
}
.mainDiv{
width: 899px;
height: 500px;
border: 4px rgb(237, 237, 237) solid;
border-radius: 5px;
background-image: url(""); <!-- 圖片鏈接 -->
margin: auto;
margin-top: 50px;
}
.loginDiv{
height: 220px;
width: 260px;
padding:50px;
background-color:rgba(255,255,255,0.9);
border-radius:25px;
border:1px #bdbdbd solid;
opacity:0.9;
float: right;
margin-right: 100px
}
.name{
font-size: 25px;
}
a{
font-size:15px;
color:#59c2c5;
padding-left:20px;
}
.item{
height:60px;
}
.item input{
line-height:40px;
width:245px;
border:none;
border-bottom: 1px solid #59c2c5;
margin-bottom: 20px;
margin-top: 10px;
}
.login-btn{
display:block;
width:255px;
height:50px;
color:#fff;
background:#59c2c5;
font-size:16px;
line-height:30px;
text-align:center;
border-radius:10px;
border:none;
margin-bottom: 20px;
margin-top: 10px;
}
</style>
</head>
<body>
<div class="mainDiv">
<div class="titleDiv">學(xué)生信息管理平臺(tái)</div>
<form action="userLogin" method="post">
<div class="loginDiv">
<div class="name">
用戶登錄 <a href="toRegister">立即注冊(cè)</a>
</div>
<div class=item>
<input type="text" name="uid" placeholder="用戶名"/>
</div>
<div class=item>
<input type="password" name="pwd" placeholder="密碼"/>
</div>
<input type="submit" class="login-btn" value="登 錄"/>
<%
String loginError = (String) request.getAttribute("loginError");
if(loginError != null){
if(loginError.equals("logErr")){
out.println("登錄失敗,請(qǐng)檢查用戶名和密碼!");
}
}
%>
<%
String register = (String) request.getAttribute("register");
if (register!= null) {
if (register.equals("reg")) {
out.println("注冊(cè)成功, 請(qǐng)登錄!");
}
}
%>
</div>
</form>
</div>
</body>
</html>
其他界面,請(qǐng)參考JavaWeb實(shí)現(xiàn)學(xué)生管理系統(tǒng)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-477216.html
2.JavaBean實(shí)體類封裝數(shù)據(jù)
(1)學(xué)生信息類 (Student.java)
package com.stu.pojo;
public class Student {
private Integer sno;
private String sname;
private String sex;
private Integer age;
private String phone;
public Student(Integer sno, String sname, String sex, Integer age, String phone) {
this.sno = sno;
this.sname = sname;
this.sex = sex;
this.age = age;
this.phone = phone;
}
public Student() {
}
public Integer getSno() {
return sno;
}
public void setSno(Integer sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
(2)分頁(yè)幫助類 (Page.java)
package com.stu.pojo;
import java.util.List;
//分頁(yè)幫助類
public class Page {
private Integer currentPage; //當(dāng)前頁(yè)面
private Integer pageSize; //一頁(yè)有多少條數(shù)據(jù)
private Integer totalCount; //一共有多少條數(shù)據(jù)
private Integer totalPage; //一共有多少頁(yè)
private List<Student> student;
public Page() {
}
public Page(Integer currentPage, Integer pageSize, Integer totalCount, Integer totalPage, List<Student> student) {
this.currentPage = currentPage;
this.pageSize = pageSize;
this.totalCount = totalCount;
this.totalPage = totalPage;
this.student = student;
}
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalCount() {
return totalCount;
}
public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
}
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public List<Student> getStudent() {
return student;
}
public void setStudent(List<Student> student) {
this.student = student;
}
}
(3)用戶信息類 (User.java)
package com.stu.pojo;
public class User {
private Integer uid;
private String pwd;
public User(Integer uid, String pwd) {
this.uid = uid;
this.pwd = pwd;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
3.業(yè)務(wù)邏輯實(shí)現(xiàn)
controller(解析參數(shù),封裝service所需要的參數(shù)、校驗(yàn)參數(shù)) --> service(業(yè)務(wù)邏輯處理,加上事務(wù)) --> dao(執(zhí)行sql,從數(shù)據(jù)庫(kù)中查詢數(shù)據(jù))文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-477216.html
(1)配置studentMapper.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">
<mapper namespace="com.stu.dao.IStudentDao">
<select id="login" resultType="User">
select *
from login
where uid = #{uid}
and pwd = #{pwd}
</select>
<insert id="register" parameterType="User">
insert into login value (#{uid}, #{pwd})
</insert>
<insert id="addStudent" parameterType="Student">
insert into student value (#{sno}, #{sname}, #{sex}, #{age}, #{phone})
</insert>
<select id="getAllStudents" resultType="Student">
select *
from student
</select>
<select id="queryStudentByPage" resultType="Student">
select *
from student limit #{startPosition}, #{pageSize}
</select>
<delete id="deleteStudent" parameterType="Student">
delete
from student
where sno = #{sno}
</delete>
<select id="queryStudentBySno" resultType="Student">
select *
from student
where sno = #{sno}
</select>
<update id="updateStudentBySno" parameterType="Student">
update student
set sname = #{sname},
sex = #{sex},
age = #{age},
phone = #{phone}
where sno = #{sno}
</update>
<select id="getTotalCount" resultType="java.lang.Integer">
select count(*)
from student
</select>
</mapper>
(2)dao層(IStudentDao.java)
package com.stu.dao;
import com.stu.pojo.User;
import com.stu.pojo.Student;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface IStudentDao {
public User login(@Param("uid") Integer uid, @Param("pwd") String pwd);
public int register(User user);
public int addStudent(Student student);
public List<Student> getAllStudents();
public int getTotalCount();
public List<Student> queryStudentByPage(Map<String,Integer> map);
public int deleteStudent(Integer sno);
public Student queryStudentBySno(Integer sno);
public int updateStudentBySno(Student student);
}
(3)service層(StudentService.java)
package com.stu.service;
import com.stu.dao.IStudentDao;
import com.stu.pojo.Student;
import com.stu.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class StudentService {
@Autowired
private IStudentDao dao;
public User login(Integer uid, String pwd){
return dao.login(uid, pwd);
}
@Transactional(rollbackFor = Exception.class)
public int register(User user){
return dao.register(user);
}
@Transactional(rollbackFor = Exception.class)
public int addStudent(Student student){
return dao.addStudent(student);
}
public List<Student> getAllStudents(){
return dao.getAllStudents();
}
public int getTotalCount(){
return dao.getTotalCount();
}
public List<Student> queryStudentsByPage(Integer currentPage, Integer pageSize){
Map<String,Integer> map = new HashMap<String, Integer>();
int startPosition = (currentPage - 1) * pageSize;
map.put("startPosition", startPosition);
map.put("pageSize",pageSize);
return dao.queryStudentByPage(map);
}
@Transactional(rollbackFor = Exception.class)
public void deleteStudent(Integer sno){
dao.deleteStudent(sno);
}
public Student queryStudentBySno(Integer sno){
return dao.queryStudentBySno(sno);
}
@Transactional(rollbackFor = Exception.class)
public void updateStudentBySno(Student stu) {
dao.updateStudentBySno(stu);
}
}
(4)controller層
① UserController.java
package com.stu.controller;
import com.stu.pojo.User;
import com.stu.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
@Controller
public class UserController {
@Autowired
private StudentService service;
@GetMapping("/login")
public String login( ) {
return "login";
}
@PostMapping("/userLogin")
public String userLogin(@RequestParam(value = "uid",required = false) Integer uid,@RequestParam(value = "pwd",required = false) String pwd, HttpServletRequest request){
User loginUser = service.login(uid, pwd);
if(loginUser != null){
return "main";
}else{
request.setAttribute("loginError", "logErr");
return "login";
}
}
@GetMapping("/toRegister")
public String toRegister(){
return "register";
}
@PostMapping("/userRegister")
public String userRegister(User user, HttpServletRequest request){
int result = service.register(user);
if(result > 0) {
request.setAttribute("register", "reg");
return "login";
}else {
return "register";
}
}
@GetMapping("/backLogin")
public String back(){
return "login";
}
}
② StudentController.java
package com.stu.controller;
import com.stu.pojo.Page;
import com.stu.pojo.Student;
import com.stu.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.List;
@Controller
public class StudentController {
@Autowired
private StudentService service;
@GetMapping("/toAddStudent")
public String toAddStudent(){
return "addStudent";
}
@GetMapping("/AddStudent")
public String AddStudent(Student student){
int result = service.addStudent(student);
if(result > 0){
return "main";
}else {
return "addStudent";
}
}
@GetMapping("/toShowStudentsByPage")
public String ShowStudentsByPage(Integer currentPage, HttpServletRequest request){
Page page = new Page();
if(currentPage == null) {
currentPage = 1;
}
page.setCurrentPage(currentPage);
int totalCount = service.getTotalCount();
page.setTotalCount(totalCount);
int pageSize = 5;
Integer totalPage = (totalCount / pageSize) + 1;
page.setTotalPage(totalPage);
page.setPageSize(pageSize);
List<Student> student = service.queryStudentsByPage(currentPage, pageSize);
page.setStudent(student);
request.setAttribute("page1", page);
return "showAllStudentsByPage";
}
@GetMapping("/toShowAllStudents")
public String ShowAllStudents(HttpSession session){
List<Student> allStudents = service.getAllStudents();
session.setAttribute("allStudents", allStudents);
return "showAllStudents";
}
@GetMapping("/back")
public String back(){
return "main";
}
@GetMapping("/quit")
public String quit(){
return "redirect:/login";
}
@GetMapping("/toDeleteStudent")
public String deleteStudent(Integer sno,HttpServletRequest request){
service.deleteStudent(sno);
return "forward:/toShowAllStudents";
}
@GetMapping("/toUpdateStudent")
public String queryStudentBySno(Integer sno, HttpServletRequest request){
Student student = service.queryStudentBySno(sno);
request.setAttribute("student", student);
return "updateStudent";
}
@GetMapping("/updateStudent")
public String updateStudent(Student s){
service.updateStudentBySno(s);
return "forward:/toShowAllStudents";
}
}
到了這里,關(guān)于SSM實(shí)現(xiàn)學(xué)生管理系統(tǒng)(spring+springMVC+MyBatis)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!