整合 SSM
项目结构
.
├── pom.xml
└── src
└── main
├── java
│ └── com
│ └── pengshiyu
│ ├── controller
│ │ └── UserController.java
│ ├── dao
│ │ ├── UserDao.java
│ │ └── impl
│ │ └── UserDaoImpl.java
│ ├── interceptor
│ │ └── MyInterceptor.java
│ ├── service
│ │ ├── UserService.java
│ │ └── impl
│ │ └── UserServiceImpl.java
│ └── vo
│ └── User.java
├── resources
│ ├── applicationContext.xml
│ ├── db.properties
│ ├── mappers
│ │ └── user.mapper.xml
│ ├── mybatis-config.xml
│ └── spring-mvc.xml
└── webapp
├── WEB-INF
│ └── web.xml
├── detail.jsp
├── edit.jsp
└── list.jsp
依赖
pom.xml
4.0.0
org.example
spring-mvc-demo
1.0-SNAPSHOT
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8080
/
UTF-8
true
src/main/webapp/WEB-INF/web.xml
true
org.springframework
spring-core
5.2.6.RELEASE
org.springframework
spring-beans
5.2.6.RELEASE
org.springframework
spring-context
5.2.6.RELEASE
org.springframework
spring-context-support
5.2.6.RELEASE
org.springframework
spring-web
5.2.6.RELEASE
org.springframework
spring-webmvc
5.2.6.RELEASE
org.springframework
spring-aop
5.2.6.RELEASE
org.springframework
spring-expression
5.2.6.RELEASE
commons-logging
commons-logging
1.2
javax.servlet
javax.servlet-api
4.0.1
provided
taglibs
standard
1.1.2
jstl
jstl
1.2
commons-io
commons-io
2.7
commons-fileupload
commons-fileupload
1.4
com.fasterxml.jackson.core
jackson-annotations
2.11.0
com.fasterxml.jackson.core
jackson-databind
2.11.0
com.fasterxml.jackson.core
jackson-core
2.11.0
org.aspectj
aspectjweaver
1.9.5
org.mybatis
mybatis
3.5.4
org.mybatis
mybatis-spring
2.0.4
org.springframework
spring-jdbc
5.2.6.RELEASE
mysql
mysql-connector-java
8.0.18
配置
1、web.xml
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
spring-mvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring-mvc.xml
1
spring-mvc
/
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
CharacterEncodingFilter
/*
2、applicationContext.xml
3、db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/data
username=root
password=123456
4、spring-mvc.xml
5、mybatis-config.xml
6、user.mapper.xml
select * from users
select * from users where id = #{id}
insert into users(name, password) values(#{name}, #{password})
delete from users where id = #{id}
update users set name = #{name}, password = #{password} where id = #{id}
实体类
package com.pengshiyu.vo;
public class User {
private int id;
private String name;
private String password;
public User(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public User() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
Dao
package com.pengshiyu.dao;
import com.pengshiyu.vo.User;
import java.util.List;
public interface UserDao {
public List list();
public User detail(int id);
public int delete(int id);
public int update(User user);
public int insert(User user);
}
实现类
package com.pengshiyu.dao.impl;
import com.pengshiyu.dao.UserDao;
import com.pengshiyu.vo.User;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository("userDao")
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
@Autowired
@Override
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
}
public List list() {
return getSqlSession().selectList("com.pengshiyu.vo.user.mapper.selectList");
}
public User detail(int id) {
return getSqlSession().selectOne("com.pengshiyu.vo.user.mapper.selectOne", id);
}
public int delete(int id) {
return getSqlSession().delete("com.pengshiyu.vo.user.mapper.delete", id);
}
public int update(User user) {
return getSqlSession().update("com.pengshiyu.vo.user.mapper.update", user);
}
public int insert(User user) {
return getSqlSession().insert("com.pengshiyu.vo.user.mapper.insert", user);
}
}
Service
package com.pengshiyu.service;
import com.pengshiyu.vo.User;
import java.util.List;
public interface UserService {
public List list();
public User detail(int id);
public int delete(int id);
public int update(User user);
public int insert(User user);
}
实现类
package com.pengshiyu.service.impl;
import com.pengshiyu.dao.UserDao;
import com.pengshiyu.service.UserService;
import com.pengshiyu.vo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public List list() {
return userDao.list();
}
public User detail(int id) {
return userDao.detail(id);
}
public int delete(int id) {
return userDao.delete(id);
}
public int update(User user) {
return userDao.update(user);
}
public int insert(User user) {
return userDao.insert(user);
}
}
Controller
package com.pengshiyu.controller;
import com.pengshiyu.service.UserService;
import com.pengshiyu.vo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import java.io.IOException;
import java.util.List;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
@RequestMapping("/list")
public String list(ModelMap modelMap) throws IOException {
List list = userService.list();
System.out.println(list);
modelMap.addAttribute("list", list);
return "/list.jsp";
}
@RequestMapping("/detail")
public String detail(int id, ModelMap modelMap) throws IOException {
User user = userService.detail(id);
modelMap.addAttribute("user", user);
return "/detail.jsp";
}
@RequestMapping("/update")
public String update(int id, ModelMap modelMap) throws IOException {
User user = userService.detail(id);
modelMap.addAttribute("title", "修改");
modelMap.addAttribute("user", user);
return "/edit.jsp";
}
@RequestMapping("/add")
public String add(ModelMap modelMap) throws IOException {
User user = new User();
modelMap.addAttribute("title", "添加");
modelMap.addAttribute("user", user);
return "/edit.jsp";
}
@RequestMapping("/delete")
public String delete(int id) throws IOException {
userService.delete(id);
return "redirect:list";
}
@RequestMapping(value = "/edit", method = RequestMethod.POST)
public String edit(User user, ModelMap modelMap) throws IOException {
if (user.getId() != 0) {
userService.update(user);
} else {
userService.insert(user);
}
return "redirect:detail?id=" + user.getId();
}
}
拦截器
此项目中并没有配置生效
package com.pengshiyu.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public class MyInterceptor implements HandlerInterceptor {
private List allowedUrls;
// 在请求处理的方法执行之前执行,
// 返回true执行下一个拦截器,
// 返回false不执行下一个拦截器
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle");
// 解决中文打印乱码输出
response.setContentType("text/html;charset=utf-8");
// 判断session
Object user = request.getSession().getAttribute("user");
if(user != null){
return true;
}
// 判断放行路径
String url = request.getRequestURL().toString();
System.out.println(url);
for(String temp: allowedUrls){
if(url.endsWith(temp)){
return true;
}
}
// 如果没有登录就重定向到登录页面
response.sendRedirect("/login.do");
return false;
}
// 在处理方法执行之后执行
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
// 在DispatcherServlet 之后执行 清理工作
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}
public List getAllowedUrls() {
return allowedUrls;
}
public void setAllowedUrls(List allowedUrls) {
this.allowedUrls = allowedUrls;
}
}
页面
list.jsp
list
添加
编号
姓名
密码
详细
删除
${item.id}
${item.name}
${item.password}
详细
修改
删除
detail.jsp
detail
返回列表
编辑
id: ${user.id}
name: ${user.name}
password: ${user.password}
edit.jsp
${title}
返回列表
name
password
项目代码 https://gitee.com/mouday/spring-springmvc-mybatis-demo