我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SSM(Spring-Mybatis-SpringMVC)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SSM(Spring-Mybatis-SpringMVC)

文章目录

1. 介绍

1.1 概念介绍

SSM项目是指基于Spring+SpringMVC+MyBatis框架搭建的Java Web项目。

  • Spring是负责管理和组织项目的IOC容器和AOP功能
  • SpringMVC是一个轻量级的MVC框架,用于处理Web请求和响应
  • MyBatis是一种持久化框架,用于进行数据库操作的ORM框架。

学习笔记:
Spring:https://blog.csdn.net/meini32/article/details/132474555
SpringMVC:https://blog.csdn.net/meini32/article/details/132545058
Mybatis:https://blog.csdn.net/meini32/article/details/132068955
Mybatis商品增删改查案例:https://blog.csdn.net/meini32/article/details/132095237

2 SSM整合框架

关键内容

Spring

  • SpringConfig

SpringMVC

  • SpringMvcConfig
  • ServletConfig

Mybatis

  • MyBatisConfig
  • JdbcConfig
  • jdbc.properties

MyBatis
jdbc.properties

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/db1jdbc.username=rootjdbc.password=123456
package com.it.config;import javax.sql.DataSource;import com.alibaba.druid.pool.DruidDataSource;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;//jdbcConfigpublic class jdbcConfig {    @Value("${jdbc.driver}")    private String driver;    @Value("${jdbc.url}")    private String url;    @Value("${jdbc.username}")    private String username;    @Value("${jdbc.password}")    private String password;    //数据源    @Bean    public DataSource dataSource(){        DruidDataSource druidDataSource = new DruidDataSource();        druidDataSource.setDriverClassName(driver);        druidDataSource.setUrl(url);        druidDataSource.setUsername(username);        druidDataSource.setPassword(password);        return druidDataSource;    }}-----------------------------------------------------package com.it.config;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.mapper.MapperScannerConfigurer;import org.springframework.context.annotation.Bean;import javax.sql.DataSource;//MyBatisConfigpublic class MybatisConfig {    //创建和管理数据库会话    @Bean    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();        factoryBean.setDataSource(dataSource);        factoryBean.setTypeAliasesPackage("com.it.domain");        return factoryBean;    }    @Bean    //创建并配置MapperScannerConfigurer对象    public MapperScannerConfigurer mapperScannerConfigurer(){        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();        mapperScannerConfigurer.setBasePackage("com.it.dao");        return mapperScannerConfigurer;    }}

web容器配置类

SpringMVC

  • SpringMvcConfig
  • ServletConfig
//ServletConfig@Configurationpublic class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {    @Override    protected Class<?>[] getRootConfigClasses() {        return new Class[]{SpringConfig.class};    }    @Override    protected Class<?>[] getServletConfigClasses() {        return new Class[]{SpringMvcConfig.class};    }    @Override    protected String[] getServletMappings() {        return new String[]{"/"};    }}----------------------------------------------------------------------//SpringMvcConfig@Configuration@ComponentScan("com.it.controller")@EnableWebMvcpublic class SpringMvcConfig {}

Spring

  • SpringConfig
//整合Spring应用程序,实现对组件和属性的管理和使用@Configuration@ComponentScan({"com.it.service"})@PropertySource("jdbc.properties")@Import({jdbcConfig.class, MybatisConfig.class})public class SpringConfig {}

3. SSM功能模块开发

内容

  • 表与实体类;
  • dao(接口+自动代理)
  • service(接口+实现类)
  • controller

在这里插入图片描述

添加相关依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0modelVersion>  <groupId>org.examplegroupId>  <artifactId>spring-ssmartifactId>  <packaging>warpackaging>  <version>1.0-SNAPSHOTversion>  <dependencies>    <dependency>      <groupId>org.springframeworkgroupId>      <artifactId>spring-webmvcartifactId>      <version>5.2.9.RELEASEversion>    dependency>    <dependency>      <groupId>com.fasterxml.jackson.coregroupId>      <artifactId>jackson-databindartifactId>      <version>2.9.0version>    dependency>    <dependency>      <groupId>org.mybatisgroupId>      <artifactId>mybatisartifactId>      <version>3.5.5version>    dependency>    <dependency>      <groupId>org.mybatisgroupId>      <artifactId>mybatis-springartifactId>      <version>1.3.0version>    dependency>    <dependency>      <groupId>mysqlgroupId>      <artifactId>mysql-connector-javaartifactId>      <version>5.1.32version>    dependency>    <dependency>      <groupId>org.springframeworkgroupId>      <artifactId>spring-jdbcartifactId>      <version>5.3.13version>    dependency>    <dependency>      <groupId>org.springframeworkgroupId>      <artifactId>spring-testartifactId>      <version>5.3.13version>    dependency>    <dependency>      <groupId>com.alibabagroupId>      <artifactId>druidartifactId>      <version>1.2.6version>    dependency>    <dependency>      <groupId>org.projectlombokgroupId>      <artifactId>lombokartifactId>      <version>1.18.28version>    dependency>    <dependency>      <groupId>javax.servletgroupId>      <artifactId>javax.servlet-apiartifactId>      <version>3.1.0version>      <scope>providedscope>    dependency>  dependencies>  <build>    <plugins>      <plugin>        <groupId>org.apache.tomcat.mavengroupId>        <artifactId>tomcat7-maven-pluginartifactId>        <version>2.2version>        <configuration>          <port>81port>          <path>path>        configuration>      plugin>    plugins>  build>project>
import lombok.Data;@Datapublic class User {    private int id;    private String username;    private String password;}------------------------------------------------------------------------package com.it.dao;import com.it.domain.User;import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import java.util.List;//用户增删改查接口public interface UserDao {    @Insert("INSERT INTO tb_user values (null,#{name},#{password}}})")    public void save(User user);    @Update("UPDATE tb_user set name=#{id},password=#{password} where id=#{id}}")    public void update(User user);    @Delete("DELETE from tb_user where id = #{id}}")    public void delete(Integer id);    @Select("SELECT * FROM tb_user")    public List<User> selectAll();    @Select("SELECT * FROM tb_user WHERE id=#{id}")    public User selectById(Integer id);}----------------------------------------------------------------------package com.it.service;import com.it.domain.User;import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import java.util.List;public interface UserService {        public boolean save(User user);        public boolean update(User user);        public boolean delete(Integer id);        public List<User> selectAll();        public User selectById(Integer id);}---------------------------------------------------------------------------package com.it.service.impl;import com.it.dao.UserDao;import com.it.domain.User;import com.it.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class UserServiceImpl implements UserService {    @Autowired //自动装配    private UserDao userDao;    public boolean save(User user) {        userDao.save(user);        return true;    }    public boolean update(User user) {        userDao.update(user);        return true;    }    public boolean delete(Integer id) {        userDao.delete(id);        return true;    }    public List<User> selectAll() {        return userDao.selectAll();    }    public User selectById(Integer id) {        return userDao.selectById(id);    }}------------------------------------------------------------------------package com.it.controller;import com.it.domain.User;import com.it.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;@RestController@RequestMapping("/user")public class UserController {    @Autowired    private UserService userService;    @PostMapping    public boolean save(@RequestBody User user) {        return userService.save(user);    }    @PutMapping    public boolean update(@RequestBody User user) {        return userService.update(user);    }    @DeleteMapping("/{id}")    public boolean delete(@PathVariable Integer id) {        System.out.println(userService.delete(id));        return userService.delete(id);    }    @GetMapping    public List<User> selectAll() {        System.out.println(userService.selectAll());        return userService.selectAll();    }    @GetMapping("/{id}")    public User selectById(@PathVariable Integer id) {        return userService.selectById(id);    }}

4 测试

4.1 业务层接口测试

在这里插入图片描述

4.2 表现层接口测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.优化 -表现层数据封装

  • 前端接受数据格式封装到code属性用于区分操作
  • 将特殊消息封装到message(msg)属性中
public class Result{private Object data;private Integer code;private String msg;}
package com.it.controller;public class Code {    //成功    public static final Integer SAVE_OK = 20011;    public static final Integer DELETE_OK = 20021;    public static final Integer UPDATE_OK = 20031;    public static final Integer GET_OK = 20041;    public static final Integer PUT_OK = 20051;    //失败    public static final Integer SAVE_ERR = 20010;    public static final Integer DELETE_ERR = 20020;    public static final Integer UPDATE_ERR = 20030;    public static final Integer GET_ERR = 20040;    public static final Integer PUT_ERR = 20050;}----------------------------------------------------------------------------package com.it.controller;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Datapublic class Result {    private Object data;    private Integer code;    private String msg;    public Result(Integer code, String msg) {        this.code = code;        this.msg = msg;    }    public Result(Object data, Integer code) {        this.data = data;        this.code = code;    }    public Result(Object data, Integer code, String msg) {        this.data = data;        this.code = code;        this.msg = msg;    }}---------------------------------------------------------------------------import java.util.List;@RestController@RequestMapping("/user")public class UserController {    @Autowired    private UserService userService;    @PostMapping    public Result save(@RequestBody User user) {        boolean save = userService.save(user);        return new Result(save,save?Code.SAVE_OK:Code.SAVE_ERR);    }

在这里插入图片描述

6.异常处理

出现异常位置及原因

  • 框架内部抛出异常:不合规使用
  • 数据层抛出异常:外边服务器故障(超时访问)
  • 业务层抛出异常:业务逻辑书写错误(遍历业务书写操作等)
  • 表现层抛出异常:数据收集、校验等规则导致
  • 工具类抛出异常:工具书写不严谨不健壮

项目异常分类

  1. 业务异常
    • 原因:用户行为导致
    • 解决:发送相应的信息传递给用户,提醒规范操作。
  2. 系统异常
    • 原因:项目运行时可预计但无法避免的异常
    • 解决:发送固定消息安抚用户;发送消息给处理人员;记录日志;
  3. 其他异常
    • 原因:未预期的异常
    • 解决:同上

解决:集中统一处理项目中出现的异常(异常处理器

@RestControllerAdvice
作用:为Rest风格开发的控制器类做增强
.
@ExceptionHandler
作用:位于方法上方,设置指定异常处理方案,出现异常后终止原始控制器,转入当前方法执行。

package com.it.controller;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class ProjectExceptionAdvice {    @ExceptionHandler(Exception.class)    public Result doException(Exception e){        System.out.println("出现异常");        return new Result(500,"出错");    }}

步骤

  1. 自定义项目系统级异常
  2. 自定义业务级异常;
  3. 自定义异常编码;
  4. 触发自定义异常(模拟异常操作);
  5. 拦截异常并处理异常;
  6. 测试结果
package com.it.controller;import lombok.Data;//自定义项目级异常@Datapublic class SystemException extends RuntimeException{    private Integer code;    public SystemException(String message, Throwable cause, Integer code) {        super(message);        this.code = code;    }        }
package com.it.controller;import lombok.Data;//自定义项目业务级异常@Datapublic class BusinessException extends RuntimeException{    private Integer code;    public BusinessException(String message, Integer code) {        super(message);        this.code = code;    }    public BusinessException(String message, Throwable cause, Integer code) {        super(message,cause);        this.code = code;    }}
//异常编码    public static final Integer SYSTEM_UNKNOW_ERROR = 50001;    public static final Integer SYSTEM_TIMEOUT_ERROR = 50002;    public static final Integer PROJECT_VALIDATE_ERROR = 60001;    public static final Integer PROJECT_BUSINESS_ERROR = 60002;
package com.it.service.impl;import com.it.controller.BusinessException;import com.it.controller.Code;import com.it.dao.UserDao;import com.it.domain.User;import com.it.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class UserServiceImpl implements UserService {    @Autowired //自动装配    private UserDao userDao;       //自定义异常    public User selectById(Integer id) {        if(id<0){            throw new BusinessException("请输入正确的id",Code.PROJECT_BUSINESS_ERROR);        }        return userDao.selectById(id);    }}
package com.it.controller;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.bind.annotation.RestControllerAdvice;//拦截并处理异常@RestControllerAdvicepublic class ProjectExceptionAdvice {    @ExceptionHandler(Exception.class)    public Result doException(Exception e){        System.out.println("出现异常");        return new Result(500,"出错");    }    @ExceptionHandler(BusinessException.class)    public Result doBussinessException(Exception e){        System.out.println("出现业务异常");        return new Result(501,null,"出错");    }    @ExceptionHandler(SystemException.class)    public Result doSystemException(Exception e){        System.out.println("出现系统异常");        return new Result(500,"出错");    }}

测试结果
在这里插入图片描述
在这里插入图片描述

来源地址:https://blog.csdn.net/meini32/article/details/132569931

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SSM(Spring-Mybatis-SpringMVC)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SSM(Spring+SpringMVC+Mybatis)框架整合

1、数据准备SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `admin`-- ----------------------------DROP TA
SSM(Spring+SpringMVC+Mybatis)框架整合
2014-11-03

SSM框架整合(Spring+SpringMVC+MyBatis)

【SSM的系统架构】【整合概述】第一步:  MyBatis和Spring整合,通过Spring管理mapper接口。  使用mapper的扫描器自动扫描mapper接口在Spring中进行注册。第二步:  通过Spring管理Service
2023-06-03

Spring+SpringMVC+MyBatis整合详细教程(SSM)

使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。之前没有记录SSM整合的过程,这次刚刚好基于自己的一个小项目重
2023-05-31

SSM框架整合之Spring+SpringMVC+MyBatis的示例分析

这篇文章主要介绍了SSM框架整合之Spring+SpringMVC+MyBatis的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、基本概念1.1、SpringSp
2023-06-15

Spring整合mybatis、springMVC总结

这篇文章主要为大家详细介绍了Java整合Mybatis,SpringMVC,文中有详细的代码示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
2023-05-18

spring cloud + spring boot + springmvc+mybatis微服务云架构

做一个微服务架构需要的技术整理:了解springcloud架构可以加求求:三五三六二四七二五九View: H5、Vue.js、Spring Tag、React、angularJsSpring Boot/Spring Cloud:Zuul、R
2023-06-05

springmvc+spring+mybatis实现用户登录功能(上)

由于本人愚钝,整合ssm框架真是费劲了全身的力气,所以打算写下这篇文章,一来是对整个过程进行一个回顾,二来是方便有像我一样的笨鸟看过这篇文章后对其有所帮助,如果本文中有不对的地方,也请大神们指教。一、代码结构整个项目的代码结构如图所示: c
2023-05-31

如何使用Maven搭建SpringMVC+Spring+MyBatis框架

这篇文章主要介绍如何使用Maven搭建SpringMVC+Spring+MyBatis框架,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级
2023-05-30

使用spring如何实现springmvc与mybatis进行整合

使用spring如何实现springmvc与mybatis进行整合?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.jar包 2.引入web.xml文件
2023-05-31

使用Spring如何搭建一个SpringMVC与MyBatis环境

这篇文章将为大家详细讲解有关使用Spring如何搭建一个SpringMVC与MyBatis环境,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.对原生态jdbc程序中问题总结1.1 jdbc
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录