Giter Site home page Giter Site logo

micronaut-requery's Introduction

Micronaut-Requery

Micronaut support for Requery

HowTo To install

dependencies {
    //...
    kapt("io.requery:requery-processor:${requeryVersion}")
    //...
    implementation("com.github.ryarnyah:micronaut-requery:${micronautKotlinRequeryVersion}")
    implementation("io.requery:requery:${requeryVersion}")
    implementation("io.requery:requery-kotlin:${requeryVersion}")
    //...
}

HowToUse

Kotlin version

@Entity
data class TestData (
    @get:Key
    @get:Column(nullable = false, length = 256)
    var uid: String
)

@Factory
class MicronautTestFactory {

    @Bean
    fun entityModel(): EntityModel {
        return Models.DEFAULT
    }
}

@Singleton
open class TestService(
    private val entityDataStore: MicronautKotlinEntityDataStore<TestData>
) {
    @Transactional
    open fun save(entity: TestData) {
        entityDataStore.upsert(entity)
    }
    
    open fun findById(id: String): TestData? {
        return entityDataStore.findByKey(TestData::class, id)
    }
}

Java version

@Entity
public class TestData extends Observable, Parcelable, Persistable {
    @Key
    @Generated
    String getUid();
}

@Factory
public class MicronautTestFactory {

    @Bean
    public EntityModel entityModel() {
        return Models.DEFAULT;
    }
}

@Singleton
public class TestService {
    
    private final MicronautEntityDataStore<TestData> entityDataStore;

    public TestService(MicronautEntityDataStore<TestData> entityDataStore) {
        this.entityDataStore = entityDataStore;
    }

    @Transactional
    public void save(TestData entity) {
        entityDataStore.upsert(entity);
    }
    
    public TestData findById(String id) {
        return entityDataStore.findByKey(TestData.class, id);
    }
}

Configuration

Basic configuration can be applied

requery:
  default:
    use-default-logging: false # boolean
    statement-cache-size: 0 # integer
    batch-update-size: 64 # integer
    quote-table-names: false # boolean
    quote-column-names: false # boolean

For more specific configuration, define a bean with RequeryDataSourceConfiguration.DEFAULT qualifier.

Kotlin version

@Factory
class MicronautTestFactory {

    @Bean
    @Named(RequeryDataSourceConfiguration.DEFAULT)
    fun requeryDataSourceConfiguration(): RequeryDataSourceConfiguration {
        val configuration = RequeryDataSourceConfiguration()
        configuration.useDefaultLogging = true
        return configuration
    }
}

Java version

@Factory
public class MicronautTestFactory {

    @Bean
    @Named(RequeryDataSourceConfiguration.DEFAULT)
    public RequeryDataSourceConfiguration requeryDataSourceConfiguration() {
        RequeryDataSourceConfiguration configuration = new RequeryDataSourceConfiguration();
        configuration.setUseDefaultLogging(true);
        return configuration;
    }
}

You can use multiple dataSource like with JDBC (it will try to find dataSource, transactionManager and entityModel with the same qualifier)

requery:
  second-datasource:

Kotlin version

@Factory
class MicronautTestFactory {
    
    @Bean
    // Define it as primary
    @Primary
    fun entityModel(): EntityModel {
        return Models.DEFAULT
    }

    @Bean
    @Named("second-datasource")
    fun secondEntityModel(): EntityModel {
        return Models.DEFAULT
    }

}

Java version

@Factory
public class MicronautTestFactory {
    
    @Bean
    // Define it as primary
    @Primary
    public EntityModel entityModel() {
        return Models.DEFAULT;
    }

    @Bean
    @Named("second-datasource")
    public EntityModel secondEntityModel() {
        return Models.DEFAULT;
    }

}

Current status

  • Add LinkedDataSource to solve statement.getConnection().close() (in requery)
  • Disable requery transaction to prefer using Micronaut transaction support
  • Disable requery cache using EmptyEntityCache
  • Add Java Support

micronaut-requery's People

Contributors

ryarnyah avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.