SpringBoot使用
1.引入标签约定版本
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
2.引入依赖(想要开发web场景)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3.创建主程序
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
4.创建Controller
//@RestController等价于写@ResponseBody @Controller
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello,SpringBoot!";
}
}
5.运行主程序
访问http://localhost:8080/hello,页面显示hello,SpringBoot!
Spring配置文件application.properties
可以配置的所有内容官网地址:https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties
简化部署
1.添加如下插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.0.0.RELEASE</version>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
2.按照下图部署
控制仲裁版本
从pom.xml文件中找到spring-boot-starter-parent点击进入,找到spring-boot-dependencies点击进入,查看想要用的软件的版本号是否符合,不符合将标签复制到pom.xml文件,更改版本号
<properties>
<mysql.version>5.1.45</mysql.version>
</properties>
各种启动器
-
spring-boot-starter-* : *代表各种场景
-
只要引入starter,这个场景的所有需要的依赖会自动引入
-
官网地址:https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter
-
第三方场景启动器:thirdpartyproject-spring-boot-starter
-
所有场景启动器最底层的依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.0.0.RELEASE</version> <scope>compile</scope> </dependency>
扫描规则
- 主程序及子包下自动扫描
- 利用scanBasePackages属性更改扫描范围
@SpringBootApplication(scanBasePackages = "com.hsp")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
- 使用@ComponentScan(“com”)指定扫描路径
//@SpringBootApplication等同于@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan("com.hsp")
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.hsp")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
加载到容器
-
利用@Configuration告诉SpringBoot这是一个配置类
@Configuration public class MyConfig {}
-
使用@Bean,默认以方法名作为组件id,返回类型就是组件类型,返回的值就是容器中的实例
@Configuration public class MyConfig { //@Bean("自定义名称"),默认是单实例的 @Bean public User user(){ return new User("zhangsan",22); } }
-
@Import({User,Student}),默认名称为全类名
@Import({User,Student}) @Configuration public class MyConfig { @Bean public User user(){ return new User("zhangsan",22); } }
4.@Conditional条件注入,符合某种条件后添加组件
属性读取
1.通过@ConfigurationProperties(prefix = “”)直接读取
@Configuration
public class jdbcConfig {
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource source(){
//SpringBoot会匹配前缀,自动注入DataSource属性
DruidDataSource dataSource = new DruidDataSource();
return dataSource;
}
}
2.通过配置类读取
2.1配置类
@ConfigurationProperties(prefix = "jdbc")
public class jdbcProperties {
private String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
2.2读取
@Configuration
@EnableConfigurationProperties(jdbcProperties.class)
public class jdbcConfig {
@Bean
public DataSource source(@Autowired jdbcProperties jdbc){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(jdbc.getUrl());
return dataSource;
}
}
拦截器
1.写拦截器类
public class LoginInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
logger.debug("处理器执行前执行!");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
logger.debug("处理器执行后执行!");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
logger.debug("跳转后执行!");
}
}
2.通过实现WebMvcConfigurer,实现拦截器
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Bean
public LoginInterceptor loginInterceptor() {
return new LoginInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
}
}
整合jdbc
1.引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
</dependencies>
2.配置application.properties参数
# 连接四大参数
spring.datasource.url=jdbc:mysql://localhost:3306/mytest
spring.datasource.username=root
spring.datasource.password=root
# 可省略,SpringBoot自动推断
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.hikari.idle-timeout=60000
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.minimum-idle=10
3.写数据库对应bean类
4.写dao层去调用
@Repository
public class jdbcdao {
@Autowired
private JdbcTemplate jdbcTemplate;
public List<User> findAll(){
//new BeanPropertyRowMapper<>(User.class)可以把同名字段赋值给属性
return jdbcTemplate.query("select * from tb_user",new BeanPropertyRowMapper<>(User.class));
}
}
5.测试方法
@RunWith(SpringRunner.class)
@SpringBootTest
public class jdbcdaoTest extends TestCase {
@Autowired
private jdbcdao jdbcDao;
@Test
public void testFindAll() {
jdbcDao.findAll().forEach((user -> {
System.out.println(user);
}));
}
}
整合Mybaits
1.引入依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<!--非官方,所以需要写版本-->
<version>1.3.2</version>
</dependency>
2.配置application.properties参数
# mybatis 别名扫描
mybatis.type-aliases-package=com.lxs.domain
# mapper.xml文件位置,如果没有映射文件,请注释掉
mybatis.mapper-locations=classpath:mappers/*.xml
3.写dao层接口
//可改为主程序上写@MapperScan("com.hsp.dao")
@Mapper
public interface UserDao {
public List<User> findAll();
}
4.写mapper文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hsp.dao.UserDao">
<select id="findAll" resultType="com.hsp.bean.User">
select * from tb_user
</select>
</mapper>
5.测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserDaoTest {
@Autowired
private UserDao dao;
@Test
public void findAll() {
List<User> all = dao.findAll();
for (User user : all) {
System.out.println(user);
}
}
}