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"?>
      
          4.0.0
      
          org.example
          ssm_code
          1.0-SNAPSHOT
          war
      
          
          
              
              
                  org.springframework
                  spring-webmvc
                  5.2.10.RELEASE
              
      
          
          
              8
              8
          
      
      
      
    • SpringConfig

      @Configuration
      @ComponentScan("com.itcase.service")
      public class SpringConfig {
      }
      
    • domain实体类

  • Spring整合Mybatis:业务层和持久层

    • xml坐标导入

              
              
                  org.mybatis
                  mybatis-spring
                  1.3.0
              
      
              
              
                  org.springframework
                  spring-jdbc
                  5.2.10.RELEASE
              
      
              
              
                  org.springframework
                  spring-test
                  5.2.10.RELEASE
              
      
              
              
                  mysql
                  mysql-connector-java
                  5.1.47
              
      
              
              
                  org.mybatis
                  mybatis
                  3.5.6
              
      
              
              
                  com.alibaba
                  druid
                  1.2.1
              
      
              
              
                  junit
                  junit
                  4.12
                  test
              
      
    • 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

              
              
                  javax.servlet
                  javax.servlet-api
                  3.1.0
                  provided
              
      
              
              
                  com.fasterxml.jackson.core
                  jackson-databind
                  2.9.0
              
      
    • 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 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包)

文件目录结构