• 使用ColumnType注解解决/过滤/转义tk mybatis插入insertSelective、insert语句中遇到sql关键字


    笔者的使用mysql数据库,实体如下

    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.apache.ibatis.type.JdbcType;import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Table(name = "api_ocr_document")
    public class ApiOCRDocument{
    
        @Id
        @GeneratedValue(generator = "JDBC")
        private Long id;
    
        private String mimeType;
    
        private String hash;
    
        private byte[] binary;
    
        private String text;
    
        private String createTime;
    }

    插入语句生成的sql如下

    INSERT INTO api_ocr_document  ( id,mime_type,hash,binary,text,create_time ) VALUES( ?,?,?,?,?,? )

    放到navicat一看,两个关键字(hash,binary)

     解决方法,使用tk.mybatis私有注解ColumnType将字段使用mysql关键字·转义一下

    正确代码如下:

    package com.netmarch.web.open.bean;
    
    import lombok.AllArgsConstructor;
    import lombok.Builder;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.apache.ibatis.type.JdbcType;
    import tk.mybatis.mapper.annotation.ColumnType;
    
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    @Builder
    @Table(name = "api_ocr_document")
    public class ApiOCRDocument{
    
        @Id
        @GeneratedValue(generator = "JDBC")
        private Long id;
    
        private String mimeType;
    
        @ColumnType(column = "`hash`",jdbcType = JdbcType.VARCHAR)
        private String hash;
    
        @ColumnType(column = "`binary`",jdbcType = JdbcType.BLOB)
        private byte[] binary;
    
        private String text;
    
        private String createTime;
    }

    再次生成的sql如下

  • 相关阅读:
    用故事说透 HTTPS
    nginx部署基于http负载均衡器
    Jenkins使用docker-maven-plugin进行编译时发现没有权限
    Jenkins执行mvn -f ${project_name} clean package报错:找不到父工程
    Harbor的镜像上传和拉取
    java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
    Jenkins+SonarQube代码审查
    Centos7安装SonarQube7.9.3
    Centos7 rpm 安装Mysql5.7
    Jenkins 配置邮箱服务器发送构建结果
  • 原文地址:https://www.cnblogs.com/passedbylove/p/12131470.html
Copyright © 2020-2023  润新知