SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(1)

简介: SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】

前言

       昨天拿到了第一份实习 offer,无奈牛魔学院不让走,导员说学校的实训(装个hadoop环境都得两三天的课程)比实习强多了,没办法,我只能心里说“汝之顶患疾久矣,莫如粪”,然后和导员笑着说说“好的呢”,其实心里万马奔腾。也是没有办法,country让促进就业、大力xxx、全力、三步走、六个抓牢、七个推进、就业加速度 ... 都是扯淡,下面的领导们才不关心你就不就业,搬砖还是吃土。

1、SSM 整合

1.1、总览

SSM 整合

  • Spring
  • SpringConfig
  • Mybatis
  • MybatisConfig
  • JdbcConfig
  • jdbc.properties
  • SpringMVC
  • ServletConfig
  • SpringMvcConfig

功能模块

  • 表与实体类
  • dao(接口 + 自动代理)
  • service(接口 + 实现类)
  • 业务层接口测试(整合 JUnit)
  • controller
  • 表现层接口测试(PostMan)

1.2、Spring 整合 Mybatis

1.2.1、Spring 配置类

这里先设置 Spring 负责管理的 Bean 路径

@Configuration
@ComponentScan({"com.lyh.service"})
@PropertySource("jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
public class SpringConfig {
}

这里的 jdbc.properties 是为了整合 Mybatis 用的:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_db
jdbc.username=root
jdbc.password=Yan1029.

       如果报错:Could not open ServletContext resource [/jdbc.properties] 就替换为 @PropertySource("classpath:jdbc.properties")

1.2.2、Jdbc 配置类

public 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 dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

1.2.3、Mybatis 配置类

       这里需要写两个方法,分别负责返回 Mybatis 创建连接对象的工厂和设置 Mybatis 的 Mapper 扫描包(Mapper 接口所在的包)。

public class MybatisConfig {
 
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("com.lyh.domain");
        return factoryBean;
    }
 
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.lyh.dao");
        return msc;
    }
 
}

1.2.4、事务处理

1、首先在 JdbcConfig 中添加事务管理器

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

2、然后在 SpringConfig 中启用事务

3、最后在 BookService 设置事务注解

@Transactional
public interface BookService {
    //...
}

1.3、Spring 整合 SpringMVC

1.3.1、Servlet 容器配置类

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
 
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
 
    // Web 容器加载的是 SpringMVC 的配置类
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
 
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
 
    // 中文乱码处理
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

       注意这里 getRootConfigClass 和 getServletConfigClass 造出来的容器对象不是同一个容器对象。但是 SpringMVC 的容器可以访问 Spring 的容器,但是 Spring 的容器不能访问 SpringMVC 的容器。 也就相当于 Spring 的容器是父容器,而 SpringMVC 是子容器,儿子可以向父亲无限索取,但是父亲却不能向儿子索取一点。

1.3.2、SpringMVC 配置类

@Configuration
@ComponentScan("com.lyh.controller")
@EnableWebMvc
public class SpringMvcConfig {
    
}

       到这里我们就把 Spring、Mybatis 和 SpringMVC 整合在了一起,这样当我们的 Web 容器启动的时候,他就会把我们 SpringConfig 和 SpirngMvcConfig 进行加载,然后这两个配置类会各自加载自己对应的 Bean。

1.4、功能模块开发

先把文件创建出来:

  • 在 domain 下创建 Book 类
  • 在 dao 下创建 BookDao 接口
  • 在 service 下创建 BookService 接口
  • 在 service 下的 impl 下创建 BookServiceImpl 实现类
  • 在 controller 下创建 BookController 控制器类

1.4.1、dao 层

public interface BookDao {
 
//    @Insert("insert into tbl_book values(null,#{type},{name},{description})")
    @Insert("insert into tbl_book (type,name,description) values(null,#{type},{name},{description})")
    void save(Book book);
 
    @Update("update tbl_book set type = #{type},name = #{},description = #{description} where id = #{id}")
    void update(Book book);
 
    @Delete("delete from tbl_book where id = #{id}")
    void delete(Integer id);
 
    @Select("select * from tbl_book where id = #{id}")
    Book getById();
 
    @Select("select * from tbl_book")
    List<Book> getAll();
}

       这里的两个插入语句都是可以的。

1.4.2、service 层

1)service 接口开发

       接口我们按照开发规范是必须写注释的。

public interface BookService {
 
    /**
     * 新增
     * @param book
     * @return
     */
    boolean save(Book book);
 
    /**
     * 更新
     * @param book
     * @return
     */
    boolean update(Book book);
 
    /**
     * 根据 id 删除
     * @return
     */
    boolean delete(Integer id);
 
    /**
     * 按照 id 查询
     * @param id
     * @return
     */
    Book getById(Integer id);
 
    /**
     * 查询所有
     * @return
     */
    List<Book> getAll();
}
2)接口实现

       com.lyh.service 这个包已经被我们设置让 Spring 管理了 ,这里因为要用到 BookDao 的实现类对象,所以这里自动装配一下就好了,因为我们在 BookDao 中已经配置了自动代理了。

@Service
public class BookServiceImpl implements BookService {
 
    @Autowired
    private BookDao bookDao;
 
    @Override
    public boolean save(Book book) {
        bookDao.save(book);
        return true;
    }
 
    @Override
    public boolean update(Book book) {
        bookDao.update(book);
        return true;
    }
 
    @Override
    public boolean delete(Integer id) {
        bookDao.delete(id);
        return true;
    }
 
    @Override
    public Book getById(Integer id) {
        return bookDao.getById(id);
    }
 
    @Override
    public List<Book> getAll() {
        return bookDao.getAll();
    }
}

1.4.3、controller 层

controller 层依赖我们的 BookService 实现类。

@RestController
@RequestMapping("/books")
public class BookController {
 
    @Autowired
    private BookService bookService;
 
    @PostMapping
    public boolean save(@RequestBody Book book) {
        return bookService.save(book);
    }
 
    @PutMapping
    public boolean update(@RequestBody Book book) {
        return bookService.update(book);
    }
 
    @DeleteMapping("/{id}")
    public boolean delete(@PathVariable Integer id) {
        return bookService.delete(id);
    }
 
    @GetMapping("/{id}")
    public Book getById(@PathVariable Integer id) {
        return bookService.getById(id);
    }
 
    @GetMapping
    public List<Book> getAll() {
        return bookService.getAll();
    }
 
}

SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(2)https://developer.aliyun.com/article/1534218

相关文章
|
13天前
|
前端开发 Java 数据库连接
Spring MVC 扩展和SSM框架整合
通过以上步骤,我们可以将Spring MVC扩展并整合到SSM框架中。这个过程包括配置Spring MVC和Spring的核心配置文件,创建控制器、服务层和MyBatis的Mapper接口及映射文件。在实际开发中,可以根据具体业务需求进行进一步的扩展和优化,以构建更加灵活和高效的企业级应用程序。
26 5
|
7月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
9月前
|
前端开发
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(3)
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】
|
9月前
|
JSON 前端开发 程序员
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(2)
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】
|
1月前
|
存储 Java 关系型数据库
ssm026校园美食交流系统(文档+源码)_kaic
本文介绍了基于Java语言和MySQL数据库的校园美食交流系统的设计与实现。该系统采用B/S架构和SSM框架,旨在提高校园美食信息管理的效率与便捷性。主要内容包括:系统的开发背景、目的及内容;对Java技术、MySQL数据库、B/S结构和SSM框架的介绍;系统分析部分涵盖可行性分析、性能分析和功能需求分析;最后详细描述了系统各功能模块的具体实现,如登录、管理员功能(美食分类管理、用户管理等)和前台首页功能。通过此系统,管理员可以高效管理美食信息,用户也能方便地获取和分享美食资讯,从而提升校园美食交流的管理水平和用户体验。
|
9天前
|
Java 关系型数据库 MySQL
weixin050高校体育场管理系统+ssm(文档+源码)_kaic
本文针对高校体育场管理系统的开发与实现进行详细介绍。随着经济快速发展,人们对手机软件需求增加,高校体育场管理系统应运而生。系统采用JAVA技术、Mysql数据库和SSM框架等成熟技术,通过分析功能需求、可行性及性能,设计出包含管理员、用户和学生角色的功能模块。系统实现用户注册登录、信息管理等功能,简化传统手工统计模式,提高管理效率,满足用户对信息获取的及时性与准确性需求。
weixin050高校体育场管理系统+ssm(文档+源码)_kaic
|
13天前
|
前端开发 Java 关系型数据库
基于ssm的社区物业管理系统,附源码+数据库+论文+任务书
社区物业管理系统采用B/S架构,基于Java语言开发,使用MySQL数据库。系统涵盖个人中心、用户管理、楼盘管理、收费管理、停车登记、报修与投诉管理等功能模块,方便管理员及用户操作。前端采用Vue、HTML、JavaScript等技术,后端使用SSM框架。系统支持远程安装调试,确保顺利运行。提供演示视频和详细文档截图,帮助用户快速上手。
48 17
|
16天前
|
前端开发 Java 关系型数据库
基于ssm的超市会员(积分)管理系统,附源码+数据库+论文,包安装调试
本项目为简单内容浏览和信息处理系统,具备管理员和员工权限。管理员可管理会员、员工、商品及积分记录,员工则负责积分、商品信息和兑换管理。技术框架采用Java编程语言,B/S架构,前端使用Vue+JSP+JavaScript+Css+LayUI,后端为SSM框架,数据库为MySQL。运行环境为Windows,JDK8+Tomcat8.5,非前后端分离的Maven项目。提供演示视频和详细文档,购买后支持免费远程安装调试。
69 19
|
17天前
|
前端开发 JavaScript Java
[Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
59 17
|
15天前
|
前端开发 Java 关系型数据库
基于ssm的网络直播带货管理系统,附源码+数据库+论文
该项目为网络直播带货网站,包含管理员和用户两个角色。管理员可进行主页、个人中心、用户管理、商品分类与信息管理、系统及订单管理;用户可浏览主页、管理个人中心、收藏和订单。系统基于Java开发,采用B/S架构,前端使用Vue、JSP等技术,后端为SSM框架,数据库为MySQL。项目运行环境为Windows,支持JDK8、Tomcat8.5。提供演示视频和详细文档截图。
47 10

热门文章

最新文章