# Dao

Artifact: [androidx.room:room-common](https://developer.android.com/jetpack/androidx/releases/room) [View Source](https://cs.android.com/search?q=file:androidx/room/Dao.kt+class:androidx.room.Dao) Added in [2.0.0](https://developer.android.com/jetpack/androidx/releases/room#2.0.0)

*** ** * ** ***


```
@Target(allowedTargets = [AnnotationTarget.CLASS])
@Retention(value = AnnotationRetention.BINARY)
public annotation Dao
```

<br />

*** ** * ** ***

Marks the class as a Data Access Object.

Data Access Objects are the main classes where you define your database interactions. They can include a variety of query methods.

The class marked with `@Dao` should either be an interface or an abstract class. At compile time, Room will generate an implementation of this class when it is referenced by a `https://developer.android.com/reference/androidx/room/Database`.

An abstract `@Dao` class can optionally have a constructor that takes a `https://developer.android.com/reference/androidx/room/Database` as its only parameter.

It is recommended to have multiple `Dao` classes in your codebase depending on the tables they touch.

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/room/Query` |   |
| `https://developer.android.com/reference/androidx/room/Delete` |   |
| `https://developer.android.com/reference/androidx/room/Insert` |   |