@RegisterMapperFactory(MyFactory.class) public static interface FooDao { @SqlQuery("select * from something") List<Foo> select(); @SqlUpdate("insert into something (id, name) VALUES (:id, :name)") void insert(@Bind("id") int id, @Bind("name") String name); }
public SqlStatementCustomizer createForType(Annotation annotation, Class sqlObjectType) { final RegisterMapperFactory ma = (RegisterMapperFactory) annotation; final ResultSetMapperFactory[] m = new ResultSetMapperFactory[ma.value().length]; try { Class<? extends ResultSetMapperFactory>[] mcs = ma.value(); for (int i = 0; i < mcs.length; i++) { m[i] = mcs[i].newInstance(); } } catch (Exception e) { throw new IllegalStateException("unable to create a specified result set mapper", e); } return new SqlStatementCustomizer() { public void apply(SQLStatement statement) { if (statement instanceof Query) { Query q = (Query) statement; for (ResultSetMapperFactory factory : m) { q.registerMapper(factory); } } } }; }
@RegisterMapperFactory(MyFactory.class) public static interface FooDao { @SqlQuery("select * from something") List<Foo> select(); @SqlUpdate("insert into something (id, name) VALUES (:id, :name)") void insert(@Bind("id") int id, @Bind("name") String name); }
public SqlStatementCustomizer createForMethod(Annotation annotation, Class sqlObjectType, Method method) { final RegisterMapperFactory ma = (RegisterMapperFactory) annotation; final ResultSetMapperFactory[] m = new ResultSetMapperFactory[ma.value().length]; try { Class<? extends ResultSetMapperFactory>[] mcs = ma.value(); for (int i = 0; i < mcs.length; i++) { m[i] = mcs[i].newInstance(); } } catch (Exception e) { throw new IllegalStateException("unable to create a specified result set mapper", e); } return new SqlStatementCustomizer() { public void apply(SQLStatement statement) { if (statement instanceof Query) { Query q = (Query) statement; for (ResultSetMapperFactory factory : m) { q.registerMapper(factory); } } } }; }
@RegisterArgumentFactory(UuidArgumentFactory.class) @RegisterMapperFactory(UuidMapperFactory.class) public interface H2ShardDao extends ShardDao { @Override @SqlBatch("MERGE INTO deleted_shards (shard_uuid, delete_time)\n" + "VALUES (:shardUuid, CURRENT_TIMESTAMP)") void insertDeletedShards(@Bind("shardUuid") Iterable<UUID> shardUuids); @SqlUpdate("DELETE FROM transactions\n" + "WHERE end_time < :maxEndTime\n" + " AND successful IN (TRUE, FALSE)\n" + " AND transaction_id NOT IN (SELECT transaction_id FROM created_shards)\n" + "LIMIT " + CLEANUP_TRANSACTIONS_BATCH_SIZE) int deleteOldCompletedTransactions(@Bind("maxEndTime") Timestamp maxEndTime); }
@Override public SqlStatementCustomizer createForMethod(Annotation annotation, Class sqlObjectType, Method method) { final RegisterMapperFactory ma = (RegisterMapperFactory) annotation; final ResultSetMapperFactory[] m = new ResultSetMapperFactory[ma.value().length]; try { Class<? extends ResultSetMapperFactory>[] mcs = ma.value(); for (int i = 0; i < mcs.length; i++) { m[i] = mcs[i].newInstance(); } } catch (Exception e) { throw new IllegalStateException("unable to create a specified result set mapper", e); } return new SqlStatementCustomizer() { @Override public void apply(SQLStatement statement) { if (statement instanceof Query) { Query q = (Query) statement; for (ResultSetMapperFactory factory : m) { q.registerMapper(factory); } } } }; }
@RegisterArgumentFactory(UuidArgumentFactory.class) @RegisterMapperFactory(UuidMapperFactory.class) public interface H2ShardDao extends ShardDao { @Override @SqlBatch("MERGE INTO deleted_shards (shard_uuid, delete_time)\n" + "VALUES (:shardUuid, CURRENT_TIMESTAMP)") void insertDeletedShards(@Bind("shardUuid") Iterable<UUID> shardUuids); @SqlUpdate("DELETE FROM transactions\n" + "WHERE end_time < :maxEndTime\n" + " AND successful IN (TRUE, FALSE)\n" + " AND transaction_id NOT IN (SELECT transaction_id FROM created_shards)\n" + "LIMIT " + CLEANUP_TRANSACTIONS_BATCH_SIZE) int deleteOldCompletedTransactions(@Bind("maxEndTime") Timestamp maxEndTime); }
@Override public SqlStatementCustomizer createForType(Annotation annotation, Class sqlObjectType) { final RegisterMapperFactory ma = (RegisterMapperFactory) annotation; final ResultSetMapperFactory[] m = new ResultSetMapperFactory[ma.value().length]; try { Class<? extends ResultSetMapperFactory>[] mcs = ma.value(); for (int i = 0; i < mcs.length; i++) { m[i] = mcs[i].newInstance(); } } catch (Exception e) { throw new IllegalStateException("unable to create a specified result set mapper", e); } return new SqlStatementCustomizer() { @Override public void apply(SQLStatement statement) { if (statement instanceof Query) { Query q = (Query) statement; for (ResultSetMapperFactory factory : m) { q.registerMapper(factory); } } } }; }
@RegisterArgumentFactory(UuidArgumentFactory.class) @RegisterMapperFactory(UuidMapperFactory.class) public interface MySqlShardDao extends ShardDao { @Override @SqlUpdate("DELETE x\n" + "FROM shard_nodes x\n" + "JOIN shards USING (shard_id)\n" + "WHERE table_id = :tableId") void dropShardNodes(@Bind("tableId") long tableId); @Override @SqlBatch("INSERT IGNORE INTO deleted_shards (shard_uuid, delete_time)\n" + "VALUES (:shardUuid, CURRENT_TIMESTAMP)") void insertDeletedShards(@Bind("shardUuid") Iterable<UUID> shardUuids); // 'order by' is needed in this statement in order to make it compatible with statement-based replication @SqlUpdate("DELETE FROM transactions\n" + "WHERE end_time < :maxEndTime\n" + " AND successful IN (TRUE, FALSE)\n" + " AND transaction_id NOT IN (SELECT transaction_id FROM created_shards)\n" + "ORDER BY end_time, transaction_id\n" + "LIMIT " + CLEANUP_TRANSACTIONS_BATCH_SIZE) int deleteOldCompletedTransactions(@Bind("maxEndTime") Timestamp maxEndTime); }
@RegisterArgumentFactory(UuidArgumentFactory.class) @RegisterMapperFactory(UuidMapperFactory.class) public interface MySqlShardDao extends ShardDao { @Override @SqlUpdate("DELETE x\n" + "FROM shard_nodes x\n" + "JOIN shards USING (shard_id)\n" + "WHERE table_id = :tableId") void dropShardNodes(@Bind("tableId") long tableId); @Override @SqlBatch("INSERT IGNORE INTO deleted_shards (shard_uuid, delete_time)\n" + "VALUES (:shardUuid, CURRENT_TIMESTAMP)") void insertDeletedShards(@Bind("shardUuid") Iterable<UUID> shardUuids); // 'order by' is needed in this statement in order to make it compatible with statement-based replication @SqlUpdate("DELETE FROM transactions\n" + "WHERE end_time < :maxEndTime\n" + " AND successful IN (TRUE, FALSE)\n" + " AND transaction_id NOT IN (SELECT transaction_id FROM created_shards)\n" + "ORDER BY end_time, transaction_id\n" + "LIMIT " + CLEANUP_TRANSACTIONS_BATCH_SIZE) int deleteOldCompletedTransactions(@Bind("maxEndTime") Timestamp maxEndTime); }
@RegisterMapperFactory(BeanMapperFactory.class) @RegisterColumnMapper(ValueTypeMapper.class) public interface TestDao { @SqlQuery("select * from testBean") List<TestBean> listBeans(); @SqlQuery("select * from testBean") List<String> listStrings(); @SqlQuery("select * from testBean") List<TestEnum> listEnums(); @SqlQuery("select * from testBean") List<ValueType> listValueTypes(); }
@RegisterArgumentFactory(UuidArgumentFactory.class) @RegisterMapperFactory(UuidMapperFactory.class) public interface ShardDao
@RegisterArgumentFactory(UuidArgumentFactory.class) @RegisterMapperFactory(UuidMapperFactory.class) public interface ShardDao
@RegisterArgumentFactory(UuidArgumentFactory.class) @RegisterMapperFactory(UuidMapperFactory.class) interface TestingShardDao extends H2ShardDao