GithubHelp home page GithubHelp logo

igit-cn / mybatis-dynamic-sql Goto Github PK

View Code? Open in Web Editor NEW

This project forked from mybatis/mybatis-dynamic-sql

0.0 0.0 0.0 16.29 MB

SQL DSL (Domain Specific Language) for Kotlin and Java. Supports rendering for MyBatis or Spring JDBC Templates

Home Page: http://www.mybatis.org/mybatis-dynamic-sql/docs/introduction.html

License: Apache License 2.0

Java 77.41% CSS 0.03% Kotlin 22.56%

mybatis-dynamic-sql's Introduction

MyBatis Dynamic SQL

Build Status Coverage Status Maven central Sonatype Nexus (Snapshots) License Quality Gate Status Security Rating

What Is This?

This library is a general purpose SQL generator. Think of it as a typesafe and expressive SQL DSL (domain specific language), with support for rendering SQL formatted properly for MyBatis3 and Spring's NamedParameterJDBCTemplate.

The library also contains extensions for Kotlin that enable an idiomatic Kotlin DSL for SQL.

The library will generate full DELETE, INSERT, SELECT, and UPDATE statements. The DSL implemented by the library is very similar to native SQL but it includes many functions that allow for very dynamic SQL statements. For example, a typical search can be coded with a query like this (the following code is Kotlin, but Java code is very similar):

   fun search(id: String?, firstName: String?, lastName: String?) =
        select(Customer.id, Customer.firstName, Customer.lastName) {
            from(Customer)
            where { Customer.active.isTrue() }
            and { Customer.id (isEqualToWhenPresent(id).map{ it?.padStart(5, '0') }) }
            and { Customer.firstName (isLikeCaseInsensitiveWhenPresent(firstName)
                .map{ "%" + it.trim() + "%" }) }
            and { Customer.lastName (isLikeCaseInsensitiveWhenPresent(lastName)
                .map{ "%" + it.trim() + "%" }) }
            orderBy(Customer.lastName, Customer.firstName)
            limit(500)
        }

This query does quite a lot...

  1. It is a search with three search criteria - any combination of search criteria can be used
  2. Only records with an active status will be returned
  3. If id is specified, it will be padded to length 5 with '0' at the beginning of the string
  4. If firstName is specified, it will be used in a case-insensitive search and SQL wildcards will be appended
  5. If lastName is specified, it will be used in a case-insensitive search and SQL wildcards will be appended
  6. The query results are limited to 500 rows

Using the dynamic SQL features of the library eliminates a lot of code that would be required for checking nulls, adding wild cards, etc. This query clearly expresses the intent of the search in just a few lines.

See the following pages for detailed information:

Page Comments
Quick Start Shows a complete example of building code for this library
MyBatis3 Support Information about specialized support for MyBatis3. The examples on this page are similar to the code generated by MyBatis Generator
Kotlin Support with MyBatis3 Information about the Kotlin extensions and Kotlin DSL when using MyBatis3 as the runtime
Spring Support Information about specialized support for Spring JDBC Templates
Kotlin Support with Spring Information about the Kotlin extensions and Kotlin DSL when using Spring JDBC Template as the runtime
Spring Batch Support Information about specialized support for Spring Batch using the MyBatis Spring Integration

The library test cases provide several complete examples of using the library in various different styles:

Language Runtime Comments Code Directory
Java MyBatis3 Example using Java utility classes for MyBatis in the style of MyBatis Generator ../examples/simple
Java MyBatis3 + MyBatis-Spring Example using MyBatis-Spring integration ../examples/column/comparison
Java MyBatis3 + MyBatis-Spring (Spring Batch) Example using Java utility classes for the MyBatis integration with Spring Batch ../examples/springbatch
Java Spring JDBC Example using Java utility classes for Spring JDBC Template ../examples/spring
Kotlin MyBatis3 Example using Kotlin utility classes for MyBatis in the style of MyBatis Generator ../examples/kotlin/mybatis3/canonical
Kotlin MyBatis3 + MyBatis-Spring Example using MyBatis-Spring integration in Kotlin ../examples/kotlin/mybatis3/column/comparison
Kotlin Spring JDBC Example using Kotlin utility classes for Spring JDBC Template ../examples/kotlin/spring/canonical

Requirements

The library has no dependencies. Java 8 or higher is required.

mybatis-dynamic-sql's People

Contributors

dependabot-preview[bot] avatar dependabot[bot] avatar harawata avatar hazendaz avatar hboutemy avatar jeffgbutler avatar joshuajeme avatar kazuki43zoo avatar liuhuagui avatar pelmegov avatar sicaine avatar teillet29200 avatar xuejiangtao avatar youluzheng 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.