• SSM学习52:SSM三大技术整合案例


    前面我们已经把MybatisSpringSpringMVC三个框架进行了学习,今天主要的内容就是把这三个框架整合在一起完成我们的业务功能开发,具体如何来整合,我们一步步来学习。

    1.1 流程分析

    (1) 创建工程

    • 创建一个Maven的web工程

    • pom.xml添加SSM需要的依赖jar包

    • 编写Web项目的入口配置类,实现AbstractAnnotationConfigDispatcherServletInitializer重写以下方法

      • getRootConfigClasses() :返回Spring的配置类->需要==SpringConfig==配置类

      • getServletConfigClasses() :返回SpringMVC的配置类->需要==SpringMvcConfig==配置类

      • getServletMappings() : 设置SpringMVC请求拦截路径规则

      • getServletFilters() :设置过滤器,解决POST请求中文乱码问题

    (2)SSM整合[==重点是各个配置的编写==]

    • SpringConfig

      • 标识该类为配置类 @Configuration

      • 扫描Service所在的包 @ComponentScan

      • 在Service层要管理事务 @EnableTransactionManagement

      • 读取外部的properties配置文件 @PropertySource

      • 整合Mybatis需要引入Mybatis相关配置类 @Import

        • 第三方数据源配置类 JdbcConfig

          • 构建DataSource数据源,DruidDataSouroce,需要注入数据库连接四要素, @Bean @Value

          • 构建平台事务管理器,DataSourceTransactionManager,@Bean

        • Mybatis配置类 MybatisConfig

          • 构建SqlSessionFactoryBean并设置别名扫描与数据源,@Bean

          • 构建MapperScannerConfigurer并设置DAO层的包扫描

    • SpringMvcConfig

      • 标识该类为配置类 @Configuration

      • 扫描Controller所在的包 @ComponentScan

      • 开启SpringMVC注解支持 @EnableWebMvc

    (3)功能模块[与具体的业务模块有关]

    • 创建数据库表

    • 根据数据库表创建对应的模型类

    • 通过Dao层完成数据库表的增删改查(接口+自动代理)

    • 编写Service层[Service接口+实现类]

      • @Service

      • @Transactional

      • 整合Junit对业务层进行单元测试

        • @RunWith

        • @ContextConfiguration

        • @Test

    • 编写Controller层

      • 接收请求 @RequestMapping @GetMapping @PostMapping @PutMapping @DeleteMapping

      • 接收数据 简单、POJO、嵌套POJO、集合、数组、JSON数据类型

        • @RequestParam

        • @PathVariable

        • @RequestBody

      • 转发业务层

        • @Autowired

      • 响应结果

        • @ResponseBody

    步骤1:创建Maven的web项目

    步骤2:添加依赖

    pom.xml添加SSM所需要的依赖jar包

    1. "1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <groupId>com.itheimagroupId>
    6. <artifactId>springmvc_08_ssmartifactId>
    7. <version>1.0-SNAPSHOTversion>
    8. <packaging>warpackaging>
    9. <dependencies>
    10. <dependency>
    11. <groupId>org.springframeworkgroupId>
    12. <artifactId>spring-webmvcartifactId>
    13. <version>5.2.10.RELEASEversion>
    14. dependency>
    15. <dependency>
    16. <groupId>org.springframeworkgroupId>
    17. <artifactId>spring-jdbcartifactId>
    18. <version>5.2.10.RELEASEversion>
    19. dependency>
    20. <dependency>
    21. <groupId>org.springframeworkgroupId>
    22. <artifactId>spring-testartifactId>
    23. <version>5.2.10.RELEASEversion>
    24. dependency>
    25. <dependency>
    26. <groupId>org.mybatisgroupId>
    27. <artifactId>mybatisartifactId>
    28. <version>3.5.6version>
    29. dependency>
    30. <dependency>
    31. <groupId>org.mybatisgroupId>
    32. <artifactId>mybatis-springartifactId>
    33. <version>1.3.0version>
    34. dependency>
    35. <dependency>
    36. <groupId>mysqlgroupId>
    37. <artifactId>mysql-connector-javaartifactId>
    38. <version>5.1.47version>
    39. dependency>
    40. <dependency>
    41. <groupId>com.alibabagroupId>
    42. <artifactId>druidartifactId>
    43. <version>1.1.16version>
    44. dependency>
    45. <dependency>
    46. <groupId>junitgroupId>
    47. <artifactId>junitartifactId>
    48. <version>4.12version>
    49. <scope>testscope>
    50. dependency>
    51. <dependency>
    52. <groupId>javax.servletgroupId>
    53. <artifactId>javax.servlet-apiartifactId>
    54. <version>3.1.0version>
    55. <scope>providedscope>
    56. dependency>
    57. <dependency>
    58. <groupId>com.fasterxml.jackson.coregroupId>
    59. <artifactId>jackson-databindartifactId>
    60. <version>2.9.0version>
    61. dependency>
    62. dependencies>
    63. <build>
    64. <plugins>
    65. <plugin>
    66. <groupId>org.apache.tomcat.mavengroupId>
    67. <artifactId>tomcat7-maven-pluginartifactId>
    68. <version>2.1version>
    69. <configuration>
    70. <port>80port>
    71. <path>/path>
    72. configuration>
    73. plugin>
    74. plugins>
    75. build>
    76. project>

    步骤3:创建项目包结构

    步骤4:创建SpringConfig配置类

    1. public class JdbcConfig {
    2. @Value("${jdbc.driver}")
    3. private String driver;
    4. @Value("${jdbc.url}")
    5. private String url;
    6. @Value("${jdbc.username}")
    7. private String username;
    8. @Value("${jdbc.password}")
    9. private String password;
    10. @Bean
    11. public DataSource dataSource(){
    12. DruidDataSource dataSource = new DruidDataSource();
    13. dataSource.setDriverClassName(driver);
    14. dataSource.setUrl(url);
    15. dataSource.setUsername(username);
    16. dataSource.setPassword(password);
    17. return dataSource;
    18. }
    19. @Bean
    20. public PlatformTransactionManager transactionManager(DataSource dataSource){
    21. DataSourceTransactionManager ds = new DataSourceTransactionManager();
    22. ds.setDataSource(dataSource);
    23. return ds;
    24. }
    25. }

    步骤6:创建MybatisConfig配置类

    1. public class MyBatisConfig {
    2. @Bean
    3. public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
    4. SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    5. factoryBean.setDataSource(dataSource);
    6. factoryBean.setTypeAliasesPackage("com.itheima.domain");
    7. return factoryBean;
    8. }
    9. @Bean
    10. public MapperScannerConfigurer mapperScannerConfigurer(){
    11. MapperScannerConfigurer msc = new MapperScannerConfigurer();
    12. msc.setBasePackage("com.itheima.dao");
    13. return msc;
    14. }
    15. }

    步骤7:创建jdbc.properties

    1. jdbc.driver=com.mysql.jdbc.Driver
    2. jdbc.url=jdbc:mysql://localhost:3306/ssm_db
    3. jdbc.username=root
    4. jdbc.password=root

    步骤8:创建SpringMVC配置类

    1. @Configuration
    2. @ComponentScan("com.itheima.controller")
    3. @EnableWebMvc
    4. public class SpringMvcConfig {
    5. }

    步骤9:创建Web项目入口配置类

    1. public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    2. //加载Spring配置类
    3. protected Class[] getRootConfigClasses() {
    4. return new Class[]{SpringConfig.class};
    5. }
    6. //加载SpringMVC配置类
    7. protected Class[] getServletConfigClasses() {
    8. return new Class[]{SpringMvcConfig.class};
    9. }
    10. //设置SpringMVC请求地址拦截规则
    11. protected String[] getServletMappings() {
    12. return new String[]{"/"};
    13. }
    14. //设置post请求中文乱码过滤器
    15. @Override
    16. protected Filter[] getServletFilters() {
    17. CharacterEncodingFilter filter = new CharacterEncodingFilter();
    18. filter.setEncoding("utf-8");
    19. return new Filter[]{filter};
    20. }
    21. }

    1.3 功能模块开发

    步骤1:创建数据库及表

    1. create database ssm_db character set utf8;
    2. use ssm_db;
    3. create table tbl_book(
    4. id int primary key auto_increment,
    5. type varchar(20),
    6. name varchar(50),
    7. description varchar(255)
    8. )
    9. insert into `tbl_book`(`id`,`type`,`name`,`description`) values (1,'计算机理论','Spring实战 第五版','Spring入门经典教程,深入理解Spring原理技术内幕'),(2,'计算机理论','Spring 5核心原理与30个类手写实践','十年沉淀之作,手写Spring精华思想'),(3,'计算机理论','Spring 5设计模式','深入Spring源码刨析Spring源码中蕴含的10大设计模式'),(4,'计算机理论','Spring MVC+Mybatis开发从入门到项目实战','全方位解析面向Web应用的轻量级框架,带你成为Spring MVC开发高手'),(5,'计算机理论','轻量级Java Web企业应用实战','源码级刨析Spring框架,适合已掌握Java基础的读者'),(6,'计算机理论','Java核心技术 卷Ⅰ 基础知识(原书第11版)','Core Java第11版,Jolt大奖获奖作品,针对Java SE9、10、11全面更新'),(7,'计算机理论','深入理解Java虚拟机','5个纬度全面刨析JVM,大厂面试知识点全覆盖'),(8,'计算机理论','Java编程思想(第4版)','Java学习必读经典,殿堂级著作!赢得了全球程序员的广泛赞誉'),(9,'计算机理论','零基础学Java(全彩版)','零基础自学编程的入门图书,由浅入深,详解Java语言的编程思想和核心技术'),(10,'市场营销','直播就这么做:主播高效沟通实战指南','李子柒、李佳奇、薇娅成长为网红的秘密都在书中'),(11,'市场营销','直播销讲实战一本通','和秋叶一起学系列网络营销书籍'),(12,'市场营销','直播带货:淘宝、天猫直播从新手到高手','一本教你如何玩转直播的书,10堂课轻松实现带货月入3W+');

    步骤2:编写模型类

    1. public class Book {
    2. private Integer id;
    3. private String type;
    4. private String name;
    5. private String description;
    6. //getter...setter...toString省略
    7. }

    步骤3:编写Dao接口

    1. public interface BookDao {
    2. // @Insert("insert into tbl_book values(null,#{type},#{name},#{description})")
    3. @Insert("insert into tbl_book (type,name,description) values(#{type},#{name},#{description})")
    4. public void save(Book book);
    5. @Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")
    6. public void update(Book book);
    7. @Delete("delete from tbl_book where id = #{id}")
    8. public void delete(Integer id);
    9. @Select("select * from tbl_book where id = #{id}")
    10. public Book getById(Integer id);
    11. @Select("select * from tbl_book")
    12. public List getAll();
    13. }

    步骤4:编写Service接口和实现类

    1. @Transactional
    2. public interface BookService {
    3. /**
    4. * 保存
    5. * @param book
    6. * @return
    7. */
    8. public boolean save(Book book);
    9. /**
    10. * 修改
    11. * @param book
    12. * @return
    13. */
    14. public boolean update(Book book);
    15. /**
    16. * 按id删除
    17. * @param id
    18. * @return
    19. */
    20. public boolean delete(Integer id);
    21. /**
    22. * 按id查询
    23. * @param id
    24. * @return
    25. */
    26. public Book getById(Integer id);
    27. /**
    28. * 查询全部
    29. * @return
    30. */
    31. public List getAll();
    32. }
    33. @Service
    34. public class BookServiceImpl implements BookService {
    35. @Autowired
    36. private BookDao bookDao;
    37. public boolean save(Book book) {
    38. bookDao.save(book);
    39. return true;
    40. }
    41. public boolean update(Book book) {
    42. bookDao.update(book);
    43. return true;
    44. }
    45. public boolean delete(Integer id) {
    46. bookDao.delete(id);
    47. return true;
    48. }
    49. public Book getById(Integer id) {
    50. return bookDao.getById(id);
    51. }
    52. public List getAll() {
    53. return bookDao.getAll();
    54. }
    55. }

    步骤5:编写Contorller类

    1. @RestController
    2. @RequestMapping("/books")
    3. public class BookController {
    4. @Autowired
    5. private BookService bookService;
    6. @PostMapping
    7. public boolean save(@RequestBody Book book) {
    8. return bookService.save(book);
    9. }
    10. @PutMapping
    11. public boolean update(@RequestBody Book book) {
    12. return bookService.update(book);
    13. }
    14. @DeleteMapping("/{id}")
    15. public boolean delete(@PathVariable Integer id) {
    16. return bookService.delete(id);
    17. }
    18. @GetMapping("/{id}")
    19. public Book getById(@PathVariable Integer id) {
    20. return bookService.getById(id);
    21. }
    22. @GetMapping
    23. public List getAll() {
    24. return bookService.getAll();
    25. }
    26. }

    对于图书模块的增删改查就已经完成了编写,我们可以从后往前写也可以从前往后写,最终只需要能把功能实现即可。

    接下来我们就先把业务层的代码使用Spring整合Junit的知识点进行单元测试:

  • 相关阅读:
    第1章 Linux基础知识 -- 了解Linux历史和linux目录结构
    Unity UI Toolkit学习笔记-Runtime UI 案例实践
    文件批量重命名加前缀的方法
    《论文阅读》R-NET: MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS
    折腾Chrome 插件,怎么给右键菜单增加“选项”?
    可口可乐TCCC的验厂内容
    SpringBoot+Vue项目疫苗接种管理系统
    RPA在财务审计中的应用
    Linux相关指令--适合初学者
    java毕业生设计校园疫情防控管理系统计算机源码+系统+mysql+调试部署+lw
  • 原文地址:https://blog.csdn.net/weixin_51330376/article/details/127753086