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包)