SSM整合快速入门案例

news/2024/12/5 7:13:27/

文章目录

  • 前言
  • 一、设计数据库表
  • 二、创建工程
  • 三、SSM技术整合
  • 四、功能模块开发
  • 五、接口测试
  • 总结


前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

在这里插入图片描述

一、设计数据库表

1. 设计创建数据库ssm_db,创建表tbl_book

-- ----------------------------
-- Table structure for tbl_book
-- ----------------------------
DROP TABLE IF EXISTS `tbl_book`;
CREATE TABLE `tbl_book`  (`id` int(11) NOT NULL AUTO_INCREMENT,`type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of tbl_book
-- ----------------------------
INSERT INTO `tbl_book` VALUES (1, '计算机理论', 'Spring实战 第5', 'Spring入门经典教程,深入理解Spring原理技术内幕');
INSERT INTO `tbl_book` VALUES (2, '计算机理论', 'Spring 5核心原理与30个类手写实战', '十年沉淀之作,手写Spring精华思想');
INSERT INTO `tbl_book` VALUES (3, '计算机理论', 'Spring 5 设计模式', '深入Spring源码剖析Spring源码中蕴含的10大设计模式');
INSERT INTO `tbl_book` VALUES (4, '计算机理论', 'Spring MVC+MyBatis开发从入门到项目实战', '全方位解析面向Web应用的轻量级框架,带你成为Spring MVC开发高手');
INSERT INTO `tbl_book` VALUES (5, '计算机理论', '轻量级Java Web企业应用实战', '源码级剖析Spring框架,适合已掌握Java基础的读者');
INSERT INTO `tbl_book` VALUES (6, '计算机理论', 'Java核心技术 卷I 基础知识(原书第11版)', 'Core Java11版,Jolt大奖获奖作品,针对Java SE9、1011全面更新');
INSERT INTO `tbl_book` VALUES (7, '计算机理论', '深入理解Java虚拟机', '5个维度全面剖析JVM,大厂面试知识点全覆盖');
INSERT INTO `tbl_book` VALUES (8, '计算机理论', 'Java编程思想(第4版)', 'Java学习必读经典,殿堂级著作!赢得了全球程序员的广泛赞誉');
INSERT INTO `tbl_book` VALUES (9, '计算机理论', '零基础学Java(全彩版)', '零基础自学编程的入门图书,由浅入深,详解Java语言的编程思想和核心技术');
INSERT INTO `tbl_book` VALUES (10, '市场营销', '直播就该这么做:主播高效沟通实战指南', '李子柒、李佳琦、薇娅成长为网红的秘密都在书中');
INSERT INTO `tbl_book` VALUES (11, '市场营销', '直播销讲实战一本通', '和秋叶一起学系列网络营销书籍');
INSERT INTO `tbl_book` VALUES (12, '市场营销', '直播带货:淘宝、天猫直播从新手到高手', '一本教你如何玩转直播的书,10堂课轻松实现带货月入3W+');

在这里插入图片描述

二、创建工程

1. 新建maven模块,勾选webapp开发模板,点击右下角创建

在这里插入图片描述

2. 完善文件结构,手动添加java源码目录,resources资源目录和test测试目录,点击右下角应用

在这里插入图片描述

三、SSM技术整合

1. 导入对应技术坐标和对应插件(pom.xml)

<!--    springmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.10.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.2.10.RELEASE</version></dependency><!--    mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--    druid数据源--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><!--    junit单元测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--    servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--    jackson--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency>
<build><plugins><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.1</version><configuration><port>80</port><path>/</path></configuration></plugin></plugins>
</build>      

2. 设计好包结构

在这里插入图片描述

3. 编写Spring核心配置类SpringConfig

//1.设置该类配置类
@Configuration
//2.设置扫描加载的范围
@ComponentScan({"com.itheima.service"})
public class SpringConfig {
}

4. spring整合mybatis

  • jdbc配置类jdbcConfig
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;//    druid数据源@Beanpublic DataSource dataSource(){DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driver);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}
}
  • mybatis配置类mybatisConfig
public class MyBatisConfig {@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){//创建sqlsessionfactorybean对象SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();//设置数据源factoryBean.setDataSource(dataSource);//设置类型别名扫描包factoryBean.setTypeAliasesPackage("org.example.domain");return factoryBean;}//映射扫描(扫到dao包)@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setBasePackage("org.example.dao");return msc;}
}
  • 在resources目录下编写数据库连接信息properties配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_db
jdbc.username=root
jdbc.password=root
  • 在springConfig中加载
@Configuration
@ComponentScan({"com.itheima.service"})
//1.加载数据库配置文件
@PropertySource("classpath:jdbc.properties")
//2.导入spring整合mybatis配置类
@Import({JdbcConfig.class,MyBatisConfig.class})
public class SpringConfig {
}

5. spring整合springmvc

  • web容器配置类servletConfig
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
//    加载spring核心配置protected Class<?>[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}//    web容器protected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcConfig.class};}//    拦截所以请求protected String[] getServletMappings() {return new String[]{"/"};}
}
  • springmvcConfig
//1.设置该类为配置类
@Configuration
//2.设置扫描的包
@ComponentScan("org.example.controller")
//3.开启webmvc支持(rest风格)
@EnableWebMvc
public class SpringMvcConfig {
}

6. 整合效果简要说明(servletConfig)

  1. 当web容器启动的时候,会加载spring容器和springmvc容器,spring加载spring的bean,springmvc加载springmvc的bean

  2. getRootConfigClasses 是进行根目录配置
    getServletConfigClasses() 是应对web请求处理的配置
    两个配置造出的对象不一样

  3. Servlet创造出的对象能访问Root对象的内容,而Root对象不能访问Servlet对象的内容,这里涉及到父子容器的问题,要想解决这个问题,可以把spring配置和springmvc配置都写进创建ServletConfig的方法中

四、功能模块开发

1. 在domain包中根据数据库表设计对应实体类Book

public class Book {//此处省略getter、setter和toString方法private Integer id;private String type;private String name;private String description;
}

2. 在dao包编写数据层操作接口BookDao

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. 在service包中编写service接口BookService

public interface BookService {/*** 保存* @param book* @return*/public boolean save(Book book);/*** 修改* @param book* @return*/public boolean update(Book book);/*** 按id删除* @param id* @return*/public boolean delete(Integer id);/*** 按id查询* @param id* @return*/public Book getById(Integer id);/*** 查询全部* @return*/public List<Book> getAll();
}

4. 在serice包中的impl包中编写BookService实现类BookServiceImpl

//定义bean
@Service
public class BookServiceImpl implements BookService {@Autowiredprivate 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();}
}

5. 开启事务

  • 在SpringConfig中开启注解式事务驱动
...
@EnableTransactionManagement
public class SpringConfig {
}
  • 在jdbcConfig中配置事务的管理器
public class JdbcConfig {...@Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource){DataSourceTransactionManager ds = new DataSourceTransactionManager();ds.setDataSource(dataSource);return ds;}
}
  • 添加事务,配置到对应接口
@Transactional
public class BookServiceImpl implements BookService {...
}

6. controller层BookController

@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate BookService bookService;@PostMappingpublic boolean save(@RequestBody Book book) {return bookService.save(book);}@PutMappingpublic 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);}@GetMappingpublic List<Book> getAll() {return bookService.getAll();}
}

五、接口测试

在企业开发中业务层开发完后用junit测试,表现层开发完后用postman测试

1. 业务层接口测试示例

  • 测试类代码编写
@RunWith(SpringJUnit4ClassRunner.class)
//指定配置类
@ContextConfiguration(classes = SpringConfig.class)
public class BookServiceTest {@Autowiredprivate BookService bookService;@Testpublic void testGetById(){Book book = bookService.getById(1);System.out.println(book);}@Testpublic void testGetAll(){List<Book> all = bookService.getAll();System.out.println(all);}}
  • 运行结果

在这里插入图片描述

2. 表现层接口测试

1. 配置tomcat服务器并运行

在这里插入图片描述

在这里插入图片描述

2. 表现层接口测试示例

在这里插入图片描述

在这里插入图片描述

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)


http://www.ppmy.cn/news/316108.html

相关文章

基于springboot+vue技术的在线考试系统源码数据库

源码看这里 https://download.csdn.net/download/2301_76965813/87881785 前台 学生登录&#xff1a; 如果没有账号&#xff0c;首先需要以学生的身份进行注册&#xff0c;即输入姓名、性别、密码以及班级&#xff0c;注册成功之后输入账户名和密码进行登录&#xff0c;进入…

【Prometheus】mysqld_exporter采集+Grafana出图+AlertManager预警

前提环境&#xff1a;已经安装和配置好prometheus server 所有组件对应的版本&#xff1a; prometheus-2.44.0 mysqld_exporter-0.14.0 grafana-enterprise-9.1.2-1.x86_64.rpm alertmanager-0.25.0 prometheus-webhook-dingtalk-2.1.0 简介 mysql_exporter是用来收集MysQL或…

【深入理解函数栈帧:探索函数调用的内部机制】

本章我们要介绍的不是数学中的函数&#xff0c;而是C语言中的函数哟&#xff01; 本章重点 了解汇编指令深刻理解函数调用过程 样例代码&#xff1a; #include <stdio.h> int MyAdd(int a, int b) {int c 0;c a b;return c; }int main() {int x 0xA;int y 0xB;int…

实心轮胎的优缺点

实心轮胎的一些主要优点是&#xff1a; 它们从头开始设计为一个整体&#xff1a;没有移动部件或附加组件。它们与现有的 OEM 车轮配合使用。橡胶化合物可根据应用定制。它们具有出色的侧壁保护。 与泡沫填充轮胎相比&#xff0c;每小时成本更低。由于机器生产率的提高和停机时…

运动耳机哪个牌子好?蓝牙运动耳机推荐

作为一个运动狂人&#xff0c;音乐对于我来说说就是挂在耳朵上的兴奋剂。戴上耳机&#xff0c;腰不酸了腿不麻了&#xff0c;又能上两片重量了。但是对于运动耳机我的要求更高&#xff0c;长期佩戴时是否舒适、防水防汗性能如何&#xff0c;配戴的时候稳不稳固&#xff0c;音质…

2.Tomcat优化

文章目录 Tomcat优化配置文件优化系统内核优化JVM优化 Tomcat优化 Tomcat默认安装下的缺省配置并不适合生产环境&#xff0c;它可能会频繁出现假死现象需要重启&#xff0c;只有通过不断压测优化才能让它最高效率稳定的运行。优化主要包括三方面&#xff0c;分别为 操作系统优…

用于计算机视觉的 OpenCV(C++ 与 Python)与 MATLAB之间的优缺点比较

我们经常混淆我们的工具和我们的手艺。工具可以帮助你练习手艺,但它们并不能使你成为一名优秀的工匠。一个好工匠的口袋里有许多不同的工具,她会明智地使用适合工作的工具。她没有嫁给这些工具。她嫁给了她的手艺。 我经常被关于编程语言的战争逗乐。人们对哪一个更好有非常…

锤子手机调试模式

锤子手机的调试模式&#xff1a; 1、手机进入“设置”界面&#xff0c;进入后下拉菜单到最下方&#xff0c;点击“高级设置”; 2、进入“高级设置”界面后&#xff0c;点击“开发者选项”&#xff0c;在“开发者选项”界面便可以看到“USB调试”。 然而&#xff0c;如果选…