Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menggunakan Dropwizard &JDBI untuk menanyakan database dengan banyak skema?

Cara ideal untuk melakukannya adalah, menangkap informasi terkait skema dari permintaan dan menyimpannya di ThreadLocal dan mengatur skema setiap kali koneksi diminta. Sayangnya ketika saya mencoba pendekatan ini, saya menemukan metode setSchema belum diterapkan di driver. Tetapi saya menemukan cara lain (retas) untuk menyelesaikan ini. JDBI menyediakan Locator pernyataan yang dapat kita gunakan di sini untuk menyelesaikan masalah ini.

Katakanlah kita mengirim nama skema dalam Parameter kueri, kita dapat menggunakan filter permintaan jersey untuk mendapatkan nama skema.

public class Schema {
    public static ThreadLocal<String> name = new ThreadLocal<>();
}


public class SchemaNameFilter implements ContainerRequestFilter {

    @Override
    public ContainerRequest filter(ContainerRequest request) {
        if(request.getQueryParameters().containsKey("schema")) {
            Schema.name.set(request.getQueryParameters().get("schema").get(0));
        }
        return request;
    }
}

Ini akan mendapatkan nama skema pada setiap permintaan. Daftarkan filer ini pada bootstrap aplikasi Anda.

environment.jersey().property(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, asList(new SchemaNameFilter()));

Sekarang kita perlu menulis bagian kedua, di mana kita harus menggunakan informasi skema ini. Sertakan SchemaRewriter ini,

public class SchemaReWriter implements StatementLocator {
    @Override
    public String locate(String sql, StatementContext ctx) throws Exception {
        if (nonNull(Schema.name.get())) {
            sql = sql.replaceAll(":schema", Schema.name.get());
        }
        return sql;
    }
}

Katakanlah kita ingin mengakses tabel "pengguna" yang ada di semua skema, tulis kueri seperti ini.

@OverrideStatementLocatorWith(SchemaReWriter.class)
public interface UserDao {

  @SqlQuery("select * from :schema.users")
  public List<User> getAllUsers();

}

Jangan lupa untuk membubuhi keterangan Dao dengan StatementRewriter. Itu saja. Anda tidak perlu khawatir tentang banyak skema.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa password_verify kembali salah?

  2. Mengubah nilai bidang Input saat pengguna memilih opsi dari kotak pilih

  3. MySQL 5.6.10 InnoDB tidak dapat membuat tabel karena tabel sudah ada

  4. Lebih baik menggunakan kurang dari sama atau dalam kueri sql

  5. Android - Permintaan mySQL JSON memberikan NetworkOnMainThreadException