通用MYSQL建表字段模板

--
-- Set character set the client will use to send SQL statements to the server
--
SET NAMES 'utf8';

--
--  创建新表的模板,所有的表创建需要已此为模板
-- Create table 新表名称
--
CREATE TABLE 新表名称 (
    -- 必须字段 id, uuid, active,version, gmt_create,gmt_modified, create_by, modified_by
                      id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
                      uuid varchar(500) NOT NULL COMMENT '该记录唯一识别码,用于区别主键',
    -- 其他的字段

    -- 以下为必须添加的额外保留字段
                      active tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '对应该条记录是否可用,1可用,0不可用',
                      version int(20) UNSIGNED NOT NULL COMMENT '对应乐观锁的版本号',
                      gmt_create datetime NOT NULL COMMENT '对应记录的创建时间',
                      gmt_modified datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '对应记录的修改时间',
                      create_by varchar(250) NOT NULL COMMENT '对应添加记录的人',
                      modified_by varchar(250) NOT NULL COMMENT '对应最后一次修改记录的',
                      PRIMARY KEY (id)
)
    ENGINE = INNODB,
    CHARACTER SET utf8mb4,
    COLLATE utf8mb4_general_ci,
    COMMENT = '新表说明';


PageHelper return PageInfo total =-1

Found that the PageInfo always return the total field as -1, and the select count(*) sql not run

  • The reason is as below:
pagehelper:
  default-count: false
  • The sql used here is:
    Page<Object> page = PageHelper.startPage(pageNum, pageSize);
    List<PermissionActionResponse> permissionActions = authMapper.getPermissionActions();
    PageInfo<PermissionActionResponse> pageInfo = new PageInfo<>(permissionActions);

mybatis-plus 重要坑记录

  • 数据库表的字段为数据库关键字,采用如下声明:
1. 关键字数据表: @TableName("[user]")
2. 关键字数据表字段:  @TableField("`desc`")
  • 配置 MapperScan 注解

提到需要写上@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper"),可以在mapper类上采用注解@Mapper达到同样的效果

参考代码: github 代码段

-- 注解 annotation

  1. @TableName
  2. @TableId
  3. @TableField
  4. @Version
  • 分页
  // 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分
    // page.setOptimizeCountSql(false);
    // 当 total 为非 0 时(默认为 0),分页插件不会进行 count 查询
    // 要点!! 分页返回的对象与传入的对象是同一个

  • 常见问题整理

FAQ

  • mybatis plus 详细配置产生实体类及其相关代码

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.google.common.collect.Lists;

import java.util.Scanner;

public class MybatisCodeGenerator {


    public static String scanner(String tip){
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入: "+tip+": ");
        System.out.println(help.toString());
        if(scanner.hasNext()){
            String inputTip = scanner.next();
            if(StrUtil.isNotEmpty(inputTip)){
                return inputTip;
            }
        }
        throw new MybatisPlusException("请输入正确的"+tip+"!");
    }


    public static void main(String[] args) {

        // 配置信息
        String url ="jdbc:mysql://192.168.1.108:3306/vrpano?useUnicode=true&useSSL=false&characterEncoding=utf8";
        String username ="yanzhi";
        String passwd="yanzhi123!@#";
        String packageName ="generator";

        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        // 必须
        dsc.setDbType(DbType.MYSQL);
        dsc.setUrl(url);
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername(username);
        dsc.setPassword(passwd);
        mpg.setDataSource(dsc);

        // 全局配置
        GlobalConfig gc = new GlobalConfig();


        String currentFilePath =MybatisCodeGenerator.class.getClassLoader().getResource("").getPath();
        String projectPath = FileUtil.getParent(currentFilePath, 2);
        gc.setOutputDir(projectPath + "/src/main/java");

        gc.setFileOverride(true);
        gc.setOpen(true);
        // 是否在xml中添加二级缓存
        gc.setEnableCache(false);

        gc.setAuthor("Walter Hu");

        gc.setKotlin(false);
        gc.setSwagger2(false);

        gc.setActiveRecord(false);

        // xml中添加返回结果的基本类型
        gc.setBaseResultMap(true);
        // xml中添加基本的数据列
        gc.setBaseColumnList(true);
        // java8 时间映射,所有的时间映射被LocalDate,LocalDateTime类型
        gc.setDateType(DateType.TIME_PACK);

        gc.setEntityName("%sEntity");
        gc.setMapperName("%sMapper");
        gc.setXmlName("%sMapper");
        gc.setIdType(IdType.AUTO);

        mpg.setGlobalConfig(gc);

        //数据库表配置 策略配置
        StrategyConfig strategy = new StrategyConfig();
        // 表名是否大写
        strategy.setCapitalMode(false);
        strategy.setSkipView(true);
        // 表名到实体类的映射关系
        strategy.setNaming(NamingStrategy.underline_to_camel);
//        数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);

        String tables = scanner("表名,多个英文逗号分割");
         if(!tables.contains("a")){
             // 全部的表
             String[] parseTables = tables.split(",");
             strategy.setInclude(parseTables);
         }

        // 实体类设置
        // 初始化字段值
        strategy.setEntityColumnConstant(false);
        // lombok类型
        strategy.setEntityLombokModel(true);
        // 将boolean类型的字段去掉前面的is字段
        strategy.setEntityBooleanColumnRemoveIsPrefix(true);
        //
        strategy.setEntitySerialVersionUID(true);
        // 乐观锁字段
        strategy.setVersionFieldName("version");
        // 默认字段
        strategy.setTableFillList(Lists.newArrayList(
                new TableFill("gmt_create", FieldFill.INSERT),
                new TableFill("gmt_modified",FieldFill.INSERT_UPDATE),
                new TableFill("version", FieldFill.INSERT),
                new TableFill("is_active", FieldFill.INSERT)
                ));

        mpg.setStrategy(strategy);
        // 默认是采用velocity 模板的
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());

        // 包配置
        PackageConfig pc = new PackageConfig();
//        pc.setModuleName(scanner("模块名"));
        pc.setParent(packageName);
        mpg.setPackageInfo(pc);


        mpg.execute();
    }
}

最后更新: 5/15/2019, 11:07:32 PM
本文浏览量