Springboot简介
- Springboot是spring家族的一员,同时也对spring,springmvc,hibernate,struts2框架进行了整合,内置了Tomcat容器,使得Springboot使用起来更加快捷、简便、启动速度快等特点。
Springboot启动类(main(),启动方法之一)
@SpringBootApplication
@MapperScan(basePackages = "cn.itcast.mapper")
public class BootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(BootDemoApplication.class,args);
System.out.println("main method is running!");
}
}
启动类中配置了 @SpringBootApplication注解,相当于拥有了 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解;
@SpringBootConfiguration启动了SpringBoot的启动配置;
@EnableAutoConfiguration是你引入什么依赖,Springboot就给你配置什么框架的配置;
@ComponentScan组件扫描器;自动扫描本包以及本包下面所有文件夹的注解;
案例一、Springboot之HelloWorld
@RestController
public class HelloController {
@RequestMapping("hello")
public String hello(){
System.out.println("hello method is running!");
return "hello,welcome SpringBoot Family!";
}
}
案例二、Springboot引入DataSource(一)
自定义一个文件,比如: jdbc,properties
内容如下:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/yun6?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
自定义一个类,比如:JdbcConfig:
@Configuration // 这是一个配置类
@PropertySource(value = "classpath:application.properties")//加载外部文件
public class JdbcConfig {
@Value(${jdbc.driverClassName})
private String driverClassName;
@Value( ${jdbc.url})
private String url;
@Value( ${jdbc.username})
private String username;
@Value( ${jdbc.password})
private String password;
@Bean
public DataSource getDataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}}
controller类:
@RestController
public class HelloController {
@Autowired
private DataSource dataSource;
@RequestMapping("hello")
public String hello(){
System.out.println("hello method is running!");
return "hello,welcome SpringBoot Family!";
}
}
当application.properties文件与application.yml文件同时存在时,取两个文件中的并集。
案例三、Springboot引入DataSource(二)
自定义一个application.properties文件;
创建一个类:比如:JdbcProperties类:
@Component //第三种方式
@ConfigurationProperties(prefix = "jdbc")
@Data
public class JdbcProperties {
private String driverClassName;
private String url;
private String username;
private String password;
}
创建JdbcConfig类:
@Configuration
//@EnableConfigurationProperties(JdbcProperties.class)//第二种切换到第三种
public class JdbcConfig {
@Autowired
private JdbcProperties prop;
@Bean
public DataSource getDataSource(/*JdbcProperties prop*/){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(prop.getDriverClassName());
dataSource.setUrl(prop.getUrl());
dataSource.setUsername(prop.getUsername());
dataSource.setPassword(prop.getPassword());
return dataSource;
}
案例四、Springboot引入DataSource(四)
@Configuration
public class JdbcConfig {
@Autowired
private JdbcProperties prop;
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource getDataSource(){
return new DruidDataSource();
}
yaml/yml文件
默认读取的文件是application.yaml
server:
port: 8088 #
servlet:
path: /
logging:
level: #设置debug的等级
cn.itcast: debug
org.springframework: debug
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/yun6?characterEncoding=utf-8
username: root
password: root
mybatis:
configuration:
map-underscore-to-camel-case: true #开启自动驼峰匹配模式
type-aliases-package: cn.itcast.pojo #pojo所在包别名,在xml中可以省略包名
mapper-locations: mapper/*.xml #mapperxml映射地址
pom文件
<!--springboot依赖版本管理器,有了它,可以帮我们自动依赖版本文件-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
</parent>
<dependencies>
<!--依赖于web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--配置Alibaba的druid数据源-->
<!--<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>-->
<!--配置lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--连接池-->
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>-->
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis-->
<!--<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>-->
<!--引用通用mapper之后,不需要mybatis和连接池-->
<!--通用mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.3</version>
</dependency>
<!--Springboot测试jar-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
--如果使用了mybatis的通用mapper,那么不需要mybatis、连接池、数据源依赖,mybatis中的通用mapper中自带的有mybatis、连接池、数据源依赖,如果手动依赖,那么会产生版本冲突。
案例五,使用mybatis的通用mapper
1、自定义pojo
@Table(name = "tb_student")//关联哪个表
public class Student {
@Id//这是一个主键标识
@KeySql(useGeneratedKeys = true)//每次修改后返回id
private Integer id;
private String name;
private Integer age;
@Transient//不是必须的
private String remark;
}
2、service层
public interface StudentService {
public void save(Student student);
public Student findById(Integer id);
}
3、service实现类
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper mapper;
@Transactional//为增删改加入事务
@Override
public void save(Student student) {
mapper.insert(student);
}
@Override
public Student findById(Integer id) {
return mapper.selectByPrimaryKey(id);
}}
4、mapper层
//使用的是哪个pojo,泛型中就填入什么pojo
public interface StudentMapper extends Mapper<Student> {
}
- 若使用了默认的mapper通用类,那么@MapperScan所在的包要切换到tx包。
拦截器
1、自定义一个类,实现自HandlerInterceptor类并实现其中的preHandle、postHandle、afterCompletion方法。
@Slf4j//使用Slf4j注解,可以不用定义log对象,定义对象和使用@Slf4j二选一即可
public class MyInterceptor implements HandlerInterceptor {
private static final Logger log = LoggerFactory.getLogger(MyInterceptor.class);
//之前运行,前置通知
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.debug("preHandle method is running...");
return true;
}
//执行相关结果和执行
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
log.debug("postHandle method is running...");
}
//之后运行,后置通知
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
log.debug("afterCompletion method is running...");
}}
2、自定义一个类,并实现自WebMvcConfigurer接口,重写addInterceptors方法,添加对应的拦截器,将刚刚创建的自定义Handler创建出来,并指定路径进行拦截。
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
}
}