❤️‍Spring全家桶从入门到大神--SpringMVC之SSM整合(用户-增删改查!)

Posted 一只楠喃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了❤️‍Spring全家桶从入门到大神--SpringMVC之SSM整合(用户-增删改查!)相关的知识,希望对你有一定的参考价值。

1、需求

用户的增删改查

  • SSM:spring mvc 、spring、mybatis
  • view:jsp (非重点)

2、环境搭建

  • 项目名:day15_ssm_ums

  • 数据库:已有数据

# 创建数据库
CREATE DATABASE ssm_db2;
# 使用数据库
USE ssm_db2;
# 1.1 创建用户表
CREATE TABLE `user` (
  `uid` VARCHAR(32) NOT NULL,
  `username` VARCHAR(20) DEFAULT NULL,	#用户名
  `password` VARCHAR(32) DEFAULT NULL,	#密码
  `name` VARCHAR(20) DEFAULT NULL,		#昵称
  `email` VARCHAR(30) DEFAULT NULL,		#电子邮箱
  `telephone` VARCHAR(20) DEFAULT NULL,	#电话
  `birthday` DATE DEFAULT NULL,			#生日
  `sex` VARCHAR(10) DEFAULT NULL,		#性别
  `state` INT(11) DEFAULT 0,			#状态:0=未激活,1=已激活
  `code` VARCHAR(64) DEFAULT NULL,		#激活码
  PRIMARY KEY (`uid`)
) ;
# 1.2 初始化用户默认数据
INSERT INTO `user` VALUES ('u001','jack','1234','杰克','jack@czxy.com','13612345678','2015-11-04','男',0,NULL);
INSERT INTO `user` VALUES ('u002','rose','1234','肉丝','rose@czxy.com','13612345679','2015-11-05','女',0,NULL);
INSERT INTO `user` VALUES ('373eb242933b4f5ca3bd43503c34668b','ccc','ccc','aaa','bbb@store.com','15723689921','2015-11-04','男',0,'9782f3e837ff422b9aee8b6381ccf927bdd9d2ced10d48f4ba4b9f187edf7738'),('3ca76a75e4f64db2bacd0974acc7c897','bb','bb','张三','bbb@store.com','15723689921','1990-02-01','男',0,'1258e96181a9457987928954825189000bae305094a042d6bd9d2d35674684e6'),('62145f6e66ea4f5cbe7b6f6b954917d3','cc','cc','张三','bbb@store.com','15723689921','2015-11-03','男',0,'19f100aa81184c03951c4b840a725b6a98097aa1106a4a38ba1c29f1a496c231'),('c95b15a864334adab3d5bb6604c6e1fc','bbb','bbb','老王','bbb@store.com','15712344823','2000-02-01','男',0,'71a3a933353347a4bcacff699e6baa9c950a02f6b84e4f6fb8404ca06febfd6f'),('f55b7d3a352a4f0782c910b2c70f1ea4','aaa','aaa','小王','aaa@store.com','15712344823','2000-02-01','男',1,NULL);
  • 导入jar包

  • spring、spring mvc
  • mybatis、spring整合mybatis
  • druid 连接池
  • jsp jstl(标准标签库)

3、导入配置类

创建对应的目录结构

3.1、MyBatis配置类

public class MyBatisConfiguration {
/**
* 配置session工厂
* @param dataSource
* @return
* @throws Exception
/
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
//1 创建 factoryBean
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
//2 设置数据
// 2.1 数据源
factoryBean.setDataSource(dataSource);
// 2.2 驼峰命名
Configuration configuration = new Configuration();
configuration.setMapUnderscoreToCamelCase(true);
factoryBean.setConfiguration(configuration);
// 2.3 分页插件
Properties props = new Properties();
// 设置方言
props.setProperty(“dialect”, “mysql”);
// 分页的同时进行count查询
props.setProperty(“rowBoundsWithCount”, “true”);
// 分页合理化参数,pageNum<=0 时会查询第一页,pageNum>pages (超过总数时),会查询最后一页
props.setProperty(“reasonable”, “true”);
// PageInterceptor pageInterceptor = new PageInterceptor();
// pageInterceptor.setProperties(props);
PageHelper pageHelper = new PageHelper();
pageHelper.setProperties(props);
factoryBean.setPlugins(new Interceptor[] {pageHelper});
//3 通过factorybean获得对应
return factoryBean.getObject();
}
/
*
* 映射扫描器
* @return
*/
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
//1 创建
MapperScannerConfigurer mapperScanner = new MapperScannerConfigurer();
//2设置包
mapperScanner.setBasePackage(“com.czxy.ssm.mapper”);
return mapperScanner;
}
}

3.2、 Spring配置类

  • 数据源配置文件

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_db2
jdbc.username=root
jdbc.password=1234

  • 配置类

@ComponentScan(basePackages=“com.czxy.ssm.service”)
@PropertySource(“classpath:db.properties”)
@EnableTransactionManagement
public class SpringConfiguration {
/**
* 获得properties文件中内容,并注入对应变量
/
@Value(" j d b c . d r i v e r " ) p r i v a t e S t r i n g d r i v e r ; @ V a l u e ( " {jdbc.driver}") private String driver; @Value(" jdbc.driver")privateStringdriver;@Value("{jdbc.url}")
private String url;
@Value(" j d b c . u s e r n a m e " ) p r i v a t e S t r i n g u s e r n a m e ; @ V a l u e ( " {jdbc.username}") private String username; @Value(" jdbc.username")privateStringusername;@Value("{jdbc.password}")
private String password;
/
*
* 配置数据源
* @return
/
@Bean
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driver);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
return druidDataSource;
/
*
* 事务管理器
* @param dataSource
* @return
*/
@Bean
public DataSourceTransactionManager txManager(DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
}

3.3、 Spring MVC配置类

@Configuration
@ComponentScan(basePackages=“com.czxy.ssm.controller”)
//public class MvcConfiguration extends WebMvcConfigurationSupport {
public class MvcConfiguration implements WebMvcConfigurer {
/**
* 视图解析器
* @return
*/
@Bean
public InternalResourceViewResolver internalResourceViewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
//前缀 jsp文件夹
viewResolver.setPrefix("/WEB-INF/pages/");
//后缀 jsp扩展名
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}

3.4、 启动配置类

public class WebInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
//1 配置spring工厂
AnnotationConfigWebApplicationContext application = new AnnotationConfigWebApplicationContext();
// 注册所有的配置类
application.register(MyBatisConfiguration.class);
application.register(SpringConfiguration.class);
application.register(MvcConfiguration.class);
//2 post中文乱码
FilterRegistration.Dynamic encodingFilter = servletContext.addFilter(“encoding”, new CharacterEncodingFilter(“UTF-8”));
encodingFilter.addMappingForUrlPatterns(null, true, “/");
//3 核心控制器
ServletRegistration.Dynamic mvcServlet = servletContext.addServlet(“springmvc”, new DispatcherServlet(application));
//mvcServlet.addMapping("
.action”);
mvcServlet.addMapping("/");
mvcServlet.setLoadOnStartup(2); //tomcat启动时,执行servlet的初始化方法
}
}

4、 查询所有

  1. 步骤1:编写JavaBean(User)
  • 提供字段 和 表类对应
  • 添加MyBatis相关注解 @Id 等
  1. 步骤2:编写Mapper(UserMapper)
  • 整合通用Mapper
  1. 步骤3:编写service
  • 需要管理事务
  1. 步骤4:编写controller
  • 处理请求路径
  • 选择视图页面 list
  1. 步骤5:list.jsp 页面展示数据(非重点)

  1. 步骤1:编写JavaBean(User)
  • 提供字段 和 表类对应
  • 添加MyBatis相关注解 @Id 等

@Entity(name=“user”)
public class User {
@Id
private String uid;
@Column(name=“username”)
private String userName;
private String password;
private String name;
private String email;
private String telephone;
private Date birthday;
private String sex;
private Integer state;
private String code;
// 省略getter和setter
}

  1. 步骤2:编写Mapper(UserMapper)
  • 整合通用Mapper

public interface UserMapper extends Mapper {
}

  1. 步骤3:编写service
  • 需要管理事务

public interface UserService {
/**
* 查询所有
* @return
*/
public List selectAll();
}

@Service
@Transactional
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public List selectAll() {
return userMapper.selectAll();
}
}

  1. 步骤4:编写controller
  • 处理请求路径
  • 选择视图页面 list

@Controller
@RequestMapping("/user")
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/selectAll")
public String selectAll(Model model) {
// 查询所有
List list = userService.selectAll();
// 将查询结果存放request --> 模型
model.addAttribute(“list”, list);
// 设置视图名
return “list”;
}
}

  1. 步骤5:list.jsp 页面展示数据(非重点)(因为我是大数据方向)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <table border="1" width="800">
        <tr>
            <td>编号</td>
            <td>登录名</td>
            <td>昵称</td>
            <td>email</td>
            <td>电话</td>
            <td>操作</td>
        </tr>
        <c:forEach items="${list}" var="user">
            <tr>
                <td>${user.uid}</td>
                <td>${user.userName}</td>
                <td>${user.name}</td>
                <td>${user.email}</td>
                <td>${user.telephone}</td>
                <td>
                    修改
                    删除
                </td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

5、 添加

  1. 步骤1:点击添加按钮,显示添加表单

  2. 步骤2:编写controller,处理添加功能

  • 添加成功后,跳转到列表页面
  • 添加失败后,转发添加页面,提示错误信息
  1. 步骤3:编写service,完成添加

  1. 步骤1:点击添加按钮,显示添加表单
  • 1.1 在list.jsp页面中,编写添加按钮

添加

  • 1.2 编程UserController显示jsp

/**
* 显示页面
* @return
*/
@RequestMapping("/addUI")
public String addUI() {
return “add”;
}

  • 1.3 编写表单
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%--  错误信息   --%>
    <font color="red"> ${msg}</font>

    <form action="${pageContext.request.contextPath}/user/add.action" method="post">
        用户名:<input type="text" name="userName" /> <br/>
        密码:<input type="password" name="password" /> <br/>
        昵称:<input type="text" name="name" /> <br/>
        <input type="submit" value="添加用户"/>
    </form>
</body>
</html>
  1. 步骤2:编写controller,处理添加功能
  • 添加成功后,跳转到列表页面
  • 添加失败后,转发添加页面,提示错误信息

/**
*
* @param user
* @param model
* @return
*/
@RequestMapping("/add")
public String add(User user, Model model) {
// 添加用户
boolean result = userService.add(user);
if(result) {
// 添加成功
return “redirect:/user/selectAll.action”;
} else {
// 添加失败
model.addAttribute(“msg”, “添加失败”);
return “forward:/WEB-INF/pages/add.jsp”;
}
}

  1. 步骤3:编写service,完成添加(接口+实现类)

/**
* 添加
* @param user
* @return
*/
boolean add(User user);

@Override
public boolean add(User user) {
// 自动生成id
String uuidString = UUID.randomUUID().toString().replace("-","");
user.setUid(uuidString);
int insert = userMapper.insert(user);
return insert == 1;
}

6、删除用户

  1. 步骤1:点击删除按钮
  2. 步骤2:编写controller,处理删除功能
  • 删除成功后,跳转到列表页面
  • 删除失败后,转发添加页面,提示错误信息
  1. 步骤3:编写service,完成删除

  1. 步骤1:点击删除按钮
<a href="${pageContext.request.contextPath}/user/delete.action?uid=${user.uid}" onclick="return confirm('真的要删除么???')">删除</a>
  1. 步骤2:编写controller,处理删除功能
  • 删除成功后,跳转到列表页面
  • 删除失败后,转发添加页面,提示错误信息

@RequestMapping("/delete")
public String delete(String uid, Model model) {
System.out.println(“uid:”+uid);
Boolean delete = userService.delete(uid);
if (delete){
return “redirect:selectAll.action”;
}else {
model.addAttribute(“msg”,“删除失败”);
return “forward:/WEB-INF/pages/list.jsp”;
}
}

  1. 步骤3:编写service,完成删除

@Override
public Boolean delete(String uid) {
int insert = userMapper.deleteByPrimaryKey(uid);
if (insert==1){
return true;
}else {
return false;
}
}

7、更新数据

  1. 步骤1:点击修改按钮,显示修改表单

  2. 步骤2:编写controller,处理修改功能

  • 修改成功后,跳转到列表页面
  • 修改失败后,转发修改页面,提示错误信息
  1. 步骤3:编写service,完成修改

  1. 步骤1:点击修改按钮,显示修改表单
  • 1.1 在list.jsp页面中,编写修改按钮
<a href="${pageContext.request.contextPath}/user/upUI.action?uid=${user.uid}">修改</a>
  • 1.2 编程UserController显示jsp

@RequestMapping("/upUI")
public String upUI(String uid,Model model) {
User user = userService.selectById(uid);
model.addAttribute(“uid”,uid);
return “updata”;
}

  • 1.3 编写Service实现类

@Override
public User selectById(String uid) {
User user = userMapper.selectByPrimaryKey(uid);
return user;
}

  • 1.4 编写表单
<form action="${pageContext.request.contextPath}/user/updata.action" method="post">
    <input type="hidden" name="uid" value="${user.uid}">
    用户名:<input type="text" name="username" value="${user.username}"/><br/>
    密码:<input type="password" name="password" value="${user.password}"/><br/>
    昵称:<input type="text" name="name" value="${user.name}"/><br/>
    email:<input type="text" name="email" value="${user.email}"/><br/>
    电话:<input type="text" name="telephone" value="${user.telephone}"/><br/>
    <input type="submit" value="修改用户"/>
</form>


  1. 步骤2:编写controller,处理修改功能
  • 修改成功后,跳转到列表页面
  • 修改失败后,转发修改页面,提示错误信息

@RequestMapping("/updata")
public String updata(User user,Model model) {
System.out.println(user);
Boolean insert = userService.updata(user);
if (insert){
return “redirect:selectAll.action”;
}else {
model.addAttribute(“msg”,“修改失败”);
return “forward:/WEB-INF/pages/list.jsp”;
}
}

  1. 步骤3:编写service,完成修改

@Override
public Boolean updata(User user) {
int insert = userMapper.updateByPrimaryKey(user);
if (insert==1){
return true;
}else {
return false;
}
}

以上是关于❤️‍Spring全家桶从入门到大神--SpringMVC之SSM整合(用户-增删改查!)的主要内容,如果未能解决你的问题,请参考以下文章

❤️‍Spring全家桶从入门到大神--mvc 常见知识点

❤️‍Spring全家桶从入门到大神-- spring mvc 拦截器

❤️‍Spring全家桶从入门到大神--SpringMVC之SSM整合(用户-增删改查!)

※Spring全家桶从入门到X神-Eureka注册中心

※Spring全家桶从入门到X神--Ribbon负载均衡+源码分析

※Spring全家桶从入门到X神-微服务+远程调用(RestTemplate)