一、实验环境
Windows、IDEA2023.2.1、DataGrip2022.3.3、mybatis3.5.6、tomcat8.0.23
二、实验目的与要求
掌握 Spring MVC 框架的基本使用,并整合 Spring 框架和 MyBatis 框架实现简单的 Web 应用。
1、熟悉 SpringMVC 的基本工作原理;
2、掌握前端控制器的配置;
3、掌握后端控制器的编写;
4、掌握简单数据绑定;
5、掌握复杂数据绑定;
6、掌握 SSM 三大框架的整合。
三、实验步骤与结果(重点,应包含详细步骤、核心代码、结果截图等)
设计一个简单的学生信息管理系统,并使用 SSM 框架技术整合实现。要求能够通过 Web 页面添加、删除、修改和查询学生信息。自己编写相关的类、接口、配置文件和用户访问页面等。可参考如下 SQL 语句建表:
CREATE TABLE students (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL,
age int(11) NOT NULL,
gender varchar(255) DEFAULT NULL,
number varchar(20) DEFAULT NULL,
address varchar(20) DEFAULT NULL,
status int(11) NOT NULL DEFAULT 1,
PRIMARY KEY (id) )
1、创建一个MySQL数据库ssm_student并创建student_tb表,将数据插入。
2、创建com.yin.domain包,在其中创建student POJO类,在其中定义各属性,并创建getter和setter方法。
package com.yin.domain;
public class Student {
private int id;
private String name;
private int age;
private String gender;
private String number;
private String address;
private int status;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
3、使用注解配置类型,创建com.yin.config包,在其中创建EncodingFilter、JdbcConfig、MyBatisConfig、ServletContainersIinitConfig、SpringConfig、SpringMvcConfig等java配置文件。
public class EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=utf-8");
filterChain.doFilter(servletRequest,servletResponse);
}
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.driverClass}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean("dataSource")
public DataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
}
@MapperScan("com.yin.mapper")
public class MyBatisConfig {
//配置分页拦截器
@Bean
public PageInterceptor pageInterceptor(){
PageInterceptor pageInterceptor = new PageInterceptor();
//分页插件配置
Properties properties = new Properties();
properties.setProperty("value","true");
pageInterceptor.setProperties(properties);
return pageInterceptor;
}
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setDataSource(dataSource);
ssfb.setTypeAliasesPackage("com.yin.domain");
return ssfb;
}
}
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
@Configuration
@ComponentScan("com.yin.service")
@Import({MyBatisConfig.class, JdbcConfig.class})
@EnableTransactionManagement //事务管理
public class SpringConfig {
//事务管理的配置
@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
//配置数据源
transactionManager.setDataSource(dataSource);
return transactionManager;
}
}
jdbc.username=root
jdbc.password=452372
jdbc.url=jdbc:mysql://localhost:3306/ssm_student
jdbc.driverClass=com.mysql.cj.jdbc.Driver
4、配置jdbc,properties文件以及service接口以及实现类servieImpl,并创建controller文件,编写前端代码。
用户登录界面:
学生信息添加:
学生信息删除:
学生信息修改:
学生信息查询:
源程序均可正常运行:
四、讨论、心得(遇到的问题与解决办法等)
在本次实验中,我学会了分别使用基于xml和注解的方式对Bean进行装配,同时加深了对面向切面编程的认识和学习兴趣;在基于注解的方式进行面向切面编程时,我忘记加@Aspect注解,直接导致了运行结果没有环绕、开始和结束等各通知。我浪费了不少时间才注意到这个基础问题,加上这个注释后实验结果预期一致。