一、场景还原
1、SpringBoot项目
2、Maven管理
3、使用MybatisPlus
4、SQLite数据库
5、通过MyBatisPlusGenerator(自编码)生成表实体时,报错
二、错误信息
[SQLITE_ERROR] SQL error or missing database (near "show": syntax error)
三、说明
1、版本过低导致,SQLite不支持"show"
2、升级下版本
1)升级前: 3.0.5
2)升级后: 3.4.1
3、MyBatisPlusGenerator为自定义生成器,把官网的生成器二次封装了下
4、开放共享的精神,源码贡献出来,欢迎白嫖
四、MyBatisPlusGenerator
1、项目准备
1)maven项目
2)请自建
2、加入依赖
1)属性
<properties> <!--<mybatis.plus.version>3.0.5</mybatis.plus.version>--> <mybatis.plus.version>3.4.1</mybatis.plus.version> </properties>
2)依赖
<!--<dependency>--> <!--<groupId>org.mybatis.spring.boot</groupId>--> <!--<artifactId>mybatis-spring-boot-starter</artifactId>--> <!--<version>1.1.1</version>--> <!--<!– 请不要使用1.0.0版本,因为还不支持拦截器插件 –>--> <!--</dependency>--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis.plus.version}</version> </dependency> <!--mybatis-plus代码生成器 相关依赖--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>${mybatis.plus.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-core</artifactId> <version>${mybatis.plus.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-annotation</artifactId> <version>${mybatis.plus.version}</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency> <!-- druid阿里巴巴数据库连接池 --> <!--<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.20</version> </dependency>--> <!--<dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency>--> <!-- MySql数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> </dependency> <dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.28.0</version> </dependency> <!--@Data注解--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
3、代码实现
1)属性定义:AutoGeneratorProp
package cn.hg.biz.mybatis.plus.generator; import com.baomidou.mybatisplus.annotation.DbType; import lombok.Data; /** * 生成属性配置 * @author hgSuper * @date 2020-11-19 */ @Data public class AutoGeneratorProp { /** * 作者 */ private String author; /** * 本地输出路径 */ private String outputDir; /** * 数据库连接 * eg:jdbc:mysql://localhost:3306/hg_demo?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=UTC */ private String dbUrl; private String dbUserName; private String dbPwd; /** * 父级包名 */ private String parentPackage; /** * 表 */ private String[] tables; /** * 删除表前缀 */ private String tablePrefix; private DbType dbType; private String driverName; public void oracle() { this.dbType = DbType.ORACLE; this.driverName = "oracle.jdbc.OracleDriver"; } public void mysql() { this.dbType = DbType.MYSQL; this.driverName = "com.mysql.cj.jdbc.Driver"; //this.driverName = "com.mysql.jdbc.Driver"; } public void sqlite() { this.dbType = DbType.SQLITE; this.driverName = "org.sqlite.JDBC"; } }
2)生成器: MyBatisPlusGenerator
package cn.hg.biz.mybatis.plus.generator; import com.baomidou.mybatisplus.annotation.IdType; 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.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; public class MyBatisPlusGenerator { private static AutoGeneratorProp buildProp() { AutoGeneratorProp autoGeneratorProp = new AutoGeneratorProp(); // autoGeneratorProp.mysql(); autoGeneratorProp.sqlite(); autoGeneratorProp.setAuthor("hgSuper"); //autoGeneratorProp.setDbUrl("jdbc:mysql://localhost:3306/niubi345_eladmin?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=UTC"); //autoGeneratorProp.setDbUrl("jdbc:mysql://localhost:3306/hg-solr?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"); autoGeneratorProp.setDbUrl("jdbc:sqlite:f:/g/java/sqlite/databases/hg.db"); // jdbc:sqlite::resource:sqlite.db //autoGeneratorProp.setDbUrl("jdbc:mysql://localhost:3306/hg_demo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8"); //autoGeneratorProp.setDbUrl("jdbc:sqlite:hg.db"); //autoGeneratorProp.setDbUserName("hg-solr"); //autoGeneratorProp.setDbUserName("root"); //autoGeneratorProp.setDbPwd("DnfZwE@Zz6QbAYjR4!ND"); //autoGeneratorProp.setDbPwd("root"); autoGeneratorProp.setOutputDir("d://tmp"); autoGeneratorProp.setParentPackage("hg.demo.sqlite.system.demo"); autoGeneratorProp.setTablePrefix("t_"); String[] tables = {"t_demo"}; autoGeneratorProp.setTables(tables); return autoGeneratorProp; } public static void main(String[] args) { AutoGeneratorProp autoGeneratorProp = buildProp(); autoGenerator(autoGeneratorProp); } /** * 自动生成 * @param autoGeneratorProp */ public static void autoGenerator(AutoGeneratorProp autoGeneratorProp) { System.out.println("------------------"); System.out.println("--------开始生成----------"); AutoGenerator autoGenerator = initAutoGenerator(autoGeneratorProp); autoGenerator.execute(); System.out.println("--------生成完成----------"); System.out.println("------------------"); } /** * 初始化-生成器 */ private static AutoGenerator initAutoGenerator(AutoGeneratorProp autoGeneratorProp) { AutoGenerator autoGenerator = new AutoGenerator(); autoGenerator.setGlobalConfig(initGlobalConfig(autoGeneratorProp)); autoGenerator.setDataSource(iniDataSourceConfig(autoGeneratorProp)); autoGenerator.setStrategy(initStrategyConfig(autoGeneratorProp)); autoGenerator.setPackageInfo(initPackageConfig(autoGeneratorProp)); return autoGenerator; } /** * 初始化-全局配置 * @return */ public static GlobalConfig initGlobalConfig(AutoGeneratorProp autoGeneratorProp) { GlobalConfig config = new GlobalConfig(); //config.setAuthor("hgSuper"); config.setAuthor(autoGeneratorProp.getAuthor()); config.setBaseResultMap(false); // 生成路径 //config.setOutputDir("D:\\tmp"); config.setOutputDir(autoGeneratorProp.getOutputDir()); config.setIdType(IdType.INPUT); config.setDateType(DateType.ONLY_DATE); config.setFileOverride(true); return config; } /** * 初始化-包配置 * @return */ private static PackageConfig initPackageConfig(AutoGeneratorProp autoGeneratorProp) { //String parentPackage = "cn.hgsuper.financial.subject"; PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent(autoGeneratorProp.getParentPackage()); packageConfig.setService("service"); packageConfig.setServiceImpl("service.impl"); packageConfig.setMapper("mapper"); packageConfig.setXml("mapper.xml"); packageConfig.setController("controller"); packageConfig.setEntity("entity"); return packageConfig; } /** * 初始化-数据库连接 * @return */ private static DataSourceConfig iniDataSourceConfig(AutoGeneratorProp autoGeneratorProp) { DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(autoGeneratorProp.getDbType()); dataSourceConfig.setUrl(autoGeneratorProp.getDbUrl()); dataSourceConfig.setUsername(autoGeneratorProp.getDbUserName()); dataSourceConfig.setPassword(autoGeneratorProp.getDbPwd()); dataSourceConfig.setDriverName(autoGeneratorProp.getDriverName()); return dataSourceConfig; } /** * 初始化-生成策略 * @return */ private static StrategyConfig initStrategyConfig(AutoGeneratorProp autoGeneratorProp) { // 表名 //String[] tables = new String[] {"hg_financial_subject"}; StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setCapitalMode(true) .setEntityLombokModel(true) // 删除前缀 //.setTablePrefix("hg_") .setTablePrefix(autoGeneratorProp.getTablePrefix()) .setNaming(NamingStrategy.underline_to_camel) .setInclude(autoGeneratorProp.getTables()); return strategyConfig; } }
3)说明
说明1: 这个源码是从项目中抽离出来的,删除了业务代码,如果依赖中报错了,已经是缺依赖,加入依赖即可
说明2: 核心生成代码已经在了,所以一定难不倒牛批的你
说明3: 实在没办法,老早还有个生成器,可以看看