Spring
一、基础
1、依赖包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
配置目录结构
2、注解
SpringConfig:
@Configuration标明注解
@ComponentScan("com.")扫描包
@MapperScan
@Import
@PropertySource
其他类的:@Component @Service @Controller @Respority @Bean
@Autowired
3、配置信息
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=xzx2003.701@
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 ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
MybatisConfig配置类
public class MybatisConfig {
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
//设置实体封装类
ssfb.setTypeAliasesPackage("com.itheima.domain");
//设置数据源
ssfb.setDataSource(dataSource);
return ssfb;
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer msc = new MapperScannerConfigurer();
//设计mapper代理,扫描映射所在的包
msc.setBasePackage("com.itheima.dao");
return msc;
}
}
4、启动
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
AccountService accountService = ctx.getBean(【想要获取的类名】.class);
Account account = accountService.findByUsername("zhangsan");
System.out.println(account);
}
二、事务管理
作用:在数据层或业务层一系列数据库操作保证同成功同失败
1.在service接口上添加Spring事务管理@Transactional
public interface AccountService {
@Transactional
void transfer(String out,String in,Double money);
}
2.设置事务管理器
在JdbcConfig类里
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager;
}
3.SpringConfig类添加事务允许
@EnableTransactionManagement
1、入门四步
第四步改进后:
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{
//Spring容器加载
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
//SpringMVC容器加载
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
//路径拦截
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//处理Post的中文乱码
@Override
protected Filter[] getServletFilters() {
//只能处理post的乱码
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
}
2、注意bean的加载控制
因为springMVC和Spring的功能不同
-
SpringMVC加载controller层的bean
-
Spring加载service和dao层的bean
3、get和post请求
4、不同请求参数下的使用
1)pojo实体类参数
2)嵌套的pojo实体类参数
3)数组参数
4)集合参数
5)接收JSON参数
第一步添加JSON依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
第二步
第三步postman选择请求体为JSON格式
第四步参数前面添加@RequestBody
public String common(@RequestBody List<String> name)
注意:pojo参数和集合参数都可以用JSON来传参
pojo参数
{
"name":"itcast",
"age":18
}
集合
[
{"name":"itcast","age":18},
{"name":"itcast","age":18}
]
6)日期型参数
public String dataParam(@DataTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") Data data)
四、REST风格
1、简介
2、请求参数注解
@RequestParam @RequestBody @PathVariable
△@RestController = @ResponseBody + @Controller
五、SSM整合
1、目录
2、依赖包导入
<dependencies>
<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.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>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
3、各配置类信息
1)SpringConfig
@Configuration
@ComponentScan({"com.itheima.service","com.itheima.dao"})
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MybatisConfig.class})
@EnableTransactionManagement
public class SpringConfig {
}
2)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.setUrl(url);
dataSource.setPassword(password);
dataSource.setDriverClassName(driver);
dataSource.setUsername(username);
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager ds = new DataSourceTransactionManager();
ds.setDataSource(dataSource);
return ds;
}
}
3)MybatisConfig
public class MybatisConfig {
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setDataSource(dataSource);
ssfb.setTypeAliasesPackage("com.itheima.domain");
return ssfb;
}
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.itheima.dao");
return msc;
}
}
4)SpringMvcConfig
@Configuration
@ComponentScan("com.itheima.controller")
@EnableWebMvc
public class SpringMvcConfig {
}
5)ServletContainersInitConfig
mvc容器
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//处理Post的中文乱码
@Override
protected Filter[] getServletFilters() {
//只能处理post的乱码
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
}
4、表现层数据封装
就是将后端向前端返回的数据按照统一的样式返回过去
可以再定义一个返回码
public class Code {
public final static Integer SAVE_OK = 20011;
public final static Integer DELETE_OK = 20021;
public final static Integer UPDATE_OK = 20031;
public final static Integer GET_OK = 20041;
public final static Integer SAVE_ERR = 20010;
public final static Integer DELETE_ERR = 20020;
public final static Integer UPDATE_ERR = 20030;
public final static Integer GET_ERR = 20040;
public final static Integer SYSTEM_ERR = 50001;
public final static Integer SYSTEM_TIMEOUT_ERR = 50002;
public final static Integer BUSINESS_ERR = 60002;
}
5、异常处理器
运用AOP切面思想对Controller进行增强
可以集中统一的处理项目中的异常
通常写在表现层
/**
* 异常处理器
* @RestControllerAdvice 用来代表对RestController进行增强
* @ExceptionHandler 用来定义当前方法用来出来哪一种异常
*/
@RestControllerAdvice
public class ProjectExceptionAdvice {
@ExceptionHandler(Exception.class)
public Result doException(Exception ex){
System.out.println("嘿嘿,异常你被我拦截到了");
return new Result(500,null,"出现异常");
}
}
6、拦截器
1)入门
2)拦截器思想
六、SpringBoot
springboot是在spring和SpringMVC的基础上再次简化开发,加快开发速度的
其设计目的是用来简化Spring应用的初始搭建和开发过程
好处是完全不需要再写spring和SpringMVC的配置类了
1、快速创建
2、启动方式
3、基础配置
4、整合Mybatis
页面放在resources目录下的static目录里
5.全局异常处理器
/**
* 全局异常处理器,处理项目中抛出的业务异常
*/
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
/**
* 捕获业务异常
* @param ex
* @return
*/
@ExceptionHandler
public Result exceptionHandler(BaseException ex){
log.error("异常信息:{}", ex.getMessage());
return Result.error(ex.getMessage());
}
}
七、MybatisPlus
1、入门
1)添加起步依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2)配置数据库信息
spring:
datasource:
url: jdbc:mysql://localhost:3306/testdb?useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: xzx2003.701@
type: com.alibaba.druid.pool.DruidDataSource
3)继承BaseMapper
2、分页查询
①设置分页拦截器作为Spring 管理的bean
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件。如果你不配置,分页插件将不生效
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mpi = new MybatisPlusInterceptor();
mpi.addInnerInterceptor(new PaginationInnerInterceptor());
return mpi;
}
}
开启mybatis-plus运行日志
mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3、条件查询
lt: less than 小于 gt: greater than 大于
4、清除日志
八、Swagger
导入依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
然后添加一个配置类
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) //添加ApiOperiation注解的被扫描
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title(”swagger和springBoot整合“).description(”swagger的API文档").version("1.0").build();
}
}
最后访问本地链接