Skip to content

Instantly share code, notes, and snippets.

@disc99
Last active November 8, 2018 08:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save disc99/cb3cbd138b2dc4a41142d807515be569 to your computer and use it in GitHub Desktop.
Save disc99/cb3cbd138b2dc4a41142d807515be569 to your computer and use it in GitHub Desktop.
public interface MySqlDao {
    default int findRows() {
        return SelectBuilder.newInstance(Config.get(this))
                .sql("SELECT FOUND_ROWS()")
                .getScalarSingleResult(int.class);
    }

    default int lastInsertId() {
        return SelectBuilder.newInstance(Config.get(this))
                .sql("SELECT LAST_INSERT_ID()")
                .getScalarSingleResult(int.class);
    }
}
public interface SingleIdDao<T, ID> extends BaseDao {

    @SuppressWarnings("unchecked")
    default Optional<T> selectById(ID id) {
        Class<T> clazz = entityClass();
        Config config = Config.get(this);
        SelectBuilder builder = SelectBuilder.newInstance(config);
        EntityType<T> entityType = EntityTypeFactory.getEntityType(clazz, config.getClassHelper());
        builder.sql("SELECT * FROM " + entityType.getTableName() +
                " WHERE " + entityType.getIdPropertyTypes().get(0).getColumnName() + " = " + id);
        return builder.getOptionalEntitySingleResult(clazz);
    }
}
public interface BaseDao<T> extends MySqlDao {

    default int count() {
        Class<T> clazz = entityClass();
        Config config = Config.get(this);
        SelectBuilder builder = SelectBuilder.newInstance(config);
        EntityType<T> entityType = EntityTypeFactory.getEntityType(clazz, config.getClassHelper());
        builder.sql("SELECT count(*) FROM " + entityType.getTableName());
        return builder.getScalarSingleResult(int.class);
    }

//    default List<T> selectAll() {
//            Class<T> clazz = entityClass();
//            Config config = Config.get(this);
//            SelectBuilder builder = SelectBuilder.newInstance(config);
//            EntityType<T> entityType = EntityTypeFactory.getEntityType(clazz, config.getClassHelper());
//            builder.sql("SELECT * FROM " + entityType.getTableName());
//            return builder.getEntityResultList(clazz);
//    }

    @SuppressWarnings("unchecked")
    default Class<T> entityClass() {
        try {
            Class<?> clazz = this.getClass();
            Type type = clazz.getInterfaces()[0].getAnnotatedInterfaces()[0].getType();
            ParameterizedType pt = (ParameterizedType)type;
            Type[] actualTypeArguments = pt.getActualTypeArguments();
            return (Class<T>)actualTypeArguments[0];
        } catch (Exception e) {
            throw new UnsupportedOperationException("Failed to search entity class", e);
        }
    }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment