SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(1)

简介: SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】

前言

       昨天拿到了第一份实习 offer,无奈牛魔学院不让走,导员说学校的实训(装个hadoop环境都得两三天的课程)比实习强多了,没办法,我只能心里说“汝之顶患疾久矣,莫如粪”,然后和导员笑着说说“好的呢”,其实心里万马奔腾。也是没有办法,country让促进就业、大力xxx、全力、三步走、六个抓牢、七个推进、就业加速度 ... 都是扯淡,下面的领导们才不关心你就不就业,搬砖还是吃土。

1、SSM 整合

1.1、总览

SSM 整合

  • Spring
  • SpringConfig
  • Mybatis
  • MybatisConfig
  • JdbcConfig
  • jdbc.properties
  • SpringMVC
  • ServletConfig
  • SpringMvcConfig

功能模块

  • 表与实体类
  • dao(接口 + 自动代理)
  • service(接口 + 实现类)
  • 业务层接口测试(整合 JUnit)
  • controller
  • 表现层接口测试(PostMan)

1.2、Spring 整合 Mybatis

1.2.1、Spring 配置类

这里先设置 Spring 负责管理的 Bean 路径

@Configuration
@ComponentScan({"com.lyh.service"})
@PropertySource("jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
public class SpringConfig {
}

这里的 jdbc.properties 是为了整合 Mybatis 用的:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_db
jdbc.username=root
jdbc.password=Yan1029.

       如果报错:Could not open ServletContext resource [/jdbc.properties] 就替换为 @PropertySource("classpath:jdbc.properties")

1.2.2、Jdbc 配置类

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;
    }
}

1.2.3、Mybatis 配置类

       这里需要写两个方法,分别负责返回 Mybatis 创建连接对象的工厂和设置 Mybatis 的 Mapper 扫描包(Mapper 接口所在的包)。

public class MybatisConfig {
 
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("com.lyh.domain");
        return factoryBean;
    }
 
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.lyh.dao");
        return msc;
    }
 
}

1.2.4、事务处理

1、首先在 JdbcConfig 中添加事务管理器

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        return new DataSourceTransactionManager(dataSource);
    }

2、然后在 SpringConfig 中启用事务

3、最后在 BookService 设置事务注解

@Transactional
public interface BookService {
    //...
}

1.3、Spring 整合 SpringMVC

1.3.1、Servlet 容器配置类

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
 
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
 
    // Web 容器加载的是 SpringMVC 的配置类
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
 
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
 
    // 中文乱码处理
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}

       注意这里 getRootConfigClass 和 getServletConfigClass 造出来的容器对象不是同一个容器对象。但是 SpringMVC 的容器可以访问 Spring 的容器,但是 Spring 的容器不能访问 SpringMVC 的容器。 也就相当于 Spring 的容器是父容器,而 SpringMVC 是子容器,儿子可以向父亲无限索取,但是父亲却不能向儿子索取一点。

1.3.2、SpringMVC 配置类

@Configuration
@ComponentScan("com.lyh.controller")
@EnableWebMvc
public class SpringMvcConfig {
    
}

       到这里我们就把 Spring、Mybatis 和 SpringMVC 整合在了一起,这样当我们的 Web 容器启动的时候,他就会把我们 SpringConfig 和 SpirngMvcConfig 进行加载,然后这两个配置类会各自加载自己对应的 Bean。

1.4、功能模块开发

先把文件创建出来:

  • 在 domain 下创建 Book 类
  • 在 dao 下创建 BookDao 接口
  • 在 service 下创建 BookService 接口
  • 在 service 下的 impl 下创建 BookServiceImpl 实现类
  • 在 controller 下创建 BookController 控制器类

1.4.1、dao 层

public interface BookDao {
 
//    @Insert("insert into tbl_book values(null,#{type},{name},{description})")
    @Insert("insert into tbl_book (type,name,description) values(null,#{type},{name},{description})")
    void save(Book book);
 
    @Update("update tbl_book set type = #{type},name = #{},description = #{description} where id = #{id}")
    void update(Book book);
 
    @Delete("delete from tbl_book where id = #{id}")
    void delete(Integer id);
 
    @Select("select * from tbl_book where id = #{id}")
    Book getById();
 
    @Select("select * from tbl_book")
    List<Book> getAll();
}

       这里的两个插入语句都是可以的。

1.4.2、service 层

1)service 接口开发

       接口我们按照开发规范是必须写注释的。

public interface BookService {
 
    /**
     * 新增
     * @param book
     * @return
     */
    boolean save(Book book);
 
    /**
     * 更新
     * @param book
     * @return
     */
    boolean update(Book book);
 
    /**
     * 根据 id 删除
     * @return
     */
    boolean delete(Integer id);
 
    /**
     * 按照 id 查询
     * @param id
     * @return
     */
    Book getById(Integer id);
 
    /**
     * 查询所有
     * @return
     */
    List<Book> getAll();
}
2)接口实现

       com.lyh.service 这个包已经被我们设置让 Spring 管理了 ,这里因为要用到 BookDao 的实现类对象,所以这里自动装配一下就好了,因为我们在 BookDao 中已经配置了自动代理了。

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

1.4.3、controller 层

controller 层依赖我们的 BookService 实现类。

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

SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(2)https://developer.aliyun.com/article/1534218

相关文章
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
5月前
|
缓存 NoSQL Java
在 SSM 架构(Spring + SpringMVC + MyBatis)中,可以通过 Spring 的注解式缓存来实现 Redis 缓存功能
【6月更文挑战第18天】在SSM(Spring+SpringMVC+MyBatis)中集成Redis缓存,涉及以下步骤:添加Spring Boot的`spring-boot-starter-data-redis`依赖;配置Redis连接池(如JedisPoolConfig)和连接工厂;在Service层使用`@Cacheable`注解标记缓存方法,指定缓存名和键生成策略;最后,在主配置类启用缓存注解。通过这些步骤,可以利用Spring的注解实现Redis缓存。
79 2
|
5月前
|
前端开发
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(3)
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】
|
5月前
|
JSON 前端开发 程序员
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】(2)
SpringMVC(四)【SSM 整合、统一结果封装、异常处理、前后台协议联调】
|
6月前
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】
|
5月前
|
设计模式 前端开发 Java
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
【Spring MVC】快速学习使用Spring MVC的注解及三层架构
75 1
|
5月前
|
前端开发 Java 应用服务中间件
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
|
5月前
|
XML Java 数据格式
SpringMVC的XML配置解析-spring18
SpringMVC的XML配置解析-spring18
|
5月前
|
应用服务中间件
从代码角度戳一下springMVC的运行过程-spring16
从代码角度戳一下springMVC的运行过程-spring16
|
6月前
|
前端开发 Java 关系型数据库
基于ssm框架旅游网旅游社交平台前后台管理系统(spring+springmvc+mybatis+maven+tomcat+html)
基于ssm框架旅游网旅游社交平台前后台管理系统(spring+springmvc+mybatis+maven+tomcat+html)