Skip to content

Latest commit

 

History

History
294 lines (237 loc) · 11 KB

generate.md

File metadata and controls

294 lines (237 loc) · 11 KB

database

Eloquent ORM for Java

目录

总览

通过数据库连接信息, 自动生成代码 Generate(entity,model)

非spring

1.引入仓库 pom.xml

<query>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
</query>

2.引入依赖 pom.xml

<dependency>
    <groupId>com.github.gaarason.database-all</groupId>
    <artifactId>database-generator</artifactId>
    <version>RELEASE</version>
</dependency>

3.编写单元测试

package gaarason.database.generator.test;

import com.alibaba.druid.pool.DruidDataSource;
import gaarason.database.connection.GaarasonDataSourceWrapper;
import gaarason.database.eloquent.Model;
import gaarason.database.generator.Generator;
import lombok.extern.slf4j.Slf4j;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;

import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.List;

@Slf4j
@FixMethodOrder(MethodSorters.JVM)
public class GeneratorTests {

  // 推荐
  @Test
  public void run有参构造() {
    String jdbcUrl = "jdbc:mysql://mysql.local/test_master_0?useUnicode=true&characterEncoding=utf-8" +
            "&zeroDateTimeBehavior=convertToNull&useSSL=true&autoReconnect=true&serverTimezone=Asia/Shanghai";
    String username = "root";
    String password = "root";
    Generator generator = new Generator(jdbcUrl, username, password);
    // 风格切换
    generator.setStyle(Style.ENTITY);
    // set
    generator.setOutputDir("./src/test/java/");     // 所有生成文件的路径
    generator.setNamespace("gaarason.database.test.models.relation.pojo");                  // 所有生成文件的所属命名空间
    generator.setSpringBoot(Generator.SpringBootVersion.THREE);                             // 是否生成spring boot相关注解
    generator.setCorePoolSize(20);                  // 所用的线程数
    generator.setSwagger(false);                    // 是否生成swagger相关注解
    generator.setValidator(false);                  // 是否生成validator相关注解
    generator.setJdkDependVersion(Generator.JdkDependVersion.JAKARTA);  // jdk依赖使用的包是 javax 还是 jakarta ?


    generator.setEntityStaticField(false);          // 是否在实体中生成静态字段
    generator.setBaseEntityDir("base");             // 实体父类的相对路径
    generator.setBaseEntityFields("id");            // 实体父类存在的字段
    generator.setBaseEntityName("BaseEntity");      // 实体父类的类名
    generator.setEntityDir("entity");               // 实体的相对路径
    generator.setEntityPrefix("");                  // 实体的类名前缀
    generator.setEntitySuffix("");                  // 实体的类名后缀

//      generator.setColumnDisSelectable("created_at", "updated_at");             // 字段, 不可查询
//
//      generator.setColumnFill(FieldFill.NotFill.class, "created_at", "updated_at");  // 字段, 填充方式
//
//      generator.setColumnStrategy(FieldStrategy.Default.class, "created_at", "updated_at");   // 字段, 使用策略
//      generator.setColumnInsertStrategy(FieldStrategy.Never.class, "created_at", "updated_at");   // 字段, 新增使用策略
//      generator.setColumnUpdateStrategy(FieldStrategy.Never.class, "created_at", "updated_at");   // 字段, 更新使用策略
//      generator.setColumnConditionStrategy(FieldStrategy.Default.class, "created_at", "updated_at");   // 字段, 条件使用策略
//
//      generator.setColumnConversion(FieldConversion.Default.class, "created_at", "updated_at");   // 字段, 序列化与反序列化方式

    generator.setBaseModelDir("base");              // 模型父类的相对路径
    generator.setBaseModelName("BaseModel");        // 模型父类的类名
    generator.setModelDir("model");                 // 模型的相对路径
    generator.setModelPrefix("");                   // 模型的类名前缀
    generator.setModelSuffix("Model");              // 模型的类名后缀

    // 执行
    generator.run();
  }

  @Test
  public void run无参构造() {
    ProxyDataSource gaarasonDataSourceWrapper = gaarasonDataSourceWrapper();
    ToolModel toolModel = new ToolModel(gaarasonDataSourceWrapper);
    AutoGenerator autoGenerator = new AutoGenerator(toolModel);
    // set
    autoGenerator.setStaticField(true);
    autoGenerator.setCorePoolSize(20);
    autoGenerator.setOutputDir("./src/test/java/");
    autoGenerator.setNamespace("test.data");
    autoGenerator.setDisInsertable("created_at", "updated_at");
    autoGenerator.setDisUpdatable("created_at", "updated_at");

    autoGenerator.run();
  }

  private DataSource dataSourceMaster0() {
    DruidDataSource druidDataSource = new DruidDataSource();
    druidDataSource.setUrl(
            "jdbc:mysql://mysql.local/test_master_0?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=true&autoReconnect=true&serverTimezone=Asia/Shanghai");
    druidDataSource.setUsername("root");
    druidDataSource.setPassword("root");

    druidDataSource.setDbType("com.alibaba.druid.pool.DruidDataSource");
    druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    druidDataSource.setInitialSize(20);
    druidDataSource.setMaxActive(20);
    druidDataSource.setLoginTimeout(3);
    druidDataSource.setQueryTimeout(3);
    return druidDataSource;
  }

  private List<DataSource> dataSourceMasterList() {
    List<DataSource> dataSources = new ArrayList<>();
    dataSources.add(dataSourceMaster0());
    return dataSources;
  }

  private ProxyDataSource gaarasonDataSourceWrapper() {
    List<DataSource> dataSources = dataSourceMasterList();
    return new ProxyDataSource(dataSources);
  }

  public static class ToolModel extends Model<ToolModel.Inner, Object> {
    private final ProxyDataSource gaarasonDataSourceWrapper;

    public ToolModel(ProxyDataSource dataSource) {
      gaarasonDataSourceWrapper = dataSource;
    }

    public ProxyDataSource getProxyDataSource() {
      return gaarasonDataSourceWrapper;
    }

    public static class Inner {
    }
  }

  public static class AutoGenerator extends Generator {
    private final Model toolModel;

    public AutoGenerator(Model model) {
      toolModel = model;
    }

    public Model getModel() {
      return toolModel;
    }

  }
}

spring

1.引入仓库 pom.xml

<query>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
</query>

2.引入依赖 pom.xml

<dependency>
    <groupId>com.github.gaarason.database-all</groupId>
    <artifactId>database-spring-boot-starter</artifactId>
    <version>RELEASE</version>
</dependency>

3.配置连接 application.properties

spring.datasource.druid.url=jdbc:mysql://mysql.local/test_master_0?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=true&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.druid.username=root
spring.datasource.druid.password=root
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.db-type=com.alibaba.druid.pool.DruidDataSource

4.编写单元测试

package gaarason.database.spring.boot.starter.test;

import gaarason.database.eloquent.GeneralModel;
import gaarason.database.eloquent.Record;
import org.junit.Assert;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.Map;

@RunWith(SpringRunner.class)
@SpringBootTest
@FixMethodOrder(MethodSorters.JVM)
public class TestApplicationTests {

    @Resource
    GeneralGenerator generator;

    // 执行此方法即可生成    
    @Test
    public void generate() {
        // set
        // 风格切换
        generator.setStyle(Style.ENTITY);
        // set
        generator.setOutputDir("./src/test/java/");     // 所有生成文件的路径
      
        generator.setNamespace("gaarason.database.test.models.relation.pojo");                  // 所有生成文件的所属命名空间
        generator.setSpringBoot(Generator.SpringBootVersion.THREE);                             // 是否生成spring boot相关注解
        generator.setCorePoolSize(20);                  // 所用的线程数
        generator.setSwagger(false);                    // 是否生成swagger相关注解
        generator.setValidator(false);                  // 是否生成validator相关注解
        generator.setJdkDependVersion(Generator.JdkDependVersion.JAKARTA);  // jdk依赖使用的包是 javax 还是 jakarta ?


        generator.setEntityStaticField(false);          // 是否在实体中生成静态字段
        generator.setBaseEntityDir("base");             // 实体父类的相对路径
        generator.setBaseEntityFields("id");            // 实体父类存在的字段
        generator.setBaseEntityName("BaseEntity");      // 实体父类的类名
        generator.setEntityDir("entity");               // 实体的相对路径
        generator.setEntityPrefix("");                  // 实体的类名前缀
        generator.setEntitySuffix("");                  // 实体的类名后缀

//      generator.setColumnDisSelectable("created_at", "updated_at");             // 字段, 不可查询
//
//      generator.setColumnFill(FieldFill.NotFill.class, "created_at", "updated_at");  // 字段, 填充方式
//
//      generator.setColumnStrategy(FieldStrategy.Default.class, "created_at", "updated_at");   // 字段, 使用策略
//      generator.setColumnInsertStrategy(FieldStrategy.Never.class, "created_at", "updated_at");   // 字段, 新增使用策略
//      generator.setColumnUpdateStrategy(FieldStrategy.Never.class, "created_at", "updated_at");   // 字段, 更新使用策略
//      generator.setColumnConditionStrategy(FieldStrategy.Default.class, "created_at", "updated_at");   // 字段, 条件使用策略
//
//      generator.setColumnConversion(FieldConversion.Default.class, "created_at", "updated_at");   // 字段, 序列化与反序列化方式

        generator.setBaseModelDir("base");              // 模型父类的相对路径
        generator.setBaseModelName("BaseModel");        // 模型父类的类名
        generator.setModelDir("model");                 // 模型的相对路径
        generator.setModelPrefix("");                   // 模型的类名前缀
        generator.setModelSuffix("Model");              // 模型的类名后缀

        // 执行
        generator.run();
    }
}