Springboot construye rápidamente el proyecto mybatisplus + resumen del problema

En comparación con mybatis de uso común, mybatisPlus puede ayudarnos a centrarnos más en el desarrollo empresarial y reducir la codificación de archivos sql. Ahora use SpringBoot 
+ mybatisPlus para construir un proyecto. 

1. Resumen de los problemas encontrados durante el proceso de construcción

(1) Informe de errores de inicio

Agregar dependencia

<dependency> 
    <groupId> com.baomidou </groupId> 
    <artifactId> mybatis-plus-boot-starter </artifactId> 
    <version> 3.3.1.tmp </version> 
</dependency>

Debido a la relación de referencia, es obligatorio actualizar el número de versión mybatis-spring-boot-starter a 2.0.0 o superior.

<dependency> 
  <groupId> org.mybatis.spring.boot </groupId> 
  <artifactId> mybatis-spring-boot-starter </artifactId> 
  <version> 2.0.1 </version> 
</dependency>
(2) El servicio puede tener un método para operar la base de datos heredando IService <T>

Formas de realizar la consulta 1,

userService.getOne (Wrappers. <User> lambdaQuery (). eq (false, User :: getId, 3L) .orderByDesc (User :: getId) .last ("límite 1"));

Formas de realizar la consulta 2,

QueryWrapper <User> wrapper = new QueryWrapper <> (); 
wrapper.eq ("nombre", "Guardar1"). o (). eq ("número_teléfono", "17300000001"). orderByDesc ("id");

(3) Hay muchas trampas en el método mybatisPlus. Por ejemplo, el método getOne devuelve un solo modelo, pero sql no agrega límite 1

Por lo tanto, debe escribirse en back.last ("límite 1"));

Por lo tanto, puede haber muchos problemas en el uso, se recomienda mirar primero la implementación del método de IService.

## spring-boot-demo-mybatis-plus 

#pom 
<? xml version = "1.0" encoding = "UTF-8"?> 
<proyecto xmlns = "http://maven.apache.org/POM/4.0.0 "xmlns: xsi =" http://www.w3.org/2001/XMLSchema-instance " 
         xsi: schemaLocation =" http://maven.apache.org/POM/4.0.0 https: //maven.apache. org / xsd / maven-4.0.0.xsd "> 
    <modelVersion> 4.0.0 </modelVersion> 
    <parent> 
        <groupId> com.juejueguai </groupId> 
        <artifactId> spring-boot-demo </artifactId> 
        <versión > 1.0-SNAPSHOT </version> 
    </parent> 
    <groupId> com.example </groupId> 
    <artifactId> spring-boot-demo-mybatis-plus </ artifactId> 
    <version> 0.0.1-SNAPSHOT </version>
    <name> spring-boot-demo-mybatis-plus </name> 
    <description> Proyecto de demostración para Spring Boot </description> 
    <properties> 
        <java.version> 1.8 </java.version> 
    </properties> 
    <dependencies> 
        <dependency> 
            <groupId> com.baomidou </groupId> 
            <artifactId> mybatis-plus-boot-starter </artifactId> 
            <version> 3.3.1.tmp </version> 
        </dependency> 
        <dependency> 
            <groupId> org .springframework.boot </groupId> 
            <artifactId> spring-boot-starter-test </artifactId> 
            <scope>prueba </scope> 
        </dependency> 
        <dependency>
            <groupId> mysql </groupId>  
            <artifactId> mysql-connector-java </artifactId>
        </dependency> 
        <dependency> 
            <groupId> org.springframework.boot </groupId> 
            <artifactId> spring-boot-starter-web </artifactId> 
        </dependency> 
        <dependency> 
            <groupId > org.springframework.boot </groupId> 
            <artifactId> spring-boot-starter-test </artifactId> 
            <scope> prueba </scope> 
            <exclusions> 
                <exclusion> 
                    <groupId> org.junit.vintage </groupId> 
                    <artifactId> motor-antiguo-junit </artifactId>
                </exclusion> 
            </exclusions>
        </dependency> 
    </dependencies> 
    <build> 
        <plugins> 
            <plugin> 
                <groupId> org.springframework.boot </groupId> 
                <artifactId> spring-boot-maven-plugin </artifactId> 
            </plugin> 
        </plugins> 
    </build> 
</ proyecto> 

#yml 

spring: 
  datasource: 
    url: jdbc: mysql: // localhost: 3306 / spring_boot_test? useUnicode = true & characterEncoding = UTF-8 & useSSL = false & autoReconnect = true & failOverReadOnly = false & serverTimezone = GMT% 2B8 
    nombre de 
    usuario raíz 
    de la clase de controlador: : com.mysql.jdbc.Tipo de controlador 
    : com.zaxxer.hikari.Modo de 
    inicialización de HikariDataSource : siempre
    continue-on-error: true verdadero 
    hikari:
      mínimo-inactivo: 5 
      connection-test-query: SELECT 1 FROM DUAL 
      máximo-pool-size: 20 
      auto-commit: true 
      idle-timeout: 30000 
      pool-name: SpringBootDemoHikariCP 
      max-life: 60000 
      conexión -timeout: 30000 
logging: 
  level: 
    com.juejueguai: debug 
    com..juejueguai.springbootdemomybatisplus.mapper: trace 
mybatis-plus: 
  mapper-locations: classpath: mappers / *. xml # 
  Escaneo de entidades , varios paquetes usan comas o punto y coma 
  Tipo separadoAliasesPackage : com.juejueguai.springbootdemomybatisplus.entity 
  global-config: 
    # Configuración relacionada con la base de datos 
    db-config:
      # Tipo de clave principal AUTO: "ID de base de datos autoactivada", INPUT: "el usuario ingresa ID", ID_WORKER: "ID único global (ID único numérico)", UUID: "ID único global el UUID"; 
      tipo de ID: Auto 
      # Estrategia de campo IGNORADA: "ignorar juicio", NOT_NULL: "juicio no NULO"), NOT_EMPTY: "juicio no vacío" 
      campo-estrategia: not_empty #Camel case 
      subrayado 
      tabla de conversión -subrayado: verdadero 
      # ya sea para 
      habilitar la asignación de nombres en mayúsculas , no habilitado de forma predeterminada # modo capital: verdadero 
      # 
      configuración de eliminación lógica # valor de eliminación lógica: 1 
      # valor lógico no eliminación: 0 
      tipo db: mysql 
    #refresh mapper depuración de artefactos 
    actualización: verdadero 
  # Configuración de 
  configuración nativa : 
    map-underscore-to-camel -case: true 
    cache-enabled: true 
server: 
  port:9004 

# archivo sql 
/ *
Navicat MySQL Data Transfer 

Servidor de origen: 本 机 数据库
Versión del servidor de origen: 50549 
Host de origen: localhost: 3306 
Base de datos de origen: spring_boot_test 

Tipo de servidor de destino: MYSQL 
Versión del servidor de destino: 50549 
Codificación de archivo: 65001 

Fecha: 2020-07-17 16:16: 48 
* / 

SET FOREIGN_KEY_CHECKS = 0; 

- ---------------------------- 
- Estructura de tabla para orm_role 
- ------------ ---------------- 
DROP TABLE SI EXISTE `orm_role`; 
CREATE TABLE `orm_role` ( 
  ` id` int (11) NOT NULL AUTO_INCREMENT COMMENT '主 键', 
  `name` varchar (32) NOT NULL COMMENT '角色 名', 
  PRIMARY KEY (` id`), 
  CLAVE ÚNICA` name` (`name`)
) ENGINE = InnoDB AUTO_INCREMENT = 3 DEFAULT CHARSET = utf8 COMMENT = 'Tabla de ejemplo de la serie Spring Boot Demo Orm'; 

- ------------------------- - - 
- Registros de orm_role 
- ---------------------------- 
INSERT INTO `orm_role` VALUES ('2', 'Usuario ordinario' ); 
INSERT INTO `orm_role` VALUES ('1', 'Administrador'); 


/ * 
Navicat MySQL Data Transfer 

Servidor de origen: Base de datos local 
Versión del servidor de origen: 50549 
Host de origen: localhost: 3306 
Base de datos de origen: spring_boot_test 

Tipo de servidor de destino: MYSQL 
Target Versión del servidor: 50549 
Codificación de archivo: 65001 

Fecha: 2020-07-17 16:17:23 
* / 

SET FOREIGN_KEY_CHECKS = 0;

- ---------------------------- 
- Estructura de la tabla para orm_user 
- ------------ --- ------------- 
DROP TABLE IF EXISTS `orm_user`; 
CREATE TABLE` orm_user` ( 
  `id` int (11) NOT NULL AUTO_INCREMENT COMMENT'primary key ', 
  ` name` varchar (32) COMENTARIO NO NULO 'Nombre de usuario', 
  `contraseña` varchar (32) 
  COMENTARIO NO NULO 'Contraseña cifrada ', ` salt` varchar (32) 
  COMENTARIO NO NULO ' Sal utilizado para cifrado', `email` varchar (32) COMENTARIO NO NULO ' buzón ', 
  `phone_number` varchar (15) NOT NULL 
  COMMENT'phone number', ` status` int (2) NOT NULL DEFAULT '1' COMMENT'status, -1: borrado lógico, 0: desactivado, 1: activado ', 
  `create_time` datetime DEFAULT NULL 
  COMMENT'create time ', ` last_login_time` datetime DEFAULT NULL COMMENT'Hora del último inicio de sesión ',
  `last_update_time` datetime COMENTARIO NULO POR DEFECTO '上次 更新 PRIM', 
  CLAVE PRIMARIA (` id`), 
  CLAVE ÚNICA `nombre` (` nombre`), 
  CLAVE ÚNICA `email` (` email`), 
  CLAVE ÚNICA `número_de_teléfono` ( `phone_number`) 
) ENGINE = InnoDB AUTO_INCREMENT = 36 DEFAULT CHARSET = utf8 COMMENT = 'Spring Boot Demo Orm 系列 示例 表'; 

- ---------------------------- 
- Registros de orm_user 
- ------------- --------------- 
INSERT INTO `orm_user` VALUES ('2', 'user_2', '6c6bf02c8d5d3d128f34b1700cb1e32c', 'fcbdd0e8a9404a5585ea4e01d0e4d7a0', '[email protected]', '1', nulo, nulo, nulo);
INSERT INTO `orm_user` VALUES ('3', 'MybatisPlus 修改 名字', '123456456', '456', '[email protected]', '17300000003', '1', '2020-07-17 14:52 : 15 ',' 2020-07-17 14:52:15 ',' 2020-07-17 15:05:46 '); 
INSERT INTO `orm_user` VALUES ('4', 'testSave4', '123456456', '456', '[email protected]', '17300000004', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 '); 
INSERT INTO `orm_user` VALUES ('5', 'testSave5', '123456456', '456', '[email protected]', '17300000005', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 '); 
INSERT INTO `orm_user` VALUES ('7', 'testSave7', '123456456', '456', '[email protected]', '17300000007', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 '); 
INSERT INTO `orm_user` VALUES ('9', 'testSave9', '123456456', '456', '[email protected]', '17300000009', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 '); 
INSERT INTO `orm_user` VALUES ('10', 'testSave10', '123456456', '456', '[email protected]', '173000000010', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ');
INSERT INTO `orm_user` VALUES ('12', 'testSave12', '123456456', '456', '[email protected]', '173000000012', '1', '2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ',' 2020-07-17 14:52:51 ');
INSERT INTO `orm_user` VALUES ('24', 'testSave14', '123456456', '456', '[email protected]', '173000000014', '1', '2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 '); 
INSERT INTO `orm_user` VALUES ('25', 'testSave15', '123456456', '456', '[email protected]', '173000000015', '1', '2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 '); 
INSERT INTO `orm_user` VALUES ('27', 'testSave17', '123456456', '456', '[email protected]', '173000000017', '1', '2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 ');
INSERT INTO `orm_user` VALUES ('29', 'testSave19', '123456456', '456', '[email protected]', '173000000019', '1', '2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 ',' 2020-07-17 15:16:00 '); 

# config 文件
@ Slf4j 
@Component 
public class CommonFieldHandler implementa MetaObjectHandler { 
    @Override 
    public void insertFill (MetaObject metaObject) { 
        log.info ("iniciar insertar relleno ....");
        this.setFieldValByName ("lastUpdateTime", nueva fecha (), metaObject); 
    } 
    @Override 
    public void updateFill (MetaObject metaObject) { 
        log.info ("iniciar actualización de llenado ...."); 
        esta. 
    }
} 

@Configuration 
@MapperScan (basePackages = {"com.juejueguai.springbootdemomybatisplus.mapper"}) 
@EnableTransactionManagement 
public class MybatisPlusConfig { 
    @Bean 
    public PaginationInterceptor paginationInterceptor () { 
        return new PaginationInterceptor (); 
    } 
} 
# entidad 
@Data 
@NoArgsConstructor 
@AllArgsConstructor 
@Builder 
@TableName ("orm_user") 
clase pública El usuario implementa Serializable { 
    private static final long serialVersionUID = -1840831686851699943L; 
    / ** 
     * 主 键
     * / 
    private Long id; 
    / ** 
     * 用户 名
     * /
    Private String name; 
    / ** 
     * Contraseña cifrada 
     * / 
    Private String contraseña; 
    / ** 
     * Salt utilizado para el cifrado 
     * / 
    Private String salt; 
    / ** 
     * Correo electrónico 
     * / 
    Private String email; 
    / ** 
     * Número de teléfono móvil 
     * / 
    private String phoneNumber; 
    / **  
     * Estado, -1: lógico eliminación, 0: deshabilitar, 1: habilitar
     * / 
    private Integer status; 
    / ** 
     * Hora de creación 
     * / 
    @TableField (fill = INSERT) 
    private Date createTime; 
    / ** 
     * Última hora de inicio de sesión 
     * / 
    private Date lastLoginTime; 
    / **
     * 上次 更新 时间
     * / 
    @TableField (llenar = INSERT_UPDATE) 
    fecha privada lastUpdateTime; 
} 

# mapper 
@Component 
interfaz pública UserMapper extiende BaseMapper <User> { 
} 
# service 
interfaz pública UserService extiende IService <User> { 
} 

@Service 
clase pública UserServiceImpl extiende ServiceImpl <UserMapper, User> implementa UserService { 
} 

# prueba 

@RunWith (SpringRunner. class) 
@SpringBootTest 
public class SpringBootDemoMybatisPlusApplicationTests { 
    @Test 
    public void contextLoads () { 
    } 
} 

@ Slf4j
UserServiceTest de clase pública extiende SpringBootDemoMybatisPlusApplicationTests { 
    @Autowired 
    private UserService userService; 
    / ** 
     * 测试 Mybatis-Plus 新增
     * / 
    @Test 
    public void testSave () { 
        String salt = "456"; 
        Usuario testSave3 = User.builder (). Name ("testSave"). Contraseña ("123456" + salt) .salt (salt) .email ("[email protected]"). PhoneNumber ("17300000003"). Status ( 1) .lastLoginTime (nueva fecha ()). Build ();
        boolean save = userService.save (testSave3); 
        Assert.assertTrue (guardar); 
        log.debug ("【测试 id 回 显 # testSave3.getId ()】 = {}", testSave3.getId ()); 
    } 
    / ** 
     * 测试 Mybatis-Plus 批量 新增
     * / 
    @Test 
    public void testSaveList () { 
        List <User> userList = Lists.newArrayList (); 
        para (int i = 14; i <20; i ++) { 
            String salt = "456"; 
            Usuario usuario = User.builder (). Name ("testSave" + i) .password ("123456" + salt) .salt (salt) .email ("testSave" + i + "@ xkcoding.com"). PhoneNumber ( "1730000000" + i) .status (1) .lastLoginTime (nueva Fecha ()). Build (); 
            userList.add (usuario); 
        } 
        lote booleano = userService.saveBatch (userList); 
        Afirmar.
        List <Long> ids = userList.stream (). Map (User :: getId) .collect (Collectors.toList ()); 
        log.debug ("【userList # ids】 = {}", ids); 
    } 
    / ** 
     * 测试 Mybatis-Plus 删除
     * / 
    @Test 
    public void testDelete () { 
        boolean remove = userService.removeById (1L);
        User byId = userService.getById (1L); 
        Assert.assertNull (byId); 
    } 
    / ** 
     * Prueba la modificación de Mybatis-Plus 
     * / 
    @Test 
    public void testUpdate () { 
        Usuario usuario = userService.getById (3L); 
        user.setName ("MybatisPlus modificar nombre"); 
        booleano b = userService.updateById (usuario); 
        Assert.assertTrue (b); 
        Actualización de usuario = userService.getById (3L); 
        Assert.assertEquals ("MybatisPlus modificar nombre", update.getName () ); 
        log.debug ("[update] = {}", update); 
    } 
    / ** 
     * Prueba Mybatis-Plus consulta única 
     * / 
    @Test 
    public void testQueryOne () { 
        User user = userService.getOne (Wrappers. <User> lambdaQuery (). Eq (false, User :: getId, 3L) .orderByDesc (User :: getId) .last ("límite 1")); 
        Assert.assertNotNull (usuario); 
        log.debug ("【usuario】 = {}", usuario); 
    } 
    / ** 
     * 测试 Mybatis-Plus 查询 全部
     * / 
    @Test 
    public void testQueryAll () { 
        List <User> list = userService.list (new QueryWrapper <> ()); 
        Assert.assertTrue (! CollectionUtils.isEmpty (lista));
        log.debug ("【lista】 = {}", lista); 
    } 
    / ** 
     * 测试 Mybatis-Plus 分页 排序 查询
     * / 
    @Test 
    public void testQueryByPageAndSort () {
     * / 
    @Test 
    public void testQueryByCondition () { 
        initData (); 
        int count = userService.count (nuevo QueryWrapper <
        Página <User> userPage = nueva página <> (1, 5); 
        userPage.setDesc ("id"); 
        IPage <User> page = userService.page (userPage, new QueryWrapper <> ()); 
        Assert.assertEquals (5, page.getSize ()); 
        Assert.assertEquals (recuento, page.getTotal ()); 
        log.debug ("【page.getRecords ()】 = {}", page.getRecords ()); 
    } 
    / ** 
     * 测试 Mybatis-Plus 自 定义 查询
        QueryWrapper <User> wrapper = new QueryWrapper <> (); 
        wrapper.like ("nombre", "Guardar1"). o (). eq ("número_teléfono", "17300000001"). orderByDesc ("id"); 

        userService.getOne (envoltorio); 
        int count = userService.count (envoltorio); 
        Página <User> userPage = nueva página <> (1, 3); 
        IPage <User> page = userService.page (userPage, contenedor); 
        Assert.assertEquals (3, page.getSize ()); 
        Assert.assertEquals (recuento, page.getTotal ()); 
        log.debug ("【page.getRecords ()】 = {}", page.getRecords ());
https://github.com/juejuedog/SpringBootDemo.git

Supongo que te gusta

Origin blog.csdn.net/A___B___C/article/details/107412292
Recomendado
Clasificación