Get a Room
https://commonsware.com/presos/devfestFL2017
All About the Annotations
@Entity models your tables
@DAO defines your data access API
@Database defines your, um, database
Relations
@ForeignKey declares your foreign keys (surprise!)
-
By default, that's it
- No automatic retrieval of related objects
- No collection accessors generated for you
- Why? To make it easier to keep I/O on a background thread
@Relation used to kinda fake ORM APIs a bit
Type Massaging
@TypeConverter: convert objects to/from supported column types
@Embedded: convert batch of columns into an object, embedded in an entity or other object
Transactions
- Default is typical: every DAO method is its own transaction
-
Use
@Transaction
- On a DAO method that calls other DAO methods
- On a
@Query that returns a @Relation
- On a
@Query that might return > 1MB of data
Threading
- Default: everything is synchronous, you handle threading yourself
-
@Query Reactive Options
- Return a
LiveData or something from RxJava (Observable, Single, etc.)
- Both return objects immediately, queries performed once you observe
Security
- By default, everything stored in plaintext
-
CWAC-SafeRoom
- Attaches SQLCipher for Android to Room
- You supply passphrase, ideally
Editable straight from EditText
- One-liner plus a dependency to integrate
Questions?
https://commonsware.com/presos/devfestFL2017