Mybatis Plus: Herramienta de Mejora para Mybatis
MyBatis-Plus (MP) es una extensión para MyBatis que conserva todas sus funcionalidades originales mientras añade mejoras para simplificar el desarrollo. Características principales:
- No intrusivo: No modifica el comportamiento base de MyBatis
- Operaciones CRUD automáticas: Inyección inmediata de métodos básicos
- Constructor de condiciones: Permite crear consultas complejas mediante programación
- Soporte Lambda: Prevención de errores en nombres de campos
- Ganerador de código integrado: Automatiza creación de entidades y mapeadores
- Plugin de paginación: Compatible con múltiples bases de datos
Configuración en Spring Boot 3.0
1. Dependencias Maven
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.3</version>
</dependency>
2. Configuración de Base de Datos
spring.datasource.url=jdbc:mysql://servidor:3306/basedatos
spring.datasource.username=usuario
spring.datasource.password=clave
mybatis-plus.mapper-locations=classpath:/mappers/**/*.xml
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
3. Entidad y Mapeador
// Entidad
@Data
public class Evento {
private Long id;
private String nombre;
private LocalDateTime fecha;
}
// Mapeador
@Mapper
public interface EventoMapper extends BaseMapper<Evento> {}
4. Servicio y Prueba
// Servicio
public interface EventoService extends IService<Evento> {}
@Service
public class EventoServiceImpl extends ServiceImpl<EventoMapper, Evento>
implements EventoService {}
// Prueba
@SpringBootTest
class EventoServiceTest {
@Autowired
private EventoService service;
@Test
void contarRegistros() {
long total = service.count();
System.out.println("Total registros: " + total);
}
}
Ejemplos de Consultas
Consultas Básicas
// Consulta por ID
Evento evento = eventoMapper.selectById(101L);
// Consulta múltiple
List<Evento> eventos = eventoMapper.selectList(null);
// Consulta con condiciones
QueryWrapper<Evento> filtro = new QueryWrapper<>();
filtro.gt("fecha", LocalDateTime.now().minusDays(7));
List<Evento> recientes = eventoMapper.selectList(filtro);
Paginación
@Bean
public MybatisPlusInterceptor paginador() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
// Uso en servicio
Page<Evento> pagina = new Page<>(1, 5);
QueryWrapper<Evento> orden = new QueryWrapper<>().orderByDesc("fecha");
Page<Evento> resultado = eventoMapper.selectPage(pagina, orden);