Doma
Doma 2 is a database access framework for Java 8+. Doma has various strengths:
- Verifies and generates source code at compile time using annotation processing.
- Provides type-safe Criteria API.
- Supports Kotlin.
- Uses SQL templates, called "two-way SQL".
- Has no dependence on other libraries.
Examples
Type-safe Criteria API
Written in Java 8:
Entityql entityql = new Entityql(config);
Employee_ e = new Employee_();
Department_ d = new Department_();
List<Employee> list = entityql
.from(e)
.innerJoin(d, on -> on.eq(e.departmentId, d.departmentId))
.where(c -> c.eq(d.departmentName, "SALES"))
.associate(e, d, (employee, department) -> {
employee.setDepartment(department);
department.getEmployeeList().add(employee);
})
.fetch();
Written in Kotlin:
val entityql = KEntityql(config)
val e = Employee_()
val d = Department_()
val list = entityql
.from(e)
.innerJoin(d) { eq(e.departmentId, d.departmentId) }
.where { eq(d.departmentName, "SALES") }
.associate(e, d) { employee, department ->
employee.department = department
department.employeeList += employee
}
.fetch()
See Criteria API for more information.
SQL templates
Written in Java 15:
@Dao
public interface EmployeeDao {
@Sql(
"""
select * from EMPLOYEE where
/*%if salary != null*/
SALARY >= /*salary*/9999
/*%end*/
""")
@Select
List<Employee> selectBySalary(BigDecimal salary);
}
See SQL templates for more information.
More Examples
Try Getting started.
For more complete examples, see simple-examples and spring-boot-jpetstore.
Installing
Gradle
For Java projects:
dependencies {
implementation("org.seasar.doma:doma-core:2.46.0")
annotationProcessor("org.seasar.doma:doma-processor:2.46.0")
}
For Kotlin projects, use doma-kotlin instead of doma-core and use kapt in place of annotationProcessor:
dependencies {
implementation("org.seasar.doma:doma-kotlin:2.46.0")
kapt("org.seasar.doma:doma-processor:2.46.0")
}
Maven
We recommend using Gradle, but if you want to use Maven, see below.
For Java projects:
...
<properties>
<doma.version>2.46.0</doma.version>
</properties>
...
<dependencies>
<dependency>
<groupId>org.seasar.doma</groupId>
<artifactId>doma-core</artifactId>
<version>${doma.version}</version>
</dependency>
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source> <!-- depending on your project -->
<target>1.8</target> <!-- depending on your project -->
<annotationProcessorPaths>
<path>
<groupId>org.seasar.doma</groupId>
<artifactId>doma-processor</artifactId>
<version>${doma.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
For Kotlin projects, see Kotlin document.
Documentation
Forum
https://groups.google.com/g/doma-user
Chatroom
https://domaframework.zulipchat.com
Related projects
- quarkus-doma - Supports integration with Quarkus
- doma-spring-boot - Supports integration with Spring Boot
- doma-compile-plugin - Makes compilation easy
- doma-codegen-plugin - Generates Java and SQL files
Major versions
Status and Repository
Version | Status | Repository | Branch |
---|---|---|---|
Doma 1 | stable | https://github.com/seasarorg/doma/ | master |
Doma 2 | stable | https://github.com/domaframework/doma/ | master |
Compatibility matrix
Doma 1 | Doma 2 | |
---|---|---|
Java 6 | v | |
Java 7 | v | |
Java 8 | v | v |
Java 9 | v | |
Java 10 | v | |
Java 11 | v | |
Java 12 | v | |
Java 13 | v | |
Java 14 | v | |
Java 15 | v | |
Java 16 | v |