Objek akses data (DAO) di Jawa


347

Saya sedang membaca dokumen dan menemukan istilah yang disebut DAO. Saya menemukan bahwa itu adalah Objek Akses Data. Bisakah seseorang tolong jelaskan kepada saya apa ini sebenarnya?

Saya tahu bahwa ini adalah semacam antarmuka untuk mengakses data dari berbagai jenis sumber, di tengah-tengah penelitian kecil ini, saya bertemu dengan konsep yang disebut sumber data atau objek sumber data, dan banyak hal menjadi kacau dalam pikiran saya.

Saya benar-benar ingin tahu apa yang DAOdiprogram dalam hal di mana ia digunakan. Bagaimana ini digunakan? Setiap tautan ke halaman yang menjelaskan konsep ini dari hal-hal yang sangat mendasar juga dihargai.

Jawaban:


447

Objek Akses Data pada dasarnya adalah objek atau antarmuka yang menyediakan akses ke database yang mendasarinya atau penyimpanan kegigihan lainnya.

Itulah definisi dari: http://en.wikipedia.org/wiki/Data_access_object

Periksa juga diagram urutan di sini: http://www.oracle.com/technetwork/java/dataaccessobject-138824.html

Mungkin contoh sederhana dapat membantu Anda memahami konsep:

Katakanlah kita memiliki entitas yang mewakili karyawan:

public class Employee {

    private int id;
    private String name;


    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}

Entitas karyawan akan dipertahankan ke dalam Employeetabel yang sesuai dalam database. Antarmuka DAO sederhana untuk menangani operasi database yang diperlukan untuk memanipulasi entitas karyawan akan seperti:

interface EmployeeDAO {

    List<Employee> findAll();
    List<Employee> findById();
    List<Employee> findByName();
    boolean insertEmployee(Employee employee);
    boolean updateEmployee(Employee employee);
    boolean deleteEmployee(Employee employee);

}

Selanjutnya kita harus menyediakan implementasi konkret untuk antarmuka itu untuk berurusan dengan SQL server, dan yang lain untuk menangani file flat, dll.


4
hai rami, saya sangat senang thayt Anda mencoba menjelaskan saya dengan contoh yang sangat sederhana, itulah yang saya butuhkan. dapatkah Anda jelaskan apa yang Anda maksud dengan 'implementasi konkret' apakah maksud Anda bahwa kami harus menulis definisi metode selanjutnya dengan mengimplementasikan antarmuka ke kelas .. ??
Vasanth Nag KV

Ya itu betul. Seperti kelas yang disebut EmployeeSQLServerDAO yang mengimplementasikan antarmuka EmployeeDAO dengan memberikan implementasi penuh untuk metode-metodenya dengan cara yang relevan dengan SQL Server
Rami

4
jadi itu saja DAO ?? ini hanya kelas yang KAMI tulis untuk mengakses basis data. setiap kali kita membutuhkan layanan dari basis data, kita membuat objek DAO menggunakannya untuk operasi basis data dan kemudian menyingkirkan DAO begitu kita mendapatkan apa yang kita inginkan dari basis data. Apakah saya benar?? dan bisakah saya mengetahui Lingkup konsep DAO ini rami ??
Vasanth Nag KV

5
Ya, DAO sesuai namanya adalah untuk mengakses / memperbarui penyimpanan yang mendasarinya mengenai entitas / kelas tertentu. Jadi dalam contoh di atas kita memiliki kelas karyawan / entitas yang kita gunakan tabel DB server SQL untuk bertahan. DAO Karyawan akan berisi metode untuk menyisipkan / menghapus / memperbarui / memilih karyawan
Rami

2
@ PhilipRego kita tentu dapat memiliki beberapa implementasi misalnya implementasi server MSSQL, dan satu lagi yang menggunakan file CSV untuk digunakan dengan unit test.
Rami

86

Apa itu DATA ACCESS OBJECT (DAO) -

Ini adalah objek / antarmuka , yang digunakan untuk mengakses data dari basis data penyimpanan data.

MENGAPA KITA MENGGUNAKAN DAO:

itu abstrak pengambilan data dari sumber daya data seperti database. Konsepnya adalah "memisahkan antarmuka klien sumber daya data dari mekanisme akses datanya."

Masalah dengan mengakses data secara langsung adalah bahwa sumber data dapat berubah. Pertimbangkan, misalnya, bahwa aplikasi Anda digunakan di lingkungan yang mengakses database Oracle. Kemudian ini digunakan untuk lingkungan yang menggunakan Microsoft SQL Server. Jika aplikasi Anda menggunakan prosedur tersimpan dan kode khusus basis data (seperti menghasilkan urutan nomor), bagaimana Anda mengatasinya dalam aplikasi Anda? Anda memiliki dua opsi:

  • Tulis ulang aplikasi Anda untuk menggunakan SQL Server dan bukan Oracle (atau tambahkan kode kondisional untuk menangani perbedaan), atau
  • Buat lapisan di antara logika aplikasi Anda dan akses data


Secara umum disebut sebagai Pola DAO , terdiri dari:

  • Antarmuka Objek Akses Data - Antarmuka ini mendefinisikan operasi standar yang akan dilakukan pada objek model.
  • Kelas konkret objek akses data -Kelas ini mengimplementasikan antarmuka di atas. Kelas ini bertanggung jawab untuk mendapatkan data dari sumber data yang dapat berupa database / xml atau mekanisme penyimpanan lainnya.
  • Model Object atau Value Object - Objek ini adalah POJO sederhana yang berisi metode get / set untuk menyimpan data yang diambil menggunakan kelas DAO.

Silakan periksa contoh ini, Ini akan menghapus lebih jelas.

Contoh
saya berasumsi bahwa hal-hal ini harus telah membersihkan pemahaman Anda tentang DAO hingga batas tertentu.


13

DAO (Data Access Object) adalah pola desain yang sangat digunakan dalam aplikasi perusahaan. Ini pada dasarnya adalah modul yang digunakan untuk mengakses data dari setiap sumber (DBMS, XML dan sebagainya). Saya sarankan Anda membaca beberapa contoh, seperti ini:

Contoh DAO

Harap dicatat bahwa ada berbagai cara untuk mengimplementasikan Pola DAO asli , dan ada banyak kerangka kerja yang dapat menyederhanakan pekerjaan Anda. Sebagai contoh, kerangka kerja ORM (Object Relational Mapping) seperti iBatis atau Hibernate, digunakan untuk memetakan hasil query SQL ke objek java.

Semoga ini bisa membantu, Bye!


8

Pola Objek Akses Data atau pola DAO digunakan untuk memisahkan API mengakses data tingkat rendah atau operasi dari layanan bisnis tingkat tinggi. Berikut ini adalah peserta dalam Pola Objek Akses Data.

Antarmuka Objek Akses Data - Antarmuka ini mendefinisikan operasi standar yang akan dilakukan pada objek model.

Akses Data objek konkret kelas -Kelas ini mengimplementasikan antarmuka di atas Kelas ini bertanggung jawab untuk mendapatkan data dari sumber data yang dapat berupa database / xml atau mekanisme penyimpanan lainnya.

Model Object atau Value Object - Objek ini adalah POJO sederhana yang berisi metode get / set untuk menyimpan data yang diambil menggunakan kelas DAO.

Kode contoh di sini ..


7

Saya akan menjadi umum dan tidak khusus untuk Java karena DAO dan ORM digunakan dalam semua bahasa.

Untuk memahami DAO, Anda harus terlebih dahulu memahami ORM (Object Rational Mapping). Ini berarti bahwa jika Anda memiliki tabel yang disebut "orang" dengan kolom "nama" dan "usia", maka Anda akan membuat objek-templat untuk tabel itu:

type Person {
name
age
}

Sekarang dengan bantuan DAO alih-alih menulis beberapa pertanyaan spesifik, untuk menjemput semua orang, untuk apa pun jenis db yang Anda gunakan (yang bisa rawan kesalahan) alih-alih Anda melakukannya:

list persons = DAO.getPersons();
...
person = DAO.getPersonWithName("John");
age = person.age;

Anda tidak menulis sendiri abstraksi DAO, melainkan biasanya merupakan bagian dari beberapa proyek opensource, tergantung pada bahasa dan kerangka kerja apa yang Anda gunakan.

Sekarang untuk pertanyaan utama di sini. " ..di mana itu digunakan .. ". Yah biasanya jika Anda menulis bisnis yang kompleks dan kode khusus domain hidup Anda akan sangat sulit tanpa DAO. Tentu saja Anda tidak perlu menggunakan ORM dan DAO yang disediakan, sebagai gantinya Anda dapat menulis abstraksi dan kueri asli Anda sendiri. Saya telah melakukan itu di masa lalu dan hampir selalu menyesalinya nanti.


6

Saya pikir contoh terbaik (beserta penjelasannya) dapat Anda temukan di situs web oracle: di sini . Pelajaran bagus lainnya dapat ditemukan di sini .


2
Apakah hanya saya atau sebagian besar tutorial Java dan situs informasi super tua? Tutorial itu dari 2008! Banyak hasil pencarian teratas pada berbagai topik Java bahkan lebih tua.
bergie3000

2
@ bergie3000: pola ini bukan hal baru.
Bằng Rikimaru

5

Jangan bingung dengan terlalu banyak penjelasan. DAO: Dari namanya sendiri itu berarti Mengakses Data menggunakan Objek. DAO dipisahkan dari Logika Bisnis lainnya.


4

Objek Akses Data mengelola koneksi dengan sumber data untuk mendapatkan dan menyimpan data. Ini abstrak implementasi akses data yang mendasarinya untuk Objek Bisnis untuk memungkinkan akses transparan ke sumber data. Sumber data dapat berupa basis data apa saja seperti RDBMS, repositori XML atau sistem file datar dll.


4

Spring JPA DAO

Sebagai contoh, kami memiliki beberapa entitas Grup.

Untuk entitas ini kami membuat repositori GroupRepository.

public interface GroupRepository extends JpaRepository<Group, Long> {   
}

Maka kita perlu membuat lapisan layanan yang dengannya kita akan menggunakan repositori ini.

public interface Service<T, ID> {

    T save(T entity);

    void deleteById(ID id);

    List<T> findAll();

    T getOne(ID id);

    T editEntity(T entity);

    Optional<T> findById(ID id);
}

public abstract class AbstractService<T, ID, R extends JpaRepository<T, ID>> implements Service<T, ID> {

    private final R repository;

    protected AbstractService(R repository) {
        this.repository = repository;
    }

    @Override
    public T save(T entity) {
        return repository.save(entity);
    }

    @Override
    public void deleteById(ID id) {
        repository.deleteById(id);
    }

    @Override
    public List<T> findAll() {
        return repository.findAll();
    }

    @Override
    public T getOne(ID id) {
        return repository.getOne(id);
    }

    @Override
    public Optional<T> findById(ID id) {
        return repository.findById(id);
    }

    @Override
    public T editEntity(T entity) {
        return repository.saveAndFlush(entity);
    }
}

@org.springframework.stereotype.Service
public class GroupServiceImpl extends AbstractService<Group, Long, GroupRepository> {

    private final GroupRepository groupRepository;

    @Autowired
    protected GroupServiceImpl(GroupRepository repository) {
        super(repository);
        this.groupRepository = repository;
    }
}

Dan di controller kita menggunakan layanan ini.

@RestController
@RequestMapping("/api")
class GroupController {

    private final Logger log = LoggerFactory.getLogger(GroupController.class);

    private final GroupServiceImpl groupService;

    @Autowired
    public GroupController(GroupServiceImpl groupService) {
        this.groupService = groupService;
    }

    @GetMapping("/groups")
    Collection<Group> groups() {
        return groupService.findAll();
    }

    @GetMapping("/group/{id}")
    ResponseEntity<?> getGroup(@PathVariable Long id) {
        Optional<Group> group = groupService.findById(id);
        return group.map(response -> ResponseEntity.ok().body(response))
                .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
    }

    @PostMapping("/group")
    ResponseEntity<Group> createGroup(@Valid @RequestBody Group group) throws URISyntaxException {
        log.info("Request to create group: {}", group);
        Group result = groupService.save(group);
        return ResponseEntity.created(new URI("/api/group/" + result.getId()))
                .body(result);
    }

    @PutMapping("/group")
    ResponseEntity<Group> updateGroup(@Valid @RequestBody Group group) {
        log.info("Request to update group: {}", group);
        Group result = groupService.save(group);
        return ResponseEntity.ok().body(result);
    }

    @DeleteMapping("/group/{id}")
    public ResponseEntity<?> deleteGroup(@PathVariable Long id) {
        log.info("Request to delete group: {}", id);
        groupService.deleteById(id);
        return ResponseEntity.ok().build();
    }    
}

Ini tampaknya menjelaskan pola Repositori dan bukan pola DAO sesuai permintaan penulis asli. Selain itu saya percaya bahwa contoh Anda dapat menyesatkan karena antarmuka Anda harus mengikuti pendekatan seperti Koleksi, sehingga beberapa operasi Anda tidak cocok.
Jan Haesen

2

DAO adalah tindakan seperti "Manajer Kegigihan" dalam arsitektur 3 tier serta DAO juga merancang pola karena Anda dapat membaca buku "Gang Empat". Lapisan layanan aplikasi Anda hanya perlu memanggil metode kelas DAO tanpa mengetahui detail tersembunyi & internal metode DAO.


2

Dao clases digunakan untuk menggunakan kembali logika jdbc & Dao (Data Access Object) adalah pola desain. dao adalah kelas java sederhana yang berisi logika JDBC.

Lapisan Akses Data telah terbukti bagus dalam lapisan logika bisnis yang terpisah dan lapisan yang persisten. Pola desain DAO sepenuhnya menyembunyikan implementasi akses data dari kliennya

Objek Akses Data Java (Java DAO) adalah komponen penting dalam aplikasi bisnis. Aplikasi bisnis hampir selalu membutuhkan akses ke data dari basis data relasional atau objek dan platform Java menawarkan banyak teknik untuk mengakses data ini. Teknik tertua dan paling matang adalah dengan menggunakan Java Database Connectivity (JDBC) API, yang menyediakan kemampuan untuk mengeksekusi query SQL terhadap database dan kemudian mengambil hasilnya, satu kolom pada satu waktu.


1

Pojo juga dianggap sebagai kelas Model di Jawa di mana kita dapat membuat pengambil dan penyetel untuk variabel tertentu yang didefinisikan secara pribadi. Ingat semua variabel di sini dideklarasikan dengan pengubah pribadi

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.