contenido
Pasos de configuración de la integración
Paso 1: Agregar dependencias relacionadas con Maven
Paso 2: configurar el host y el puerto de elasticsearch
Paso 3: configurar el cliente de Elasticsearch
Paso 4: Crear entidad de documento
Paso 5: crear capas de controlador, servicio y dao
Realización de funciones relacionadas
3. Consultar documentos por DNI
5. Consulta todos los documentos
6. Consulta condicional (condición única)
7. Consulta condicional (múltiples condiciones)
8. Consulta de paginación (orden descendente)
9. Consulta de paginación (ascendente)
Pasos de configuración de la integración
Paso 1: Agregar dependencias relacionadas con Maven
<!-- 指定 Springboot 版本 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.7</version>
<relativePath/>
</parent>
<!-- 相关jar包 -->
<dependencies>
<!-- SpringBoot核心jar包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- web开发包:包含Tomcat和Springmvc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- ES 核心包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!-- lombok 实体简化插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
Paso 2: configurar el host y el puerto de elasticsearch
elasticsearch:
host: 127.0.0.1
port: 9200
Paso 3: configurar el cliente de Elasticsearch
@Data
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {
private String host;
private Integer port;
@Override
public RestHighLevelClient elasticsearchClient() {
return new RestHighLevelClient(RestClient.builder(new HttpHost(host, port)));
}
}
Paso 4: Crear entidad de documento
@Data
@Document(indexName = "users")
public class User {
@Id
@Field(type = FieldType.Long)
private Long id;
@Field(type = FieldType.Text)
private String name;
@Field(type = FieldType.Keyword)
private String sex;
@Field(type = FieldType.Integer)
private Integer age;
@Field(type = FieldType.Text)
private String address;
}
Paso 5: crear capas de controlador, servicio y dao
(5.1) capa controladora
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
}
(5.2) capa de servicio
public interface UserService {
}
(5.3) capa de implementación del servicio (UserDao ver 5.4)
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
}
(5.4) capas dao
@Repository
public interface UserDao extends ElasticsearchRepository<User, Long> {
}
Después de crear toda la clase relacionada, la estructura del proyecto debería tener el siguiente aspecto:
Realización de funciones relacionadas
Aquí hay un ejemplo de la función real y enumera las clases de implementación del controlador y las capas de servicio como referencia.
Para algunas funciones principales, ES ya las ha encapsulado y las admite de forma predeterminada (como el ejemplo 1-6). Estas implementaciones relacionadas no requieren que escribamos la capa dao, pero es necesario realizar manualmente algunas consultas comerciales más. .Escribir.
1. Agregar documentos
capa de controlador:
@PostMapping("/save")
public String save(@RequestBody User user) {
long id = System.currentTimeMillis();
user.setId(id);
userService.save(user);
return "新增成功,id为:" + id;
}
capa de servicio:
@Override
public Long save(User user) {
userDao.save(user);
return user.getId();
}
Efecto de prueba:
2. Modificar el documento
[Nota] Para agregar y modificar documentos, la capa dao llama al método save(). Cuando el id no existe, ES (ElasticSearch) realizará la nueva operación. Cuando el objeto id ya existe, realizará la operación de modificación.
capa de controlador:
@PostMapping("/update")
public String update(@RequestBody User user) {
userService.save(user);
return "修改成功";
}
capa de servicio:
@Override
public Long save(User user) {
userDao.save(user);
return user.getId();
}
Efecto de prueba:
3. Consultar documentos por DNI
capa de controlador:
@GetMapping("/{id}")
public User getById(@PathVariable("id") Long id) {
return userService.getById(id);
}
capa de servicio:
@Override
public User getById(Long id) {
Optional<User> find = userDao.findById(id);
if (find.isPresent()) {
return find.get();
}
return null;
}
Efecto de prueba:
4. Eliminar documentos por ID
capa de controlador:
@DeleteMapping("/{id}")
public String deleteById(@PathVariable("id") Long id) {
userService.deleteById(id);
return "删除成功";
}
capa de servicio:
@Override
public void deleteById(Long id) {
userDao.deleteById(id);
}
Efecto de prueba:
5. Consulta todos los documentos
capa de controlador:
@GetMapping("/all")
public List<User> all() {
return userService.getAll();
}
capa de servicio:
@Override
public List<User> getAll() {
Iterable<User> users = userDao.findAll();
if (users == null) {
return Collections.emptyList();
}
List<User> userList = new ArrayList<User>();
users.forEach(o -> userList.add(o));
return userList;
}
Efecto de prueba:
6. Consulta condicional (condición única)
Por ejemplo: datos de consulta cuyo nombre contiene "Mary"
capa de controlador:
@GetMapping("/listByName")
public List<User> listByName(String name) {
return userService.getListByName(name);
}
capa de servicio:
@Override
public List<User> getListByName(String name) {
return userDao.findByName(name);
}
capas dao:
List<User> findByName(String name);
Efecto de prueba:
7. Consulta condicional (múltiples condiciones)
Por ejemplo: consulta los datos cuyo nombre contiene "Mary" y cuya edad es 25.
capa de controlador:
@GetMapping("/listByNameAndAge")
public List<User> listByNameAndAge(String name, Integer age) {
return userService.getListByNameAndAge(name, age);
}
capa de servicio:
@Override
public List<User> getListByNameAndAge(String name, Integer age) {
return userDao.findByNameAndAge(name, age);
}
capas dao:
List<User> findByNameAndAge(String name, Integer age);
8. Consulta de paginación (orden descendente)
capa de controlador:
@GetMapping("/listOrderByAgeDesc")
public List<User> listOrderByAgeDesc() {
return userService.getListOrderByAgeDesc();
}
capa de servicio:
@Override
public List<User> getListOrderByAgeDesc() {
return userDao.findByOrderByAgeDesc();
}
capas dao:
List<User> findByOrderByAgeDesc();
Efecto de prueba:
9. Consulta de paginación (ascendente)
capa de controlador:
@GetMapping("/listOrderByAgeAsc")
public List<User> listOrderByAgeAsc() {
return userService.getListOrderByAgeAsc();
}
capa de servicio:
@Override
public List<User> getListOrderByAgeAsc() {
return userDao.findByOrderByAgeAsc();
}
capas dao:
List<User> findByOrderByAgeAsc();
Efecto de prueba:
10. Consulta de paginación
capa de controlador:
@GetMapping("/page")
public Page<User> page(Integer pageNum, Integer pageSize) {
return userService.getPage(pageNum, pageSize);
}
capa de servicio:
@Override
public Page<User> getPage(int pageNum, int pageSize) {
// 注意,这里的pageNum是从0开始的,如果要查询第1页数据,pageNum应该为0
Pageable pageable = PageRequest.of(pageNum, pageSize);
return userDao.findAll(pageable);
}
Efecto de prueba:
11. Consulta de rango ( > )
capa de controlador:
@GetMapping("/listGreaterThanAge")
public List<User> listGreaterThanAge(Integer age) {
return userService.getListGreaterThanAge(age);
}
capa de servicio:
@Override
public List<User> getListGreaterThanAge(Integer age) {
return userDao.findByAgeGreaterThan(age);
}
capas dao:
List<User> findByAgeGreaterThan(Integer age);
Efecto de prueba:
12. Consultas de rango ( >= )
capa de controlador:
@GetMapping("/listGreaterThanEqualAge")
public List<User> listGreaterThanEqualAge(Integer age) {
return userService.getListGreaterThanEqualAge(age);
}
capa de servicio:
@Override
public List<User> getListGreaterThanEqualAge(Integer age) {
return userDao.findByAgeGreaterThanEqual(age);
}
capas dao:
List<User> findByAgeGreaterThanEqual(Integer age);
Efecto de prueba:
13. Consulta de rango ( < )
capa de controlador:
@GetMapping("/listLessThanAge")
public List<User> listLessThanAge(Integer age) {
return userService.getListLessThanAge(age);
}
capa de servicio:
@Override
public List<User> getListLessThanAge(Integer age) {
return userDao.findByAgeLessThan(age);
}
capas dao:
List<User> findByAgeLessThan(Integer age);
Efecto de prueba:
14. Consultas de rango ( <= )
capa de controlador:
@GetMapping("/listLessThanEqualAge")
public List<User> listLessThanEqualAge(Integer age) {
return userService.getListLessThanEqualAge(age);
}
capa de servicio:
@Override
public List<User> getListLessThanEqualAge(Integer age) {
return userDao.findByAgeLessThanEqual(age);
}
capas dao:
List<User> findByAgeLessThanEqual(Integer age);
Efecto de prueba: