SSM整合过程梳理

简介: SSM整合过程介绍

前言

框架用的好效率自然高!

🏳️‍🌈给大家推荐一个<font
color=green> Java面试刷题网站牛客网,懒羊羊祝你早日成神: Java刷题面试宝藏网站

一.SSM整合流程

1.创建工程

  • 创建一个Maven的web工程
  • pom.xml添加SSM需要的依赖jar包
  • 编写Web项目的入口配置类,实现AbstractAnnotationConfigDispatcherServletInitializer重写以下方法

    • getRootConfigClasses() :返回Spring的配置类->需要==SpringConfig==配置类
    • getServletConfigClasses() :返回SpringMVC的配置类->需要==SpringMvcConfig==配置类
    • getServletMappings() : 设置SpringMVC请求拦截路径规则
    • getServletFilters() :设置过滤器,解决POST请求中文乱码问题

2.SSM整合
Spring

SpringConfig Spring配置类
标识该类为配置类 @Configuration
扫描Service所在的包 @ComponentScan
在Service层要管理事务 @EnableTransactionManagement
读取外部的properties配置文件 @PropertySource
整合Mybatis需要引入Mybatis相关配置类 @Import

第三方数据源配置类 JdbcConfig

第三方数据源配置类 JdbcConfig
构建DataSource数据源,DruidDataSouroce @Bean @Value
构建平台事务管理器,DataSourceTransactionManager @Bean

Mybatis配置类 MybatisConfig

第三方数据源配置类 JdbcConfig
构建SqlSessionFactoryBean,设置别名扫描与数据源 @Bean
构建MapperScannerConfigurer并设置DAO层的包扫描 @Bean

SpringMVC配置类SpringMvcConfig

SpringMVC配置类 SpringMvcConfig
标识该类为配置类 @Configuration
扫描Controller所在的包 @Configuration
开启SpringMVC注解支持 @EnableWebMvc

二.整合配置

2.1添加依赖

pom.xml添加SSM所需要的依赖jar包
在这里插入图片描述

2.2创建项目包结构

  • config目录存放的是相关的配置类
  • controller编写的是Controller类
  • dao存放的是Dao接口,因为使用的是Mapper接口代理方式,所以没有实现类包
  • service存的是Service接口,impl存放的是Service实现类
  • resources:存入的是配置文件,如Jdbc.properties
  • webapp:目录可以存放静态资源
  • test/java:存放的是测试类

在这里插入图片描述

2.3创建SpringConfig配置类

在这里插入图片描述

2.4创建JdbcConfig配置类

在这里插入图片描述

2.5创建MybatisConfig配置类

在这里插入图片描述

2.6创建jdbc.properties

在这里插入图片描述

2.7创建SpringMVC配置类

在这里插入图片描述

2.8创建Web项目入口配置类

三.功能模块

3.1创建模型类

public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;

}

3.2编写Dao接口

public interface BookDao {

//    @Insert("insert into tbl_book values(null,#{type},#{name},#{description})")
    @Insert("insert into tbl_book (type,name,description) values(#{type},#{name},#{description})")
    public void save(Book book);

    @Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")
    public void update(Book book);

    @Delete("delete from tbl_book where id = #{id}")
    public void delete(Integer id);

    @Select("select * from tbl_book where id = #{id}")
    public Book getById(Integer id);

    @Select("select * from tbl_book")
    public List<Book> getAll();
}

3.3编写Service接口和实现类

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

3.4编写Contorller类

@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();
    }
}

四.单元测试

4.1新建测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class BookServiceTest {

}

4.2注入Service类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class BookServiceTest {
    @Autowired
    private BookService bookService;
}

4.3编写测试方法

我们先来对查询进行单元测试。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class BookServiceTest {

    @Autowired
    private BookService bookService;

    @Test
    public void testGetById(){
        Book book = bookService.getById(1);
        System.out.println(book);
    }

    @Test
    public void testGetAll(){
        List<Book> all = bookService.getAll();
        System.out.println(all);
    }

}
相关文章
|
数据安全/隐私保护
【鸿蒙软件开发】文本输入(TextInput/TextArea)
【鸿蒙软件开发】文本输入(TextInput/TextArea)
1635 0
|
10月前
|
Ubuntu Linux Windows
IP地址查看方法
本指南介绍了在不同操作系统中查看设备IP地址的方法。在Windows系统中,可通过命令提示符(输入`ipconfig`)或设置界面查找IPv4地址;Linux系统中,使用终端命令`ifconfig`或`ip addr show`获取网络接口的IP;Mac系统则可在“系统偏好设置”中的“网络”查看,或通过终端执行相同命令获取。这些方法简单易行,适用于各种常见场景。
4101 11
|
9月前
|
人工智能 运维 Serverless
语音生成+情感复刻,Cosyvoice2.0 极简云端部署
CosyVoice2凭借多语言生成、零样本生成等优势,功能与性能显著提升。阿里云Function AI推出语音合成新模板,一键部署CosyVoice2.0模型,解决传统方案中参数调节不便、部署运维复杂、成本高昂等问题,助力企业高效落地AI语音应用。
语音生成+情感复刻,Cosyvoice2.0 极简云端部署
|
Linux 网络性能优化 网络安全
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
2607 28
|
11月前
|
人工智能 IDE JavaScript
MCP编程与AI的结合:基于Cursor的智能开发实践
本文介绍了如何通过将 Apifox MCP Server 与支持 AI 编程的 IDE(如 Cursor、VSCode + Cline 等)集成,实现 AI 直接读取和利用最新的 API 文档,从而大幅提升开发效率。文章详细说明了配置过程,包括获取 Apifox Access Token 和项目 ID,以及在 Cursor 中设置 MCP 配置的方法。此外,还展示了多个实际应用场景,例如快速生成模型代码、同步更新接口文档与代码、生成完整的 CRUD 操作、搜索 API 文档以及自动生成测试用例。
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
396 5
有哪些元宇宙的已知成功案例可以借鉴
**元宇宙成功案例摘要:** - 韩国国民银行开拓元宇宙金融,设立虚拟分行,探索数字资产服务。 - Meta&#39;s &quot;Horizon Worlds&quot;月活用户达30万,显示元宇宙在社交娱乐的潜力。 - Second Life作为早期在线世界,提供沉浸式体验,预示元宇宙可能性。 - 工商银行河北雄安分行创建虚拟分行,推动金融服务数字化。 - 首钢一高炉·SoReal乐园结合XR技术,展现元宇宙在文旅的创新应用。 - 中兴、天下秀、网易等企业通过元宇宙技术赋能社交、工业和服务平台。 这些案例揭示元宇宙在多领域广泛应用及广阔前景。
有哪些元宇宙的已知成功案例可以借鉴
|
Prometheus 监控 Cloud Native
grafana展示的CPU利用率与实际不符的问题探究
观察到`mpstat`命令显示单核CPU的`%usr`和`%sys`分别持续在70%和20%,而Grafana监控数据显示较低。问题源于Grafana表达式计算的是CPU时间增量而非利用率。`mpstat`通过`/proc/stat`获取数据并计算CPU利用率,而`node-exporter`直接导出原始数据。调整Grafana表达式以匹配`mpstat`的计算方式后,两者结果一致。解决方案是修正Grafana查询以准确反映CPU占用率。
738 1
grafana展示的CPU利用率与实际不符的问题探究
|
弹性计算 小程序
阿里云服务器4核16G配置租赁价格表,多种ECS实例规格可选
阿里云提供多种4核16G服务器实例,如ECS经济型e、高主频hfg8i、通用型g7/u1/g8i/g8ae等。ECS经济型e实例ecs.e-c1m4.xlarge每月低至70元,适用于游戏、Web、小程序后端等场景
598 1

热门文章

最新文章