@Target(value=METHOD) @Retention(value=RUNTIME) public @interface DaoFactory
Mapper interface.
Example:
@Mapper
public interface InventoryMapper {
@DaoFactory
ProductDao productDao();
}
The return type of the method must be a Dao-annotated interface.
If the method takes no arguments, the DAO operates on the session's default keyspace (assuming that one was set), and the entity's default table:
// Example 1: the session has a default keyspace
CqlSession session = CqlSession.builder().withKeyspace("test").build();
InventoryMapper inventoryMapper = new InventoryMapperBuilder(session).build();
ProductDao dao = inventoryMapper.productDao();
Product product = dao.selectById(1);
// => success (selects from test.product)
// Example 2: the session has no default keyspace
CqlSession session = CqlSession.builder().build();
InventoryMapper inventoryMapper = new InventoryMapperBuilder(session).build();
ProductDao dao = inventoryMapper.productDao();
Product product = dao.selectById(1);
// => CQL error (No keyspace has been specified. USE a keyspace, or explicitly specify keyspace.tablename)
You can also have the method take the keyspace and table as arguments (annotated respectively
with DaoKeyspace and DaoTable):
@Mapper
public interface InventoryMapper {
@DaoFactory
ProductDao productDao(@DaoKeyspace String keyspace);
@DaoFactory
ProductDao productDao(@DaoKeyspace String keyspace, @DaoTable String table);
}
This allows you to reuse the same DAO interface to operate on different tables:
ProductDao dao1 = inventoryMapper.productDao("keyspace1");
Product product = dao1.selectById(1); // selects from keyspace1.product
ProductDao dao2 = inventoryMapper.productDao("keyspace2");
Product product = dao2.selectById(1); // selects from keyspace2.product
ProductDao dao3 = inventoryMapper.productDao("keyspace3", "table3");
Product product = dao3.selectById(1); // selects from keyspace3.table3
In all cases, DAO instances are initialized lazily and cached for future calls:
ProductDao dao1 = inventoryMapper.productDao("keyspace1", "product");
ProductDao dao2 = inventoryMapper.productDao("keyspace1", "product");
assert dao1 == dao2; // same arguments, same instance
Note that the cache is a simple map with no eviction mechanism.Copyright © 2017–2020. All rights reserved.