ssm整合

  • 前言
  • 一、 环境搭建
    • 1.1 数据库
    • 1.2、导入坐标
  • 二、 导入配置类
    • 2.1 mybatis 配置类
    • 2.2 Spring 配置类
    • 2.3 Spring MVC 配置类
    • 2.4 web启动配置类
    • 2.5 全局异常配置(异常处理器)
  • 三、查询所有
    • 3.1 需求:分页条件查询
    • 3.2 步骤
    • 3.3 实现
  • 四、添加用户
    • 4.1 需求:完成用户添加
    • 4.2 步骤
    • 4.3 实现
  • 五 、用户信息修改
    • 5.1 根据id查询用户详情
      • 5.1.1 需求:根据用户id查询用户详情
      • 5.1.2 步骤
      • 5.1.3 实现
    • 5.2 用户信息更新
      • 5.2.1 需求:完成用户修改
      • 5.2.2 步骤
      • 5.2.3 实现
  • 六、删除用户
    • 6.1 需求:完成用户删除
    • 6.2 步骤
    • 6.3 实现
  • 小结:
  • end

前言

  • 概述 : SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。
  • 需求:用户的增删改查
    • SSM:spring mvc 、spring、mybatis
    • view:jsp

一、 环境搭建

1.1 数据库

  • 项目名:day06_maven_ssm
  • 数据库:db_20211028
  • 表数据:
# 创建数据库
CREATE DATABASE db_20211028;
# 使用数据库
USE db_20211028;
# 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);

1.2、导入坐标

<packaging>war</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><!--声明不需要web.xml文件--><failOnMissingWebXml>false</failOnMissingWebXml></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.4.RELEASE</version></dependency><!-- 事务 --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.4.RELEASE</version></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.24</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.4</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><dependency><groupId>tk.mybatis</groupId><artifactId>mapper</artifactId><version>3.5.2</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>3.7.5</version></dependency><!--整合--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.5</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- mvc json --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.10.2</version></dependency><!--swagger2--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.7.0</version></dependency><!--文件上传--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency><!--jsp相关--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.10</version></dependency></dependencies>

二、 导入配置类

2.1 mybatis 配置类

public class MyBatisConfiguration {/*** 配置session工厂* @param dataSource* @return* @throws Exception*/@Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{//1 创建 factoryBeanSqlSessionFactoryBean 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*/@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){//1 创建MapperScannerConfigurer mapperScanner = new MapperScannerConfigurer();//2设置包mapperScanner.setBasePackage("com.czxy.ssm.mapper");return mapperScanner;}}

2.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("${jdbc.driver}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;/*** 配置数据源* @return*/@Beanpublic DataSource dataSource(){DruidDataSource druidDataSource = new DruidDataSource();druidDataSource.setDriverClassName(driver);druidDataSource.setUrl(url);druidDataSource.setUsername(username);druidDataSource.setPassword(password);return druidDataSource;}/*** 事务管理器* @param dataSource* @return*/@Beanpublic DataSourceTransactionManager txManager(DataSource dataSource){return new DataSourceTransactionManager(dataSource);}}

2.3 Spring MVC 配置类

@Configuration
@ComponentScan(basePackages={"com.czxy.ssm.controller","com.czxy.ssm.resolver"})
@EnableWebMvc
public class MvcConfiguration implements WebMvcConfigurer {/*** 视图解析器* @return*/@Overridepublic void configureViewResolvers(ViewResolverRegistry registry) {registry.jsp("/pages/",".jsp");}
}

2.4 web启动配置类

public class WebInitializer3 implements WebApplicationInitializer {@Overridepublic 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("/");       //RESTFul项目mvcServlet.setLoadOnStartup(2);  //tomcat启动时,执行servlet的初始化方法}
}

2.5 全局异常配置(异常处理器)

  • 编写自定义异常
  • 运行时异常:RuntimeException 【推荐】,并重新构造方法。不需要对该异常进行处理
  • com.czxy.ssm.exception.CustomException
public class CustomException extends RuntimeException {public CustomException() {super();}public CustomException(String message) {super(message);}public CustomException(String message, Throwable cause) {super(message, cause);}public CustomException(Throwable cause) {super(cause);}protected CustomException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}
  • 编写 GlobalExceptionResolver 类,用于处理所有异常
  • 编写 custom() 方法用于处理自定义异常
  • 编写 other()方法用于处理,除自定义异常之外的其他异常。
  • com.czxy.ssm.resolver.GlobalExceptionResolver
@ControllerAdvice
public class GlobalExceptionResolver {/*** 自定义异常处理器** @param ce* @param model* @return*/@ExceptionHandler(CustomException.class)public String custom(CustomException ce, Model model) {model.addAttribute("error", ce.getMessage());return "forward:/pages/error.jsp";}/*** 其他异常处理器** @param e* @param model* @return*/@ExceptionHandler(Exception.class)public String other(Exception e, Model model) {model.addAttribute("error",e.getMessage());return "forward:/pages/error.jsp";}
}
  • 异常展示页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>错误页面</title>
</head>
<body>
<span style="color: red; size: 30px">${error}</span>
</body>
</html>

三、查询所有

3.1 需求:分页条件查询

3.2 步骤

  • 1、编写javaBean (User)

    • 提供字段 和 表类对应
    • 添加mybatis相关注解
  • 2、编写mapper(UserMapper)
    • 继承通用mapper
  • 3、编写service(UserService、UserServiceImpl)
  • 4、编写controller(UserController)
    • 处理请求路径
    • 选择视图 list
  • 5、list.jsp页面展示

3.3 实现

  • 1、编写javaBean (User、UserVo)

    • 提供字段 和 表类对应
    • 添加mybatis相关注解
    • User
package com.czxy.ssm.domain;import org.springframework.format.annotation.DateTimeFormat;import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;/*** @Author: 小新* @Date: 2021-12-14 19:54*/
@Table(name = "user")
public class User {@Idprivate String uid;private String username;private String password;private String name;private String email;private String telephone;@DateTimeFormat(pattern = "yyyy-MM-dd")private Date birthday;private String sex;private Integer state;private String code;//getter、setter...
  • UserVo
package com.czxy.ssm.vo;/**
* @Author: 小新
* @Date: 2021-12-16 14:46
*/
public class UserVo {private String name;private String start;private String end;private Integer pageNum = 1;private Integer pageSize = 2;//getteer、setter...
}
  • 2、编写mapper(UserMapper)

    • 继承通用mapper
package com.czxy.ssm.mapper;import com.czxy.ssm.domain.User;
import tk.mybatis.mapper.common.Mapper;/**
* @Author: 小新
* @Date: 2021-12-14 19:57
*/
public interface UserMapper extends Mapper<User> {}
  • 3、编写service(UserService、UserServiceImpl)

    • UserService接口
package com.czxy.ssm.service;import com.czxy.ssm.domain.User;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageInfo;/**
* @Author: 小新
* @Date: 2021-12-14 19:57
*/
public interface UserService {/*** 查询所有* @return userVo*/PageInfo<User> selectAll(UserVo userVo);
}
  • 实现类UserServiceImpl
package com.czxy.ssm.service.impl;import com.czxy.ssm.domain.User;
import com.czxy.ssm.mapper.UserMapper;
import com.czxy.ssm.service.UserService;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;import javax.annotation.Resource;
import java.util.List;/*** @Author: 小新* @Date: 2021-12-14 19:58*/
@Service
@Transactional
public class UserServiceImpl implements UserService {@Resourceprivate UserMapper userMapper;@Overridepublic PageInfo<User> selectAll(UserVo userVo) {//1、拼凑条件Example example = new Example(User.class);Example.Criteria criteria = example.createCriteria();//2、查询条件//2.1 昵称if (userVo.getName() != null && !"".equals(userVo.getName())){criteria.andLike("name","%"+userVo.getName()+"%");}//2.2 开始生日时间if (userVo.getStart() != null && !"".equals(userVo.getStart())){criteria.andGreaterThanOrEqualTo("birthday",userVo.getStart() + " 00:00:00");}//2.3 结束生日时间if (userVo.getEnd() != null && !"".equals(userVo.getEnd())){criteria.andLessThanOrEqualTo("birthday",userVo.getEnd() + " 23:59:59");}//分页条件PageHelper.startPage(userVo.getPageNum(),userVo.getPageSize());//3、查询List<User> list = userMapper.selectByExample(example);//4、关联查询//5、封装分页数据PageInfo<User> pageInfo = new PageInfo<>(list);return  pageInfo;}
}
  • 4、编写controller(UserController)

    • 处理请求路径
    • 选择视图 list
package com.czxy.ssm.controller;import com.czxy.ssm.domain.User;
import com.czxy.ssm.service.UserService;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;import javax.annotation.Resource;/**
* @Author: 小新
* @Date: 2021-12-14 19:59
*/
@Controller
@RequestMapping("/user")
public class UserController {@Resourceprivate UserService userService;/*** 查询所有* @param model* @return*/@RequestMapping("/selectAll")public String selectAll(UserVo userVo , Model model){// 查询所有PageInfo<User> pageInfo = userService.selectAll(userVo);// 将查询结果 、 查询条件 存放request --> 模型model.addAttribute("pageInfo",pageInfo);model.addAttribute("userVo",userVo);// 设置视图名return "list";}
}
  • 5、list.jsp页面展示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head><title>列表页面</title><script type="text/javascript">//pageSizefunction change(obj) {//重置 :如果修改了pageSize 从第1页开始pageNumId.value = 1;//改变pageSize//在js中调用id名时 底层默认执行document.getElementById("pageSize")//document.getElementById("pageSize").value = obj.value;  ==  pageSize.value = obj.value;pageSize.value = obj.value;//提交表单//var myForm = document.getElementById("myForm");myForm.submit();}//pageNumfunction page(pageNum) {pageNumId.value = pageNum;//var myForm = document.getElementById("myForm");myForm.submit();}</script>
</head>
<body><!--错误信息展示-->
<font color="red" size="30">${error}</font>
<a href="${pageContext.request.contextPath}/pages/add.jsp">添加</a><!--查询条件--><form id="myForm" action="${pageContext.request.contextPath}/user/selectAll.action" method="post"><!--分页参数--><input type="hidden" id="pageNumId" name="pageNum" value="${pageInfo.pageNum}"><input type="hidden" id="pageSize" name="pageSize" value="${pageInfo.pageSize}">昵称 : <input type="text" name="name" placeholder="请输入昵称" value="${userVo.name}">生日 : <input type="text" name="start" placeholder="请输入开始生日" value="${userVo.start}"><input type="text" name="end" placeholder="请输入结束的生日" value="${userVo.end}"><input type="submit" value="查询"></form><!--列表展示--><table border="1" cellspacing="0"><tr><td>编号</td><td>登录名</td><td>密码</td><td>姓名</td><td>邮件</td><td>手机号</td><td>生日</td><td>性别</td><td>状态</td><td>规范</td><td>操作</td></tr><c:forEach items="${pageInfo.list}" var="user"><tr><td><input type="text" name="uid" value="${user.uid}"></td><td><input type="text" name="username" value="${user.username}"></td><td><input type="password" name="password" value="${user.password}"></td><td><input type="text" name="name" value="${user.name}"></td><td><input type="text" name="email" value="${user.email}"></td><td><input type="text" name="telephone" value="${user.telephone}"></td><td><fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd" var="birthday"></fmt:formatDate><input type="text" name="birthday" value="${birthday}"></td><td><input type="checkbox" name="sex" value="男" ${user.sex == "男" ? "checked" : ""}>男<input type="checkbox" name="sex" value="女" ${user.sex == "女" ? "checked" : ""}>女</td><td><input type="text" name="state" value="${user.state}"></td><td><input type="text" name="code" value="${user.code}"></td><td><a href="${pageContext.request.contextPath}/user/delete.action?uid=${user.uid}" name="delete">删除</a><a href="${pageContext.request.contextPath}/user/selectById.action?uid=${user.uid}" name="update">修改</a></td></tr></c:forEach></table><!--分页条-->当前第${pageInfo.pageNum}页,每页显示<select  οnchange="change(this)"><option ${pageInfo.pageSize == 1 ? 'selected' : ''} value="1">1</option><option ${pageInfo.pageSize == 2 ? 'selected' : ''} value="2">2</option><option ${pageInfo.pageSize == 5 ? 'selected' : ''} value="5">5</option><option ${pageInfo.pageSize == 10 ? 'selected' : ''} value="10">10</option></select>条,<!--第一页不显示上一页和首页--><c:if test="${pageInfo.pageNum > 1}"><a href="javascript:void(0)" οnclick="page(1)">首页</a><a href="javascript:void(0)" οnclick="page(${pageInfo.pageNum - 1})">上一页</a></c:if><!--分页列表--><c:forEach begin="1" end="${pageInfo.pages}"  var="num"><a href="javascript:void(0)" οnclick="page(${num})">${num}</a></c:forEach><!--最后一页不显示下一页和尾页--><c:if test="${pageInfo.pageNum < pageInfo.pages}"><a href="javascript:void(0)" οnclick="page(${pageInfo.pageNum + 1})">下一页</a><a href="javascript:void(0)" οnclick="page(${pageInfo.pages})">尾页</a></c:if></body>
</html>
  • 效果展示

四、添加用户

4.1 需求:完成用户添加

4.2 步骤

  • 1、点击添加按钮,跳转到添加页面。

    • 列表页面,编写添加按钮。
    • 编写添加页面
  • 2、编写controller ,处理添加功能。
    • 添加成功: 跳转到列表页面。
    • 添加失败:跳转到添加页面,提示错误信息。
  • 3、编写service 完成添加。

4.3 实现

  • 1、点击添加按钮,跳转到添加页面。
  • 列表页面,编写添加按钮。
<a href="${pageContext.request.contextPath}/pages/add.jsp">添加</a>
  • 编写添加页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>添加</title>
</head>
<body>
<font color="#ffc0cb" size="30">${error}</font>
<form action="${pageContext.request.contextPath}/user/add.action" method="post">编号:<input type="text" name="uid" /> <br/>用户名:<input type="text" name="username" /> <br/>密码:<input type="password" name="password" /> <br/>昵称:<input type="text" name="name" /> <br/>电子邮箱:<input type="email" name="email" /> <br/>电话:<input type="text" name="telephone" /> <br/>生日:<input type="date" name="birthday" /> <br/>性别:<input type="radio" name="sex" value="男"/> 男<input type="radio" name="sex" value="女"/>女<br/>状态:<input type="text" name="state" /> <br/>激活码:<input type="text" name="code" /> <br/><input type="submit" value="添加用户"/>
</form>
</body>
</html>
  • 2、编写controller ,处理添加功能。

    • 添加成功: 跳转到列表页面。
    • 添加失败:跳转到添加页面,提示错误信息。
package com.czxy.ssm.controller;import com.czxy.ssm.domain.User;
import com.czxy.ssm.service.UserService;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;import javax.annotation.Resource;/**
* @Author: 小新
* @Date: 2021-12-14 19:59
*/
@Controller
@RequestMapping("/user")
public class UserController {@Resourceprivate UserService userService;/*** 添加* @param user* @param model* @return*/@RequestMapping("/add")public String add(User user, Model model){Boolean result = userService.insert(user);if (result){//添加成功return "redirect:/user/selectAll.action";}else{//添加失败model.addAttribute("error","添加失败");return "add";}}
  • 3、编写service 完成添加。

    • UserService接口
package com.czxy.ssm.service;import com.czxy.ssm.domain.User;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageInfo;/**
* @Author: 小新
* @Date: 2021-12-14 19:57
*/
public interface UserService {/*** 添加* @param user* @return*/Boolean insert(User user);
}
  • UserServicec 实现类
package com.czxy.ssm.service.impl;import com.czxy.ssm.domain.User;
import com.czxy.ssm.mapper.UserMapper;
import com.czxy.ssm.service.UserService;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;import javax.annotation.Resource;
import java.util.List;/*** @Author: 小新* @Date: 2021-12-14 19:58*/
@Service
@Transactional
public class UserServiceImpl implements UserService {@Resourceprivate UserMapper userMapper;@Overridepublic Boolean insert(User user) {int result = userMapper.insert(user);return result == 1;}
}
  • 添加页面展示
  • 结果展示

五 、用户信息修改

5.1 根据id查询用户详情

5.1.1 需求:根据用户id查询用户详情

5.1.2 步骤

  • 1、点击修改按钮 ,执行selectById方法。

    • 列表页面,编写修改按钮。
    • 编写编辑页面。
  • 2、编写controller , 处理根据id查询功能。
    • 查询完成,跳转到编辑页面 并进行用户信息回显。
  • 3、编写service,完成根据id查询。

5.1.3 实现

  • 1、点击修改按钮 ,执行selectById方法。
  • 列表页面,编写修改按钮。
<a href="${pageContext.request.contextPath}/user/selectById.action?uid=${user.uid}" name="update">修改</a>
  • 编写编辑页面。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head><title>编辑</title>
</head>
<body>
<font color="pink" size="30">${error}</font>
<form action="${pageContext.request.contextPath}/user/update.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/>电子邮箱:<input type="email" name="email" value="${user.email}"/> <br/>电话:<input type="text" name="telephone" value="${user.telephone}"/> <br/><fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd" var="birthday"></fmt:formatDate>生日:<input type="date" name="birthday" value="${birthday}"/> <br/>性别:<input type="radio" name="sex" value="男" ${user.sex == "男" ? "checked" : ""}/> 男<input type="radio" name="sex" value="女" ${user.sex == "女" ? "checked" : ""}/>女<br/>状态:<input type="text" name="state" value="${user.state}"/> <br/>激活码:<input type="text" name="code" value="${user.code}"/> <br/><input type="submit" value="修改"/>
</form>
</body>
</html>
  • 2、编写controller , 处理根据id查询功能。

    • 查询完成,跳转到编辑页面 并进行用户信息回显。
package com.czxy.ssm.controller;import com.czxy.ssm.domain.User;
import com.czxy.ssm.service.UserService;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import javax.annotation.Resource;/*** @Author: 小新* @Date: 2021-12-14 19:59*/
@Controller
@RequestMapping("/user")
public class UserController {@Resourceprivate UserService userService;/*** 根据id查询详情* 编辑前* @param uid* @param model* @return*/@RequestMapping("/selectById")public String selectById(String uid , Model model){User user = userService.selectById(uid);if (user == null){return "list";}else{model.addAttribute("user",user);return "update";}}
}
  • 3、编写service,完成根据id查询。
  • UserService 接口
package com.czxy.ssm.service;import com.czxy.ssm.domain.User;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageInfo;/*** @Author: 小新* @Date: 2021-12-14 19:57*/
public interface UserService {/*** 根据id查询详情* 更新前回显* @param uid* @return*/User selectById(String uid);
}
  • service 实现类
package com.czxy.ssm.service.impl;import com.czxy.ssm.domain.User;
import com.czxy.ssm.mapper.UserMapper;
import com.czxy.ssm.service.UserService;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;import javax.annotation.Resource;
import java.util.List;/*** @Author: 小新* @Date: 2021-12-14 19:58*/
@Service
@Transactional
public class UserServiceImpl implements UserService {@Resourceprivate UserMapper userMapper;@Overridepublic User selectById(String uid) {return userMapper.selectByPrimaryKey(uid);}
}
  • 结果演示

5.2 用户信息更新

5.2.1 需求:完成用户修改

5.2.2 步骤

  • 1、点击修改按钮、提交表单。
  • 2、编写controller ,处理更新功能。
    • 更新成功:跳转列表页面。
    • 更新失败:跳转修改页面,进行错误信息提示。
  • 3、编写service,完成更新。

5.2.3 实现

  • 1、点击修改按钮、提交表单。
  • 2、编写controller ,处理更新功能。
    • 更新成功:跳转列表页面。
    • 更新失败:跳转修改页面,进行错误信息提示。
package com.czxy.ssm.controller;import com.czxy.ssm.domain.User;
import com.czxy.ssm.service.UserService;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import javax.annotation.Resource;/**
* @Author: 小新
* @Date: 2021-12-14 19:59
*/
@Controller
@RequestMapping("/user")
public class UserController {@Resourceprivate UserService userService;/*** 修改* @param user* @param model* @return*/@RequestMapping("/update")public String update(User user , Model model){Boolean result = userService.update(user);if (result){//修改成功return "redirect:/user/selectAll.action";}else{//修改失败model.addAttribute("error","修改失败");return "update";}}
}
  • 3、编写service,完成更新。
  • service 接口
package com.czxy.ssm.service;import com.czxy.ssm.domain.User;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageInfo;/*** @Author: 小新* @Date: 2021-12-14 19:57*/
public interface UserService {/*** 更新* @param user* @return*/Boolean update(User user);
}
  • service 实现类
package com.czxy.ssm.service.impl;import com.czxy.ssm.domain.User;
import com.czxy.ssm.mapper.UserMapper;
import com.czxy.ssm.service.UserService;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;import javax.annotation.Resource;
import java.util.List;/*** @Author: 小新* @Date: 2021-12-14 19:58*/
@Service
@Transactional
public class UserServiceImpl implements UserService {@Resourceprivate UserMapper userMapper;@Overridepublic Boolean update(User user) {int update = userMapper.updateByPrimaryKey(user);return update == 1;}
}

六、删除用户

6.1 需求:完成用户删除

6.2 步骤

  • 1、点击删除按钮 ,绑定onclick事件,提示用户是否删除
  • 2、编写controller,处理删除功能
    • 删除成功: 跳转到列表页面。
    • 删除失败:跳转到列表页面并进行错误信息提示
  • 3、编写service,完成删除。

6.3 实现

  • 1、点击删除按钮 ,绑定onclick事件,提示用户是否删除
  <a href="${pageContext.request.contextPath}/user/delete.action?uid=${user.uid}" name="delete" οnclick="return confirm('您是否要删除?')">删除</a>
  • 2、编写controller,处理删除功能

    • 删除成功: 跳转到列表页面。
    • 删除失败:跳转到列表页面并进行错误信息提示
package com.czxy.ssm.controller;import com.czxy.ssm.domain.User;
import com.czxy.ssm.service.UserService;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import javax.annotation.Resource;/**
* @Author: 小新
* @Date: 2021-12-14 19:59
*/
@Controller
@RequestMapping("/user")
public class UserController {@Resourceprivate UserService userService;/*** 删除* @param uid* @return*/@RequestMapping("/delete")public String delete(String uid, Model model){Boolean result = userService.delete(uid);if (result){//删除成功return "redirect:/user/selectAll.action";}else{//删除失败model.addAttribute("error","删除失败");return "list";}}
}
  • 3、编写service,完成删除。
  • service 接口
package com.czxy.ssm.service;import com.czxy.ssm.domain.User;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageInfo;/*** @Author: 小新* @Date: 2021-12-14 19:57*/
public interface UserService {/*** 删除* @param uid* @return*/Boolean delete(String uid);
}
  • service 实现类
package com.czxy.ssm.service.impl;import com.czxy.ssm.domain.User;
import com.czxy.ssm.mapper.UserMapper;
import com.czxy.ssm.service.UserService;
import com.czxy.ssm.vo.UserVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;import javax.annotation.Resource;
import java.util.List;/*** @Author: 小新* @Date: 2021-12-14 19:58*/
@Service
@Transactional
public class UserServiceImpl implements UserService {@Resourceprivate UserMapper userMapper;@Overridepublic Boolean delete(String uid) {int result = userMapper.deleteByPrimaryKey(uid);return result == 1;}
}

小结:

ps:小编把项目放在了百度网盘,有需要的可以拿走
链接:https://pan.baidu.com/s/1uaIN_mqygZCY3_efwmL59w
提取码:7264

end

ssm(Spring+SpringMVC+MyBatis)整合: ums相关推荐

  1. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一) 1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee ...

  2. Spring+SpringMVC+MyBatis整合基础篇

    基础篇 Spring+SpringMVC+MyBatis+easyUI整合基础篇(一)项目简介 Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试 Spring+S ...

  3. Spring+SpringMVC +MyBatis整合配置文件案例66666

    Spring+SpringMVC +MyBatis整合配置文件案例 标签: springspringmvcmybatismvcjava 2017-04-13 19:12 228人阅读 评论(1) 收藏 ...

  4. Java语言开发在线购物推荐网 购物商城推荐系统 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线购物推荐网 购物商城推荐系统 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)开发框架 大数据.人工智能.机器学习项目开发ShopRec ...

  5. Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户、项目、聚类、混合的协同过滤推荐算法WebShopRSMEx 源代码下载

    Java+SSM(Spring+SpringMVC+Mybatis)个性化购物商城推荐系统 电子商务推荐系统 基于用户.项目.聚类.混合的协同过滤推荐算法WebShopRSMEx 源代码下载 一.项目 ...

  6. Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...

  7. 使用Java+SSM(Spring+SpringMVC+Mybatis)如何开发个性化音乐推荐系统 在线音乐推荐网站 基于用户、项目的协同过滤推荐算法实现MusicRecommendSystemWeb

    使用Java+SSM(Spring+SpringMVC+Mybatis)如何开发个性化音乐推荐系统 在线音乐推荐网站 基于用户.项目的协同过滤推荐算法实现MusicRecommendSystemWeb ...

  8. 如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤、内容、聚类、关联规则推荐算法实现WebNewsRSMEx

    如何使用Java+SSM(Spring+SpringMVC+Mybatis)开发个性化新闻推荐系统 在线新闻推荐系统 基于用户项目协同过滤.内容.聚类.关联规则推荐算法实现WebNewsRSMEx 一 ...

  9. 使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户、物品的协同过滤推荐算法实现 大数据、人工智能、机器学习项目开发

    使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户.物品的协同过滤推荐算法实现 大数据.人工智能.机器学习项目开发Fo ...

  10. Springboot+ssm(Spring+SpringMVC+MyBatis)旧物置换网站

    目  录 摘  要    I 目  录    III 第1章 概述    1 1.1 研究背景    1 1.2 研究现状    1 1.3 研究内容    2 第二章 开发技术介绍    2 2.1 ...

最新文章

  1. 编译 ORB_SLAM2 (一)
  2. python数组转换为列表_python - 将一系列数组转换为单个列表 - SO中文参考 - www.soinside.com...
  3. B-JUI(Best jQuery UI) 前端框架
  4. 知识图谱学习笔记-命名实体识别
  5. Objective-c 字符串的拼接
  6. linux中exit和fatal区别,关于Linux系统命令中exit与exit的区别
  7. pytorch保存模型运行时状态,记录点checkpoint
  8. es怎么返回全部查询结果_es的返回数据结构
  9. mysql服务器失败1396_MYSQL ERROR 1396 (HY000) 错误的解决办法
  10. oracle euk 什么系统,【T】每日一生信--interproscan安装及使用(终结版)
  11. 优秀程序员必备技能大全
  12. SqlServer中获取字符串中的数字部分
  13. 零基础多久能学会python_零基础小白多久能学会python
  14. 学习iOS从object-c开始-语法(一)
  15. #pragma once用法总结
  16. 获取微信公众号文章内容
  17. Bagging...
  18. CleanMyMac2023Mac下载排行最好的清理工具
  19. FPGA自学11——以太网通信
  20. Ubuntu 16.04下装ROS Kinetic问题若干、安装后首次运行

热门文章

  1. 2019ICS大作业
  2. 帮我描述下寒冷的冬天,要求3000字
  3. 五一出行必备的蓝牙耳机:续航高佩戴舒适的蓝牙耳机推荐
  4. 使用Scratch制作弹球游戏(3)
  5. JavaScript图片廊——实现点击小图片栏显示大图
  6. 1. Mysql InnoDB中的索引
  7. QML中的Imports声明
  8. 计及绿证交易和综合需求响应的综合能源系统优化调度 使用了优化算法来求解最优解,通过调整各种能源的分配和利用方式,使得总成本最小化
  9. 550万欧元!荷兰光量子计算公司QuiX获得新融资
  10. Python画多边形(for循环)