MyBatis怎么配置延迟加载

在mybatis的全局配置中进行配置

1
2
3
4
5
6
<settings>
<!--开启全局的懒加载-->
<setting name="lazyLoadingEnabled" value="true"/>
<!--关闭立即加载,其实不用配置,默认为false-->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>

lazyLoadingEnabled:

这个属性是开启全局延迟加载,不用手动在单个关联中配置。

aggressiveLazyLoading:

这个参数的含义是,当该参数设置为true时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载,反之,每种属性都将按需加载。当我们从数据库中查询到数据后会给实体类中关联对象赋值,会调用关联对象属性的setter方法,这会触发上述规则,导致本该延迟加载的属性直接加载,为了避免这种情况,需要将其设置为false。

侵入式延迟加载和非侵入式延迟加载的区别

侵入式

执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访问主加载对象的详情时,就会马上执行关联对象的select查询。即对关联对象的查询执行,侵入到了主加载对象的详情访问中。也可以这样理解:将关联对象的详情侵入到了主加载对象的详情中,即将关联对象的详情作为主加载对象的详情的一部分出现了。

非侵入式

执行完主加载对象的select语句,马上执行对关联对象的select查询。

延迟加载可以有效的减少数据库压力

什么场景使用立即加载

一对一,多对一:通常情况下我们使用立即加载.

什么场景使用延迟加载

一对多,多对多:通常情况下我们使用延迟加载,同时在关联对象的数据比较多并不经常使用时使用。

简述Maven的依赖传递

举个例子,比如A依赖B,B依赖C,那么A也是依赖C的。A是对B的直接依赖,A对C是传递依赖。

①、最短路径原则

如,路径一:A依赖B,B依赖C,C依赖D(1.0.0);

  路径二:A依赖E,E依赖D(2.0.0),

此时A间接依赖D版本是2.0.0!


②、最先定义原则

如,路径一:A依赖B,B依赖C(1.0.0);

  路径二:A依赖E,E依赖C(2.0.0),

此时A间接依赖C版本是1.0.0!

如果想精确的控制依赖包版本,可以使用依赖的排除功能 exclusions 标签来排除。

解决Maven依赖冲突的四种方式

  1. 最先定义原则
    pom.xml文件按从上至下的顺序,哪个jar包的坐标在上面,这个jar包就是先声明的。

  2. 最短路径原则

    在依赖传递时,依赖冲突了,谁最近就用谁。

  3. 版本锁定原则

    可以在xml文件中,先锁定版本,在引入依赖时,引用版本标签。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <properties>
    <spring.version>4.2.4.RELEASE</spring.version>
    </properties>

    <!-- 锁定版本,spring4.2.4-->
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
    </dependency>
    </dependencies>
    </dependencyManagement>
  4. 排除原则

myBtais分页的四种方式

  1. 数组分页
  2. sql分页
  3. 拦截器分页
  4. RowBounds分页

Spring中BeanFactory、ApplicationContext两者装载bean的区别

BeanFactory:

提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;
BeanFactory在启动的时候不会去实例化Bean,中有从容器中拿Bean的时候才会去实例化。

ApplicationContext:

应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;
ApplicationContext在启动的时候就把所有的Bean全部实例化了。

接口和抽象类的区别

  1. 抽象类是类,它的子类不能再继承其它类了。

    接口不是类,它的子接口可以继承、实现多个接口。

  2. 抽象类中是可以有非抽象的方法。

    而接口中只能有抽象方法。

  3. 抽象类可以实现接口,而接口是不能继承或实现抽象类的。

  4. 抽象类多用于:将一些事物的相似之处,提取出来归为一个类。

  5. 接口多用于:定义一些规范的东西,使用时实现这个规范。