yml配置文件

  • 一般的配置格式
1
2
3
4
spring:
application:
name: studyJava
user: jyd
  • 使用方式
  1. @Value(“${spring.application.name}”)

  2. @ConfigurationProperties(prefix=”spring”)

1
2
3
4
5
6
7
8
9
10
11
@ConfigurationProperties(prefix="spring")
@Component
public class EmailProperties {
@Value("${spring.application.user}")
public String user;
public String code;
public String host;
private boolean auth

}

@Component一般用在什么地方呢?

在Spring Boot中,@Component注释可以用来自动配置类。自动配置是通过Spring Boot的启动类上标注的@EnableAutoConfiguration或@SpringBootApplication(后者包含了@EnableAutoConfiguration)来实现的。

以下是一个简单的示例,展示如何使用@Component来自动配置一个简单的服务类。

首先,假设我们有一个服务类,它提供了一个简单的功能:

1
2
3
4
5
6
7
8
9
10
import org.springframework.stereotype.Component;

@Component
public class MyAutoConfiguredService {

public String sayHello(String name) {
return "Hello, " + name + "!";
}
}

@SpringBootApplication是一个方便的注解,它包含了@EnableAutoConfiguration,这意味着Spring Boot将尝试自动配置项目。自动配置发生的过程是:

Spring Boot会扫描classpath下的所有@Component、@Service、@Repository等注解的类。
它会在启动时查找所有符合条件的类,并将它们注册为Spring组件。
如果MyAutoConfiguredService类中有任何依赖未被满足,Spring Boot会尝试根据类路径下的jar包、配置文件等来猜测并自动配置这些依赖。

整合mybatis

1.导入依赖

1
2
3
4
5
6
7
8
 <groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>

2.配置文件

1
2
3
4
5
6
7
8
9
spring:
application:
name: studyJava
datasource:
url: jdbc:mysql://localhost:3306/studyJava?useSSL=false&serverTimezone=UTC
username: root
password: xxxxxx
driver-class-name: com.mysql.cj.jdbc.Driver

3.书写实体类

@Data 是 Lombok 库提供的一个注解,它用于自动生成 getters、setters、equals、canEqual、hashCode、toString 方法。当你在 Lombok 版本为 1.18.12 或更高版本时使用 @Data,它还会包含无参构造方法(如果不存在的话)和一个全参构造方法。

无参构造方法是一个没有参数的构造器,它用于创建对象实例。
全参构造方法是一个带有所有属性作为参数的构造器,它允许你在创建对象时提供所有属性的值。
在 Lombok 版本 1.18.12 之前,@Data 注解只生成 getters 和 setters,不包括构造方法。如果你的 Lombok 版本低于 1.18.12,那么你需要手动添加构造方法。

从 Lombok 1.18.13 开始,@Data 注解默认包括一个无参构造方法,即使你的类中已经有其他的构造方法。如果你想保留现有的构造方法,你可以使用 @Data 注解的 init 属性,如下所示:

1
2
3
4
5
@Data(init = false)
public class MyClass {
// ...
}

1
2
3
4
5
6
7
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
<optional>true</optional>
</dependency>

  • 文件路径为:com/mhist/studyJava/pojo/User.java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15


    package com.mhist.studyJava.pojo;

    import lombok.Data;

    @Data
    public class User {
    private Integer id;
    private String name;
    private Short age;
    private Short gender;
    private String phone;
    }

4. 创建mapper

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.mhist.studyJava.mapper;

import com.mhist.studyJava.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {
@Select("select * from user where id = #{id}")
public User findById(Integer id);

@Select("select * from user")
List<User> findAll();
}



5. service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.mhist.studyJava.service;

import com.mhist.studyJava.pojo.User;

import java.util.List;

public interface UserService {


/**
* @param id
* @return
*/
User findById(Integer id);

List<User> findAll();
}

6.serviceImpl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.mhist.studyJava.service.impl;

import com.mhist.studyJava.mapper.UserMapper;
import com.mhist.studyJava.pojo.User;
import com.mhist.studyJava.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
private UserMapper userMapper;

public UserServiceImpl(UserMapper userMapper) {
this.userMapper = userMapper;
}

/**
* @param id
* @return
*/
@Override
public User findById(Integer id) {
return userMapper.findById(id);
}

@Override
public List<User> findAll(){
return userMapper.findAll();
}
}


7.controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.mhist.studyJava.controller;
import com.mhist.studyJava.pojo.User;
import com.mhist.studyJava.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class UserController {
private UserService userService;

public UserController(UserService userService) {
this.userService = userService;
}

@GetMapping("/findById")
public User findById(Integer id) {
return userService.findById(id);
}

@GetMapping("/findAll")
public List<User> findAll() {
return userService.findAll();
}

}

由于jdk17环境下不推荐使用@Autowired ,所以在controller中导入service、以及在service实现类中导入mapper的时候、需要使用有参构造

1
2
3
4
5
private UserService userService;

public UserController(UserService userService) {
this.userService = userService;
}
1
2
3
4
5
6
private UserMapper userMapper;

public UserServiceImpl(UserMapper userMapper) {
this.userMapper = userMapper;
}