注意:默认的打包方式为 jar,为了能配置web资源,需要将打包方式设置为 war
4.0.0
online.liaojy
spring_springmvc_mybatis
1.0-SNAPSHOT
war
5.3.1
org.springframework
spring-context
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-aspects
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
3.5.7
org.mybatis
mybatis-spring
2.0.6
com.alibaba
druid
1.0.9
junit
junit
4.12
test
mysql
mysql-connector-java
5.1.49
log4j
log4j
1.2.17
com.github.pagehelper
pagehelper
5.2.0
ch.qos.logback
logback-classic
1.2.3
javax.servlet
javax.servlet-api
3.1.0
provided
com.fasterxml.jackson.core
jackson-databind
2.12.1
commons-fileupload
commons-fileupload
1.3.1
org.thymeleaf
thymeleaf-spring5
3.0.12.RELEASE
打开Project Structure,选择对应的module,并为该module创建一个web.xml文件
注意:web.xml文件需要放到web资源路径(工程路径srcmainwebapp)下
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
classpath:spring.xml
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
CharacterEncodingFilter
/*
HiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter
HiddenHttpMethodFilter
/*
SpringMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
1
SpringMVC
/
package online.liaojy.ssm.controller;
import org.springframework.stereotype.Controller;
/**
* @author liaojy
* @date 2023/12/3 - 18:32
*/
@Controller
public class EmployeeController {
}
注意:html要引入thymeleaf的约束:xmlns:th="http://www.thymeleaf.org"
首页
index.html
注意:本例使用的数据库版本为 MySQL-5 ,因此驱动配置为 com.mysql.jdbc.Driver
如果使用的数据库版本为 MySQL-8 ,驱动配置应该为 com.mysql.cj.jdbc.Driver
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
package online.liaojy.ssm.mapper;
/**
* @author liaojy
* @date 2023/12/4 - 7:00
*/
public interface EmployeeMapper {
}
注意:mapper映射文件的目录结构和名称要和mapper接口的一致
mapper映射文件的命名空间,也要和mapper接口的全类名一致
package online.liaojy.ssm.service;
/**
* @author liaojy
* @date 2023/12/4 - 20:32
*/
public interface EmployeeService {
}
package online.liaojy.ssm.service.impl;
import online.liaojy.ssm.service.EmployeeService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author liaojy
* @date 2023/12/4 - 20:34
*/
@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {
}
CREATE TABLE `t_emp` (
`emp_id` int(11) NOT NULL AUTO_INCREMENT,
`emp_name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
insert into t_emp (emp_name,age,sex,email) values ('a',18,'男','11@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('b',19,'男','22@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('c',20,'男','33@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('d',21,'男','44@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('e',22,'男','55@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('f',23,'男','66@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('g',24,'男','77@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('h',25,'男','88@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('i',26,'男','99@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('j',27,'男','00@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('k',28,'男','111@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('l',29,'男','222@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('m',30,'男','333@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('n',31,'男','444@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('o',32,'男','555@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('p',33,'男','666@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('q',34,'男','777@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('r',35,'男','888@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('s',36,'男','999@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('t',37,'男','000@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('u',38,'男','1111@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('v',39,'男','2222@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('w',40,'男','3333@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('x',41,'男','4444@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('y',42,'男','5555@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('z',43,'男','6666@qq.com');
package online.liaojy.ssm.pojo;
import java.io.Serializable;
/**
* @author liaojy
* @date 2023/12/4 - 23:06
*/
public class Employee implements Serializable {
private Integer empId;
private String empName;
private Integer age;
private String sex;
private String email;
public Employee() {
}
public Employee(Integer empId, String empName, Integer age, String sex, String email) {
this.empId = empId;
this.empName = empName;
this.age = age;
this.sex = sex;
this.email = email;
}
public Integer getEmpId() {
return empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Employee{" +
"empId=" + empId +
", empName='" + empName + ''' +
", age=" + age +
", sex='" + sex + ''' +
", email='" + email + ''' +
'}';
}
}
/**
* 查询所有员工信息
* @return
*/
List getAllEmployee();
/**
* 查询所有员工信息
* @return
*/
List getAllEmployee();
@Autowired
EmployeeMapper employeeMapper;
public List getAllEmployee() {
return employeeMapper.getAllEmployee();
}
@Autowired
EmployeeService employeeService;
@GetMapping("/employee")
public String getAllEmployee(Model model){
// 查询所有员工信息
List employees = employeeService.getAllEmployee();
//将员工信息共享到请求域
model.addAttribute("employees",employees);
//跳转到员工列表页面employee_list.html
return "employee_list";
}
员工列表
员工列表
序号
员工id
员工姓名
员工年龄
员工性别
员工邮箱
操作(添加员工)
修改员工
删除员工
查询所有员工信息
/**
* 分页查询所有员工信息
* @param pageNum
* @return
*/
PageInfo getAllEmployeeWithPage(Integer pageNum,Integer pageSize);
public PageInfo getAllEmployeeWithPage(Integer pageNum,Integer pageSize) {
// 在查询之前,开启分页功能,并设置当前页的页码和每页的数据条数
PageHelper.startPage(pageNum,pageSize);
// 查询所有的员工信息()
// 分页插件会在查询前先进行拦截,添加相关的sql分页代码后(因此在mapper映射文件编写的sql不能使用分号结束),再放行
List employees = employeeMapper.getAllEmployee();
// 根据分页数据(employees)和分页导航的页码数(navigatePages),创建分页数据对象
PageInfo employeePageInfo = new PageInfo(employees, 5);
return employeePageInfo;
}
@GetMapping(value = {"/employee/page/{pageNum}","/employee/page/{pageNum}/{pageSize}"})
public String getAllEmployeeWithPage(Model model,
@PathVariable("pageNum") Integer pageNum,
@PathVariable(value = "pageSize",required = false) Integer pageSize){
// 判断请求中是否有设置每页的数据条数,没有的话就给一个默认值
if (pageSize == null){
pageSize = 4;
}
// 根据当前页的页码,分页查询所有员工信息
PageInfo employeePageInfo = employeeService.getAllEmployeeWithPage(pageNum,pageSize);
//将分页数据共享到请求域
model.addAttribute("employeePageInfo",employeePageInfo);
//跳转到员工列表分页的页面employee_page.html
return "employee_page";
}
关于分页数据对象的属性细节,请参考12.3.3.1节
员工列表
员工列表
序号
员工id
员工姓名
员工年龄
员工性别
员工邮箱
操作(添加员工)
修改员工
删除员工
分页查询所有员工信息
如上图所示,当前页为第一页,所以在分页导航中没有“首页”和“上一页”,对应的页码带有中括号且标红
如上图所示,当前页为第二页,所以在分页导航中有“首页”和“上一页”,对应的页码带有中括号且标红
如上图所示,当前页为最后一页,所以在分页导航中没有“下一页”和“末页”,对应的页码带有中括号且标红
本文来自博客园,作者:Javaer1995,转载请注明原文链接:https://www.cnblogs.com/Javaer1995/p/17858710.html
参与评论
手机查看
返回顶部