编辑
2023-11-25
后端
00
请注意,本文编写于 532 天前,最后修改于 532 天前,其中某些信息可能已经过时。

目录

ArrayList遍历方式
SpringBoot 声明Bean的注解
Mybatis-plus做查询的几种方法
JVM的双亲委派机制

ArrayList遍历方式

在Java中,ArrayListList接口的一个实现类,可以通过多种方式进行遍历。以下是几种常见的遍历方式:

  1. 使用迭代器(Iterator):

    java
    List<String> list = new ArrayList<>(); // 添加元素至 list Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); // 处理元素 }
  2. 使用 forEach 循环(增强型 for 循环):

    java
    List<String> list = new ArrayList<>(); // 添加元素至 list for (String element : list) { // 处理元素 }
  3. 使用普通 for 循环:

    java
    List<String> list = new ArrayList<>(); // 添加元素至 list for (int i = 0; i < list.size(); i++) { String element = list.get(i); // 处理元素 }
  4. 使用 Java 8 的 Stream API:

    java
    List<String> list = new ArrayList<>(); // 添加元素至 list list.forEach(element -> { // 处理元素 });

这些方法中,选择哪种方式取决于具体的需求和个人偏好。通常,使用增强型 for 循环或者迭代器是比较简洁和常见的方式。 Stream API 在需要进行一系列处理时更为强大。

SpringBoot 声明Bean的注解

在Spring Boot中,声明Bean的注解主要有以下几种:

  1. @Component: @Component 是通用的注解,可用于任何Spring管理的组件,让Spring进行扫描并把该类初始化为Spring容器中的一个Bean。

    java
    @Component public class MyComponent { // 类定义 }
  2. @Repository: @Repository 通常用于对DAO类进行标注,表示该类用于数据库交互,是Spring的持久层组件。

    java
    @Repository public class MyRepository { // 类定义 }
  3. @Service: @Service 用于标注业务层组件,表示该类是业务逻辑处理的Bean。

    java
    @Service public class MyService { // 类定义 }
  4. @Controller: @Controller 用于标注控制层组件,表示该类是Spring MVC中的控制器。

    java
    @Controller public class MyController { // 类定义 }
  5. @Configuration: @Configuration 用于定义配置类,可以在配置类中声明Bean。

    java
    @Configuration public class MyConfiguration { @Bean public MyBean myBean() { return new MyBean(); } }
  6. @Bean: @Bean 注解用于在配置类中声明一个Bean。

    java
    @Configuration public class MyConfiguration { @Bean public MyBean myBean() { return new MyBean(); } }

这些注解提供了不同的语义,可以根据实际情况选择合适的注解来声明Bean。

Mybatis-plus做查询的几种方法

MyBatis-Plus 提供了多种查询方法,以下是一些常用的查询方式:

  1. 根据主键查询: 使用 selectById 方法根据主键查询单条记录。

    java
    Long userId = 1L; User user = userMapper.selectById(userId);
  2. 条件查询: 使用 selectList 方法进行条件查询。

    java
    QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("age", 25); List<User> userList = userMapper.selectList(queryWrapper);
  3. Lambda条件查询: 使用 Lambda 表达式进行条件查询。

    java
    LambdaQueryWrapper<User> lambdaQuery = Wrappers.lambdaQuery(); lambdaQuery.eq(User::getAge, 25); List<User> userList = userMapper.selectList(lambdaQuery);
  4. 分页查询: 使用 selectPage 进行分页查询。

    java
    IPage<User> page = new Page<>(1, 10); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.ge("age", 20); IPage<User> userPage = userMapper.selectPage(page, queryWrapper);
  5. 自定义 SQL 查询: 使用 @Select 注解或者 XML 文件中定义的 SQL 进行自定义查询。

    java
    @Select("SELECT * FROM user WHERE age = #{age}") List<User> selectByAge(@Param("age") int age);

    或者 XML 文件中:

    xml
    <!-- UserMapper.xml --> <mapper namespace="com.example.UserMapper"> <select id="selectByAge" resultType="User"> SELECT * FROM user WHERE age = #{age} </select> </mapper>

    在接口中调用:

    java
    List<User> userList = userMapper.selectByAge(25);

这些只是 MyBatis-Plus 的一部分查询方式,根据具体需求可以选择不同的方法进行数据查询。

JVM的双亲委派机制

JVM(Java Virtual Machine)的双亲委派机制是一种类加载机制,其目的是保证Java类的唯一性,防止类的重复加载,提高安全性和保障核心API的稳定性。

具体来说,双亲委派机制是这样工作的:

  1. 父类优先: 当一个类加载器收到类加载的请求时,它首先不会自己去尝试加载这个类,而是把请求委托给父类加载器完成。每一层的类加载器都是如此,最终都是委托给最顶层的启动类加载器(Bootstrap ClassLoader)。

  2. 负责依赖: 类加载器负责加载类的时候,如果这个类依赖其他类,它会先请其父类加载器加载这些依赖类。这样递归下去,保证了类的加载是层层向上的,而不是层层向下的。

这种机制有以下好处:

  • 避免重复加载: 通过双亲委派机制,每个类只会被加载一次,避免了重复加载,提高了系统性能。

  • 安全性: 防止恶意类的加载。如果一个恶意类想替代JDK中的一些核心类,它会首先委派给父加载器加载,而父加载器加载的是JDK自带的类,从而保证了核心API的安全性。

  • 稳定性: 避免类的冲突。当父加载器负责加载JDK提供的类时,就保证了这些类是相同版本的,避免了不同版本类的冲突。

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!