SSM整合_demo
整合流程
code:https://github.com/Albertzzd/ssm_demo_case
-
创建maven工程
-
创建文件目录结构:config、dao、domain、Service、controller
-
Spring环境搭建
-
xml坐标导入-springmvc
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>ssm_code</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <!-- 依赖管理 --> <dependencies> <!-- SpringMVC(底层依赖Spring)--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.10.RELEASE</version> </dependency> </dependencies> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>
-
SpringConfig
@Configuration @ComponentScan("com.itcase.service") public class SpringConfig { }
-
domain实体类
-
-
Spring整合Mybatis:业务层和持久层
-
xml坐标导入
<!-- Spring整合Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!-- Spring JDBC : 声明式事务 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.10.RELEASE</version> </dependency> <!-- Spring整合Junit --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.2.10.RELEASE</version> </dependency> <!-- MySQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!-- Mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <!-- druid连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.1</version> </dependency> <!-- Junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
-
jdbc配置
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm_db?useSSL=false&characterEncoding=utf8 jdbc.username=root jdbc.password=root
-
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; //设置连接池 @Bean public DataSource dataSource(){ DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } //设置事务管理器 (声明式事务) @Bean public PlatformTransactionManager transactionManager(DataSource dataSource){ //PlatformTransactionManager是DataSourceTransactionManager的父接口 DataSourceTransactionManager dstm = new DataSourceTransactionManager(); dstm.setDataSource(dataSource); return dstm; } }
-
MybatisConfig配置
//Mybatis配置类 public class MybatisConfig { @Bean public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource ds){ SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); //设置pojo的包扫描 factoryBean.setTypeAliasesPackage("com.itcase.domain"); //设置连接池 factoryBean.setDataSource(ds); return factoryBean; } @Bean public MapperScannerConfigurer mapperScannerConfigurer(){ MapperScannerConfigurer msc = new MapperScannerConfigurer(); //设置dao层的接口扫描 msc.setBasePackage("com.itcase.dao"); return msc; } }
更新SpringConfig配置类
@Configuration//Spring配置类 @ComponentScan("com.itcase.service")//扫描指定包下的类,并添加到Ioc容器 @PropertySource("classpath:db.properties")//加载外部配置文件 @Import({JdbcConfig.class,MybatisConfig.class})//引入配置类 @EnableWebMvc//开启事物管理支持 public class SpringConfig { }
-
dao层代码
-
service层代码:接口+实现类
增加
@Transactional
事务声明
-
-
SpringMVC整合:业务层和表现层
-
XML坐标导入:JSON、Servlet
<!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- Jackson : 实现json格式和javabean之间的数据转换 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency>
-
SpringMVC配置
@Configuration @ComponentScan("com.itcase.controller") @EnableWebMvc //JSON自动转换 public class SpringmvcConfig { }
-
Web容器配置
public class ServletInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { //指定spring配置类加载(根配置) return new Class[]{SpringConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { //指定springmvc配置类加载 return new Class[]{SpringmvcConfig.class}; } @Override protected String[] getServletMappings() { //配置springmvc拦截路径为 / (全路径) return new String[]{"/"}; } //中文乱码过滤器 @Override protected Filter[] getServletFilters() { CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter(); encodingFilter.setEncoding("utf-8"); return new Filter[]{encodingFilter}; } }
-
编写Controller层代码
@RestController @RequestMapping("/book") public class BookController { @Autowired private BookService bookService; @PostMapping public boolean save(@RequestBody Book book) { return bookService.saveBook(book); } @PutMapping public boolean update(@RequestBody Book book) { return bookService.updateBook(book); } @DeleteMapping("/{id}") public boolean delete(@PathVariable Integer id) { return bookService.deleteBookById(id); } @GetMapping("/{id}") public Book getById(@PathVariable Integer id) { return bookService.getBookById(id); } @GetMapping public List<Book> getAll() { return bookService.getAllBook(); } }
-
Tomcat配置
-
-
联合postman测试
-
封装表现层数据
-
SpringMVC异常处理器
@RestControllerAdvice public class ProjectExceptionAdvice { //专门处理业务功能导致的异常 @ExceptionHandler(BusinessException.class) public Result doBusinessException(BusinessException ex){ //发送对应消息传递给用户,提醒规范操作 return new Result(ex.getCode(),ex.getMessage()); } //专门处理系统异常 @ExceptionHandler(SystemException.class) public Result doSystemException(SystemException ex){ //发送固定消息传递给用户,安抚用户 //发送特定消息给运维人员,提醒维护 //记录日志 return new Result(ex.getCode(),ex.getMessage()); } //处理其他未知异常 @ExceptionHandler(Exception.class) public Result doException(Exception ex){ //发送固定消息传递给用户,安抚用户 //发送特定消息给编程人员,提醒维护 //记录日志 return new Result(Code.SYSTEM_UNKNOW_ERR,"服务器正在维护,请稍后访问"); } }
-
SpringMVC拦截器使用
自定义拦截器(通知)
配置拦截器拦截规则(切入点)
修改SpringmvcConfig配置(新增扫描config包)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了