Spring5.0学习知识总结(spring 5)

  本篇文章为你整理了Spring5.0学习知识总结(spring 5)的详细内容,包含有spring5教程 spring 5 spring5实战 spring基础知识 Spring5.0学习知识总结,希望能帮助你了解 Spring5.0学习知识总结。

  ## spring总结
### 1 、spring
#### 1.1 spring 简介
简化了项目的开发、但配置依然很繁琐!!!
扩展:

  SSH:Struct2 + Spring + Hibernate

  SSM: SpringMvc +Spring + Mybatis

  spring官网:https://spring.io/

  spring下载: http://repo.spring.io/libs-release-local/org/springframework/spring/

  maven配置:https://mvnrepository.com/
![在这里插入图片描述](https://img-blog.csdnimg.cn/c3e91a155ab74f84907acde844fb6a81.png#pic_center)
```java
!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --
dependency
groupId org.springframework /groupId
artifactId spring-webmvc /artifactId
version 5.3.20 /version
/dependency

   !-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc --
dependency
groupId org.springframework /groupId
artifactId spring-jdbc /artifactId
version 5.3.20 /version
/dependency
```

  #### 1.2 优点

  一句话:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架

  #### 1.3 spring的组成(重要)

   ![img](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vaGFveXVubHdoL1R5cG9yYWltYWdlL3Jhdy9tYXN0ZXIvaW1nLzIwMjAwODIxMDc1NDM4LnBuZw?x-oss-process=image/format,png)

  #### 1.4 扩展

  spring- springboot- springcloud- spring网格

  框架的一般原则:约定 配置 编码

  学习springcloud要先学springboot、spring、java基础依次类推~~

  ### 2 、IOC(重要)

  原始:程序主动创建对象、控制权在程序员上

  spring:使用set注入(lombok简化开发springboot)程序不在具有主动性、而是变成了被动接受的对象!

  #### 2.1 IOC的本质

  IOC是spring的核心内容!可以使用配置文件(xml)和注解的方式实现IOC、其实现方式是依赖注入(DI)

  ```java
public class hello(){
private String str;
getter/setter(略)
toString(略)
}
```

  ```xml
xml:官网复制
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
!--使用spring来创建对象、在spring这里都称为bean
类型 变量名 = new 类型
Hello hello = new Hello();
id =变量名
> property 相当于给对象中的属性设置一个值。
bean = 对象 new hello();
name:
value:具体的值、基本数据类型
ref:应用spring容器中创建好的对象
--
bean id="hello" calss="com.pojo.hello"
property name="str" value="Spring" /property
/bean
/beans

  ```

  ```
public class testMain(){
public static void main(String[] args){
//获取spring的上下文对象 固定写法
ApplicationContext context = new ClassPathApplicationContext(beans.xml)
//对象都在spring中管理了、我们要使用直接从对象里面取出来 就可以了。
Hello hello = (hello) context.getBean("hello")
System.out.println(hello)
}
}
```

  ```java
public class testlh(){
public static void main(String[] args){
//获取ApplictionContext:拿到spring的容器
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//容器在手、天下我有、需要什么get什么
UserServiceImpl userserviceimpl = context.getBean("UserServiceImpl");
userServiceImpl.getUser();
}
}
```

  IOC:对象由spring来创建、管理、装配

  ### 3、spring的创建方式

  ```java
public class User(){
private String name;
getter/setter
toString
}
```

  ```java
public class MyTest(){
public static void main(String[] args){
Application context = new ClassPathXmlApplicationContext("beans.xml")
User user = (User) context.getBean("user");
user.show();
}
}
```

  ```xml
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
bean id="user"
property name="name" value="lihui"
/property
/bean
/bean
```

  IOC创建对象的方式:(重要)

  1、使用无参构造创建对象、默认

  2、使用有参构造创建对象:三种方式

  ```xml
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
!--
第一种方式:下标赋值
--
bean id="user"
constrctor-arg index="0" value="lihui" /constrctor-arg
/bean
!--
第二种方式:不建议使用、通过类型创建的
--
bean id="user"
constructor-arg type="java.lang.String" value=“lihui /constructor-arg
/bean
!--
第三种方式:直接通过参数名称设置(常用)
--
bean id="user"
constructor-arg name="name" value="lihui" /constructor-arg
/bean
/bean
```

  总结:在配置文件加载的时候、容器中管理的对象就已经开始初始化了!!!

  ### 4、Spring配置

  #### 4.1 别名、配置、import

  ```xml
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
!--别名:名字和数据库中的名字一样,如果添加了别名、我们也可以通过别名来获取这对象--
alias name="user" alias="userNew" /alias
!--
配置:
id:bean的唯一标识符,也就是相当于我们学的对象名
class:bean 对象所对应的全限定名:包名+类型
name:也是别名,而且name更高级、可以同时取多个别名、
可以通过空格、逗号、分号进行分割!!!
--
bean id="userId" name="userId2" /bean
import resource="applicationContext.xml" /import
import resource="beans.xml" /import
import resource="beans1.xml" /import
import resource="beans2.xml" /import
/beans
```

  ```java
public class MyTest(){
public static void main(String[] args){
Application context = new ClassPathXmlApplicationContext("beans.xml")
User user = (User) context.getBean("user,u2,u3,u4");
user.show();
}
}

  ```

  ### 5、依赖注入(DI)

  #### 5.1 构造器注入

  #### 5.2 Set注入(重要)

  依赖注入:set注入

  ​ 依赖:bean对象的创建依赖于容器

  ​ 注入:bean对象中的所有属性、由容器来注入

  【环境搭建】

  ```java
public class Address(){
private String address;
...
}

  ```

  ```java
public class Student(){
//各种不同属性的注入方式
private String name;
private Address address;
private String[] books;
private List String hobbys;
private Map String,Sring card;
private Set String games;
private String wife;
private Properties info;
}

  ```

  ```xml
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
!--第一种:普通值注入:,value--
bean id="student"
property name="name" value="lihui" /property
/bean
!--第二种:bean注入 ref--
bean id="address" /bean
!--第三种:数组注入 ref--
property name="books"
arrar
value hahh /value
value youyuio /value
value kafghj /value
value oiuh /value
/arrar
/property
!--list注入--
property name="list"
list lkgjha /list
list ioregh /list
list oaigh /list
/property
!--map注入--
property name="map"
map
entry key="id" value="h1234" /entry
entry key="akfg" value="dlakgh" /entry
/map
/property
!--set注入--
property name="set"
set
value algh /value
value cos /value
value 32oriu /value
/set
/property
!--null注入--
property name="wife"
null /null
/property
!--properties注入--
property name="info"
props
prop key="ihi" 2345 /prop
prop key="afskl" jalfkj /prop
prop key="weil" /prop
prop key="aklegja" /prop
/props
/property
beans
```

  ```java
public class testStudent(){
public static void main(String[] args){
ApplicationContext context = new ClassPathXmlContext("bean.xml");
Student student = (Student)context.getBean("student")
System.out.println(student.getName());
}
}
```

  ```xml
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
!--扩展方式注入:
注意点:p命名和c命名不能直接使用,需要导入xml约束!!!
--
!--C命名和P命名(官网添加)--
!--p命名空间注入,可以直接注入属性的值:property--
bean id="user" p:name="lihui" p:age="18"
/bean
!--c命名空间注入,可以通过构造器注入:construct-args--
bean id="user" c:name="lihui" c:age="18"
/bean
/beans
```

  ```
p命名空间和c命名空间的使用:
......

  ```

  #### 5.3 bean的作用域

  共六种:

  1、单列默认(默认)

  scope="singleton"

  2、原型模式:每此从容器中get的时候、都会产生一个新对象~

  scope="prototype"

  3、其余的request、session、application、这些都只在web开发中使用!!!

  ### 6、Bean的自动装配

  自动装配是spring满足bean依赖的一种方式。

  spring会在上下文中自动寻找、并自动给bean装配属性

  

  在spring中有三种装配的方式

  1、在xml中显示的配置

  2、在java中显示装配

  3、隐式的自动装配bean【重要】

  #### 6.1、测试

  ```java
public class Cat(){
public void shout(){
System.out.println("miao~~~");
}
}
```

  ```java
public class Dog(){
public void shout(){
System.out.println("wang~~~~");
}
}
```

  ```java
public class People(){
private Cat cat;
private Dog dog;
private String name;
.......
}
```

  ```xml
bean.xml:
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
bean id="cat" /bean
bean id="dog" /bean
bean id="people"
property name="name" value="lihui" /property
property name="dog" value="dog" /property
property name="cat" value="cat" /property
/bean
/beans
```

  ```java
public class test(){
@Test
public void test1(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
People people = context.getBean("people",People.class);
people.getDog().shout();
people.getCat().shout();
}
}
```

  #### 6.2、自动装配:autowire(byName、byType)

  ```xml
bean.xml:
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
bean id="cat" /bean
bean id="dog" /bean
!--
byName:会自动在容器上下文中查找,和自己对象set方法后面对应的值的bean-id
byType:会自动在容器上下文中查找,和自己属性类型相同的bean
都有弊端:byName:要保证所有bean的id唯一、并且这个bean需要和自动注入的属性的set方法的值一致。
byType:需要保证所有的bean的class唯一、并且这个bean需要自动注入的属性的类型一致
--
bean id="people" autowire="byName" autowire="byType"
property name="name" value="lihui" /property
/bean
/beans
```

  #### 6.3、使用注解实现自动装配(重要)

  jdk1.5以上支持的注解、spring2.5以上支持注解

  要使用注解:

  1、导入约束:xml中配置context约束

  2、配置注解的支持:context:annotation-config/

  ```xml
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
!----!! 学会自己配置xml配置文件 /!----!!
!--配置注解的支持--
context:annotation-config /context:annotation-config
/beans

  ```

  ###### @Autowired

  直接在属性上使用即可!也可以在set方式上使用。

  使用Autowired可以不用编写set方法、前提是自动装配的属性在IOC(Spring)容器中存在,且符合名字byName!

  ```
@Nullable:字段标记了这个属性、
@Autowired(required=false):required的值为false,说明对象可以为空、否则对象不能为空!!!
@Qualifier(value="dog"):如果自动装配的环境毕节复杂,一个注解无法完成时可以用@Qualifier指定装配多个对象
-------------------
@Resource:结合了名字(name)和类型(type)
```

  总结:@Resource和@Autowired的区别?

  - 都是用来自动装配的,都可以实现放在属性字段上
- @Autowired通过byType的方式实现、而且必须要求这个对象存在![常用]
- @Resource默认通过byName的方式实现、如果找不到名字、则通过byType实现、如果两个都找不到就报错!!!
- 执行顺序不同:
- @Autowired 先通过byTpe的方式实现。再通过byName的方式实现
- 如果Autowired不能唯一自动装配实现,则需要通过@Qulifier(value="xxx")来实现
- @Resource 先通过使用byName再通过byType的方式实现!!!

  ### 7、使用注解开发

  在spring4之后、要使用注解开发、必须保证aop的包导入了!!!

  需要导入注解的支持~

  ```xml
beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
!--指定要扫描的包,这个包下的注解就会生效--
context component-scan="com.lh.pojo"/
context:annotation-config /context:annotation-config
/beans
```

  ```java
@Component:组件
@Component
public class User(){
@Value("lihui")
private String name;

@Value("lihui")
private void setName(String name){
this.name=name;
}
}
```

  #### 1、bean

  #### 2、属性如何注入

  #### 3、衍生的注解

  @Component有几个衍生的注解,我们在web开发中会按照mvc三层架构分层!!

  dao:【@Repository】

  service:【@Service】

  controller:【@Controller】

  这四个注解功能一样:都是代表将某个类注入到spring容器中~

  #### 4、自动装配

  ~~~
上面已陈述
~~~

  #### 5、作用域

  ```
@Scope("singleton","property")
```

  #### 6、小节

  - xml与注解

   - xml更加万能,适用于任何场合~,维护相对复杂
- 注解不是自己类使用不了,维护相对复杂

  - xml与注解的最佳实践

   - xml用来管理bean

   - 注解只负责完成属性的注入。

   - 在使用的过程中只需要主要一个问题:要让注解生效,必须开启注解的支持和扫描对应的包

   - ```
!--指定要扫描的包,这个包下的注解就会生效--
context component-scan="com.lh.pojo"/
context:annotation-config /context:annotation-config
```

  ### 8、使用java的方式配置spring

  不使用spring的xml配置,完全使用java来注解来做~~

  javaconfig

  ```java
//这个注解的意思说明这个类被spring接管了,注册到了容器中。
@Component
public class User(){
@Value("lihui")//属性注入值
private String name;
......
}
```

  ```java
@Configuration//这个也会被spring容器托管,注册到spring容器中,因为他也是一个组件,代表这是一个配置类,和beans.xml一样的
@ComponentScan("com.lh.pojo")
@Import("lihui.class")//新特性~~~~
public class lihuiConfig(){
//注册一个bean就相当于,我们之前写的一个bean标签
//这个方法的名字,就相当于bean标签中的id属性
//这个方法的返回值,就相当于bean标签中的class属性
@Bean
public User user(){
return new User(); //就是返回要注入到bean的对象~
}
}
```

  ```java
public class test(){
public static void main(String[] args){
//如果完全使用了配置类方式去做,我们就要通过AnnotationConfig上下文来获取容器,通过配置类的class对象加载~
Application context = new AnnotationConfigApplicationContext(lihui.class);
User getUser =(User) context.getBean("getUser")
System.out.println(getUser.getName());
}
}
```

  这个纯java的配置方式,在springboot中随处可见~~~

  ### 9、AOP(重点)

  #### 9.1 代理模式

  为啥要学习代理模式?

  因为这就是springAop的底层【springAOP和springMVC重要】

  代理模式的分类:

  ~~~~
我---- 中介----- 买房

  ~~~~

  #### 9.2、静态代理:

  角色分析:

  - 抽象角色:一般会使用接口或者抽象类来解决

  - 真实角色:被代理的角色

  - 代理角色:代理真实角色,代理真实角色后,我们一般会做附属操作

  - 客户:访问代理对象的人

   ```java
//租房接口
public interface Rent(){
public void rent();
}
```

   ```java
//房东
public class Host implements Rent(){
public void rent(){
System.out.println("房东要出租房子");
}
}
```

   ```java
public class Client{
public static void main(String[] args){
Host host = new Host();
//代理,代理一般会有一些附属操作~~~
Proxy proxy = new Proxy(host);
proxy.rent();
}
}
```

   ```java
public class Proxy{
private Host host;
public Proxy(){}
public proxy(Host host){
this.host=host;
}
public void rent(){
host.rent();
}
//看房
public void seeHose(){
System.out.println("中介带你看房");
}
//收中介费
public void fare(){
Syetem.out.println("收中介费");
}
}
```

   代理模式的好处:

   - 可以是真实角色的操作根据纯粹,不要去关注一些公共的业务

   - 公共业务就交给代理角色,实现了业务的分工

   - 公共业务发生扩展的时候,方便集中管理

   缺点:

   代码量翻倍,开发效率较低~~~

  [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJL1CTEm-1661669913089)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1661652710109.png)]

  #### 9.3、动态代理:

  - 动态代理和静态代理一样,
- 动态代理的代理类是动态生成的,不是我们直接写好的
- 动态代理分为两大类:基于接口的动态代理,基于类的动态代理
- 基于接口----JDK动态代理【建议使用】
- 基于类:cglib
- java字节码实现:javasist

  需要了解两个类:Proxy:代理、InvocationHandler:调用处理程序

  **InvocationHandler**

  ```java
//用这个类,自动生成代理类
public class ProxyInvocationHandler implements InvocationHandle{
//被代理的接口
private Rent rent;
public void setRent(Rent rent){
this.rent=rent;
}
//生成得到代理类
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),rent.getClass().getInterfaces(),this);
}
//处理代理实例,并返回结果
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
//动态代理的本质,就是使用反射机制实现!!!
Object result = method.invoke(rent,args);
return result;
}
//添加
public void seeHose(){
System.out.println("hafgjkllj");
}
}

  ```

  ```java
//真实角色
public class true(){
Host host = new Host();
//代理角色
ProxyInvocationHandler pih = new ProxyInvocationHandler();
pih.setRent(host);
Rent proxy = (Rent) pih.getProxy();
proxy.rent();
}

  ```

  动态代理的好处:

  - 具有静态代理的所有好处
- 一个动态代理类代理的是一个接口,一般就是对应的一个业务。
- 一个动态代理类可以代理多个类,只有实现了接口。

  #### 9.3、AOP(面向多面编程)

  #### AOP的实现方式一

  ```xml
!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver --
dependency
groupId org.aspectj /groupId
artifactId aspectjweaver /artifactId
version 1.9.6 /version
scope runtime /scope
/dependency

  ```

  ```java
public interface UserService{
public void add();
public void delete();
public void update();
public void select();
}

  ```

  ```java
public class UserServiceImpl implements UserService{
public void add(){
sout("...")
}
public void delete(){
sout("...")
}
public void update(){
sout("...")
}
public void select(){
sout("...")
}
}

  ```

  方式一:使用spring的接口【主要是springAPI接口实现】

  ```java
public class log implements MethOdBeforeAdvice{
//method:要执行的目标对象的方法
//args:参数
//target:目标对象
public void before(Method method,Object[] args,Object target) throws Throwable{
sout(target.getClass().getName()+method.getMethod());
}
}

  ```

  ```xml
//注册bean
bean id="userService"
/bean
//配置aop:需要导入aop的约束
aop:config
//切入点 expression表达式,execution(要执行的位置****)
aop:pointcut id="pointcut" expression="execution(要执行的位置!*****)" /aop:
//执行环绕
aop:advisor advice-ref="afterLog" /aop:
/aop:config

  //自定义类
bean id="diy" calss="com.lh.diy.DiyPointCut" /bean
aop:config
//自定义切面 ref要引用的类
aop:aspect ref="diy"
//切入点
aop:pointcut id="point" expression="execution(* com.lh.service.UserServiceImpl.*(..))"
//通知
aop:before method="before" pointcut-ref="point" /aop:
/aop:
/aop:
/aop:config

  //注解实现
aop:aspectj-autoproxy proxy-target- /aop:aspectj-autoproxy

  ```

  **注:动态代理代理的是接口,不能代理实现类!!!**

  方式二:使用自定义类实现【主要是实现切面】

  ```java
public class DiyPointCut{
public void before(){
sout("...")
}
public void after(){
sout("...")
}
}

  ```

  方式三:注解实现

  ```java
@Aspect//标注这是一个切面
public class AnnotationPointCut{
@Before("execution(* com.lh.UserserviceImpl*(..))")
public void before(){
sout("....")
}
}

  ```

  ### 10、整合Mybatis

  步骤:

  1、导入相关jar包

   - junit
- mybatis
- mysql
- spring相关
- aop织入
- mybatis-spring【new package】
 

  ```xml
dependencies
... 略
/dependencies

  ```

  2、编写配置文件

  3、测试

  #### 10.1、回顾mybatis

  步骤:

  - 编写实体类

   ```java
@Data
public class User(){
private String name;
private Integer age;
}
```

  - 编写核心配置文件

   ```xml
typeAliases
package name="com.lh.pojo" /package
/typeAliases
environments default="development"
environment id="development"
transactionManager type="JDBC" /transactionManager
dataSource type="POOLED"
property name="driver" value="com.mysql.cj.jdbc.Driver" /property
property name="url" value="xxx" /property
property name="username" value="xxx" /property
property name="password" value="xxx" /property
/dataSource
/environment
/environments
mappers
mapper /mapper
/mappers
```

  - 编写接口

   ```java
public interface UserMapper(){
public List User selectUser();
}
```

  - 编写mapper.xml

   ```xml
mapper namespace="com.lh.mapper.UserMapper"
select id="selectUser" resultType="user"
select *from mybatis.user;
/select
/mapper
```

  - 测试

   ```java
public class mytest(){
@Test
public void test(){
String resources ="mybatis-config.xml";
Resources input = Resources.getResourcesAsStream(resources);
......
}
}
```

   #### 10.2 mybatis-spring

   整合mybatis的方式一:

   ```java
!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --
dependency
groupId org.mybatis /groupId
artifactId mybatis-spring /artifactId
version 2.0.6 /version
/dependency
```

   ```xml
//DataSource:使用spring的数据源替换mybatis的配置 c3p0 dbcp druid
//使用spring直接提供的JDBC
bean id="datasource"
property name="driverClassName" value="xxx" /property
property name="url" value="xxx" /property
property name="username" value="xxx" /property
property name="password" value="xxx" /property
/bean
bean id="sqlSessionFactory"
property name="" value="" /property
property name="" value="" /property
/bean
```

  

  整合mybatis的方式二:(略)

  ### 11、声明式事务

  #### 1、事务?

  - 把一组业务当做一个业务来做,要么成功,要么失败!
- 事务在项目开发中,十分重要,设计到数据的一致性问题,不可马虎~~
- 确保完整性和一致性

  事务的ACID原则:

  - 原子性
- 一致性
- 隔离性
- 多个事务可能操作同一个资源,防止数据损坏
- 持久性
- 事务一旦提交,无论系统发生什么问题,结果都不在被影响。

  

  以上就是Spring5.0学习知识总结(spring 5)的详细内容,想要了解更多 Spring5.0学习知识总结的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: