Spring Boot

Spring Boot

1.自动配置原理

启动类:
@SpringBootApplication
public class Application{
	public static void main(Sting[] args){
		SpringApplication.run(Application.class, args);
	}
}
①注解:
	@SpringBootApplication组合注解:
		@SpringBootConfiguration
		@EnableAutoConfiguration
		@ComponentScan
		解释:
		@SpringBootConfiguration:如果用了SpringBootApplication就会被spring当作一个配置类;
		@EnableAutoConfiguration:辨别标注了@Configuration注解的类,识别扫描到这些配置类;
		@ComponentScan:是一个组件扫描,扫描当前包及其子包里面使用了Spring注解的一些组件
②main方法:
	SpringApplication.run()方法,里面会有getSpringFactoriesInstances()方法,获取工厂实例
	->加载了工厂名称(loadFactoryNames)
	->spring.factories(定义了非常多的自动整合的类,组件:springMVC,redis,数据库的等)
	(@ConditionalOnClass/OnWebApplication条件注解,如果满足了就会实例化该类)

③如果需要修改组件配置
Spring Boot_第1张图片

总结:
1.在'MEtA-INF\Spring.factories'文件中定义了很多自动配置类;
2.可以根据在pom.xml文件中添加的启动器依赖自动配置组件;
3.通过如下流程可以修改application配置文件,改变自动配置的组件默认参数:

2.Spring Boot整合SSM框架

①lombok应用

使用lombok的注解实现pojo类的简化
使用SpringBoot整合SSM工程;需要使用到数据库数据。
	*.将数据库表数据导入到数据库中(springboot_test);
	*.编写数据库表对应的实体类;一般情况下需要编写get/set/toString等方法会耗时并且会让实体类看起来比较臃肿。可以使用lombok插件对实体类进行简化。
lombok是一个插件工具类包,提供了一些注解@Data、@Getter等这些注解去简化实体类中的构造方法、get/set等方法的编写。
	1.在IDEA中安装lombok插件;
	2.添加lombok对应的依赖到项目pom.xml文件;

	org.projectlombok
	lombok

3.改造实体类使用lombok注解。
	在编译阶段会根据注解自动生成对应的方法
	实体类注解:
		@Data(get、set、hashCode、equals、toString等方法)
		@Getter(自动提供getter方法)
		@Setter(自动提供setter方法)
		@NoArgsConstructor(为类提供一个无参的构造方法)
		@AllArgsConstructor(为类提供一个全参的构造方法)
		@Slfj(自动在bean中提供log变量,其实用的是slf4j的日志功能)等

②Spring Boot整合-SpringMVC端口和静态资源

1.修改tomcat端口
	查询***.Properties,设置配置项(前缀名+类变量名)到application配置文件中。
	autoconfigure:2.1.5.RELEASE->web->ServerProperties(前缀server)
2.访问项目中的静态资源
	静态资源放置的位置;放置静态资源并访问这些资源。
	autoconfigure:2.1.5.RELEASE->web->ResourProperties(classPath:/META-INF/resources/;
													   classPath:/resources/;
													   classPath:/static/;
													   classPath:/public/)

③Spring Boot 整合-springMVC拦截器

可以把Spring Boot项目中配置自定义SpringMVC拦截器
	1.编写拦截器(实现一个接口HandlerIntercepter);
	2.编写配置类实现WebMvcConfigurer,在该类中添加各种组件;

④Spring Boot整合-事务和连接池

配置Spring Boot自带默认的hikari数据库连接池和使用@Transactional注解进行事务配置
*.事务配置
	1.添加事务相关的启动器依赖,mysql相关依赖;

	org.springframework.boot
	spring-boot-starter-jdbc


	mysql
	mysql-conector-java
	5.1.46
	
	2.编写业务类UserService使用事务注解@Transactional
*.数据库连接池hikari配置
	因为是自带默认的,所以只需要在application配置文件中指定数据库相关参数

⑤Spring Boot整合-Mybatis

配置Mybatis在Spring Boot工程中的整合包,设置Mybatis的实体类别名,输出执行sql语句配置项
1.添加启动器依赖;

	org.mybatis.spring.boot
	mybatis-spring-nppt-starter
	2.0.1

2.配置Mybatis:实体类别名包,日志,映射文件等;
#实体类别名包路径
Mybatis.type-aliases-package:cn.yang.pojo
#映射文件路径
Mybatis.mapper-locations:classpath:mappers/*.xml
Mybatis.configuration.log-impl:org.apache.ibatis.logging.stdout.StdOutImpl
3.配置MapperScan
		@SpringBootApplication
		//扫描mybatis所有业务mapper接口
		@MapperScan("cn.yang.mapper")
		public class Application{
			public static void main(Sting[] args){
				SpringApplication.run(Application.class, args);
			}
		}

⑥Spring Boot整合-通用Mapper

配置通用Mapper组件到Spring Boot项目中并使用Mapper接口
	通用Mapper:可以实现自动拼接sql语句;所有mapper都不需要编写任何方法也就是不用编写sql语句。可以提高开发效率。
		1.添加启动器依赖;

	tk.mybatis
	mapper-spring-boot-starter
	2.1.5

		2.改造UserMapper继承Mapper;
			extends Mapper
		3.修改启动引导类Application中的Mapper扫描注解;
@SpringBootApplication
//扫描mybatis所有业务mapper接口
@MapperScan("cn.yang.mapper") //import tk.mybatis.spring.annotation.MapperScan
public class Application{
	public static void main(Sting[] args){
		SpringApplication.run(Application.class, args);
	}
}
	4.修改User实体类添加jpa注解;
		@Table(name = "tb_user")
			@Id
			@KeySql(useGeneratedKeys = true) //主键回填
			@Colum(name = "abc") //不符合的驼峰的加
	5.改造UserService实现业务功能;
//UserService:
			@Autowired
			private UserMapper userMapper;
			//根据id查询
			punlic User queryById(Long id){
				return userMapper.selectByPrimaryKey(id);
			}
			//新增保存用户
			public void saveUser(User user){
				//选择性新增,如果属性为空则该属性不会出现在insert语句中
				userMapper.insertSelective(user);                                                              
			}

⑦Spring Boot整合-Junit

在Spring Boot项目中使用Junit进行单元测试UserService的方法
	1.添加启动器依赖;spring-boot-starter-test
	2.编写测试类

⑧Spring Boot整合-redis

在Spring Boot项目中使用Junit测试Redis Template的使用
		1.添加启动器依赖;spring-boot-starter-data-redis
		2.配置application.yml中修改redis的连接参数;(redis需要启动)
			#修改主机地址
			spring.redis.host:localhost
			spring.redis.port:6379
		3.编写测试类应用RedisTemplate操作redis中的五种数据类型(String\hash\set\list\sorted set)
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest{
	@Autowired
	private RedisTemplate redisTemplate;
	public void test(){
		//string 字符串
		//redisTemplate.opsForValue().set("str","baba"); 
		redisTemplate.boundValueOps("str").set("baba");
		System.out.println("str = " + redisTemplate.opsForValue.get("str"));
		//hash 散列
		redisTemplate.boundHashOps("h_key").put("name","baba");			
		redisTemplate.boundHashOps("h_key").put("age","18");
			//获取所有域
		Set set = redisTemplate.boundHashOps("h_key").keys();
		System.out.println("hash散列的所有域:" + set);
			//获取所有值
		List list = redisTemplate.boundHashOps("h_key").values();
		//list列表
		redisTemplate.boundListOps("l_key").leftPush("c");
		redisTemplate.boundListOps("l_key").leftPush("b");
		redisTemplate.boundListOps("l_key").leftPush("a");
		list = redisTemplate.boundListOps("l_key").range(0,-1);
		System.out.println("list列表中所有的元素 : " + list)
		//set 集合
		redisTemplate.boundSetOps("s_key").add("a","b","c");
		set = redisTemplate.boundSetOps("s_key").members();
		System.out.println("set集合中的所有元素 : " + set)
		//sorted set集合
		redisTemplate.boundZSetOps("z_key").add("a","30");
		redisTemplate.boundZSetOps("z_key").add("b","20");
		redisTemplate.boundZSetOps("z_key").add("c","10");
		set = redisTemplate.boundZSetOps("z_key").range(0,-1);
		System.out.println("zset有序集合中所有元素 :" + set);
	}
}

你可能感兴趣的:(自学技术,java,spring,spring,boot)