一、介绍
Spring 框架是一个资源整合的框架,可以整合一切可以整合的资源(Spring 自身和第三方),是一个庞大的生态,包含很多子框架:Spring Framework、Spring Boot、Spring Data、Spring Cloud…… 其中Spring Framework是核心。
SSM框架
- Spring Framework框架
- Spring MVC框架
- Mybatis框架
1.Spring Framework
包含三个子框架:IoC(控制反转),AoP(面向切面编程),Spring MVC子框架
java对象和Spring Bean 对象是一样的,只是创建的人不一样
1.1 IoC
1)IoC是控制反转的思想,反转资源的获取方向
将对象的创建和管理交给框架完成,将程序员解放出来
2)实现:通过IoC容器和DI依赖注入,其中IoC容器的实现是由ApplicationContext接口实现,这个接口可以是AnnocationConfigApplicationContext 和 ClasspathXmlApplicationContext来实现
IoC容器的创建:
通过注解的方式和xml文件配置的方式进行实现
3)常用注解:(自动创建Bean对象)
类上:
①@Component
表示未分层
②@Controller
表示在控制层,负责接受请求和返回响应
③@Service
表示在业务层,负责业务逻辑处理
④@Repository
表示在数据访问层,负责数据库的交互
1.2DI依赖注入注解
① @Value(“注入值”)
属性,set方法上
②@Autowired
属性、set方法、构造方法上
对象类型或接口类型依赖注入
③@Qualifier(value=“对象名”)
根据Bean对象的名称进行注入,一个接口多个实现类时使用
面试题:
@Autowired注解和@Resource的区别
-
前者是Spring Framework的注解,后者则是JDK的标准注解
-
@Autowired注解只能根据类型装配,一个接口多个实现类时需要结合Qualifier进行装配
-
@Resource注解如果制定了name参数,参数和Bean对象名一致,则根据name对应的Bean对象名进行装配;不一致则根据类型装配
-
@Resource未指定name参数,则把属性名作为Bean对象名称进行装配
2.Bean对象生命周期
2.1生命周期
1)实例化,通过构造方法实现
2)属性赋值,set方法实现
3)初始化,@PostConstruct注解执行初始化的方法
4)使用 context.getBean(类名.class)
5) 销毁,@PreDestroy注解执行销毁之前的方法
2.2 引入外部属性文件
1)创建配置文件,放在resources目录下,.yml、.properties、.yaml结尾
2)通过@PropertySource(“配置文件路径”)引入
3)$(配置名称)获取具体配置
2.3 自动扫描
工程中配置文件层config的配置文件SpringConfig
/**
Configuration注解:表示当前类为配置类,Spring自动加载
ComponentScan注解:自动扫描注解,该包以及子孙包中的所有的类,为其创建Bean对象
MappingScan注解,自动扫描,为该包里的所有接口自动加上@Mapping注解并实例化
**/
@Configuration
@ComponentScan("扫描指定包的路径")
@MappingScan("扫描指定包的路径")
public class SpringConfig{
}
3.Mybatis框架
是一个开源的数据持久层框架,java对象与关系型数据库之间进行映射的方式,可以用xml配置文件或注解方式进行sql映射
3.1ORM
对象关系映射,用于将对象模型与关系型数据库之间进行映射
Java | 数据库 |
---|---|
一个类 | 一张表 |
一个类属性 | 一个表字段 |
一个对象 | 一条表记录 |
Java中的属性数量和类型一定要对应数据库中的字段和类型,名字可以不一致
3.2流程
- 创建工程,勾选mybatis、mysql,lombok依赖
- 配置数据库连接信息application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/库名?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
spring.datasource.username=root
spring.datasource.password=root
- 创建实体类pojo.entity.类名
//对应数据表中的属性
@Data //包含了构造方法、重写toString、get、set方法
public class Weibo {
private Long id;
private String content;
private Date created;
private Long userId;
}
- 创建接口和接口方法 mapper.xxxMapper
@Mapper
public interface XxxMapper {
int insertUser(User user);
}
- 创建mapper映射文件 xxxMapper.xml
<?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="">
<insert id="对应的mapper方法名">
(增)sql语句
</insert>
<select id=".." resulttype="结果返回的实体类目录(可以是entity、vo、dto)">
查询sql语句
</select>
......
</mapper>
- 测试
@SpringBootTest
public class WeiboTests {
//自动装配
@Autowired
private XxxMapper xxxMapper;
//下面写测试方法:
//(示例)
void insertWeiboTest(){
Weibo weibo = new Weibo();
weibo.setContent("明天不加班了,哎");
weibo.setCreated(new Date());
weibo.setUserId(100L);
System.out.println(weiboMapper.insertWeibo(weibo));
}
运行测试方法查看数据表中是否修改了