Rumah Java javaTutorial java--实体规则、对象状态、缓存、事务、批量查询和实现客户列表显示

java--实体规则、对象状态、缓存、事务、批量查询和实现客户列表显示

Jun 26, 2017 am 09:16 AM
javaee belajar entiti peraturan

一、hibernate中的实体规则

实体类创建的注意事项

 1.持久化类提供无参数构造

 2.成员变量私有,提供共有get/set方法访问.需提供属性

 3.持久化类中的属性,应尽量使用包装类型

 4.持久化类需要提供oid.与数据库中的主键列对应

 5.不要用final修饰class

主键类型

自然主键(少见)

  表的业务列中,有某业务列符合,必须有,并且不重复的特征时,该列可以作为主键使用.

代理主键(常见)

  表的业务列中,没有某业务列符合,必须有,并且不重复的特征时,创建一个没有业务意义的列作为主键

主键生成策略

代理主键:

    identity : 主键自增.由数据库来维护主键值.录入时不需要指定主键.
    sequence: Oracle中的主键生成策略.
    increment(了解): 主键自增.由hibernate来维护.每次插入前会先查询表中id最大值.+1作为新主键值.(如果10个人同时并发,查询就会出现问题)            
    hilo(了解): 高低位算法.主键自增.由hibernate来维护.开发时不使用.
    native:hilo+sequence+identity 自动三选一策略.
    uuid: 产生随机字符串作为主键. 主键类型必须为string 类型.

自然主键:

    assigned:自然主键生成策略. hibernate不会管理主键值.由开发人员自己录入.

二、hibernate中的对象状态

对象分为三种状态

//测试对象的三种状态public class Demo {

    @Test//查看三种状态public void fun1(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作Customer c = new Customer(); // 没有id, 没有与session关联 => 瞬时状态        
        c.setCust_name("联想"); // 瞬时状态        
        session.save(c); // 持久化状态, 有id,有关联        //4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//三种状态特点//save方法: 其实不能理解成保存.理解成将瞬时状态转换成持久状态的方法//主键自增 : 执行save方法时,为了将对象转换为持久化状态.必须生成id值.所以需要执行insert语句生成.//increment: 执行save方法,为了生成id.会执行查询id最大值的sql语句.public void fun2(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作Customer c = new Customer(); // 没有id, 没有与session关联 => 瞬时状态        
        c.setCust_name("联想"); // 瞬时状态        
        session.save(c); // 持久化状态, 有id,有关联        //4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//三种状态特点// 持久化状态特点: 持久化状态对象的任何变化都会自动同步到数据库中.public void fun3(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作        
        Customer c = session.get(Customer.class, 1l);//持久化状态对象        
        c.setCust_name("微软公司");        //4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
}
Salin selepas log masuk

三种状态的转换图

 

三、hibernate进阶-一级缓存

缓存:提高效率.hibernate中的一级缓存也是为了提高操作数据库的效率.

 提高效率手段1:提高查询效率

提高效率手段2:减少不必要的修改语句发送

 

四、hibernate中的事务

 

 知识点:如何在hibernate中指定数据库的隔离级别

         <!-- 指定hibernate操作数据库时的隔离级别 
            #hibernate.connection.isolation 1|2|4|8        
            0001    1    读未提交
            0010    2    读已提交
            0100    4    可重复读
            1000    8    串行化         --> <property name="hibernate.connection.isolation">4</property>
Salin selepas log masuk

知识点2:在项目中如何管理事务

  业务开始之前打开事务,业务执行之后提交事务. 执行过程中出现异常.回滚事务.

  在dao层操作数据库需要用到session对象.在service控制事务也是使用session对象完成. 我们要确保dao层和service层使用的使用同一个session对象

  在hibernate中,确保使用同一个session的问题,hibernate已经帮我们解决了. 我们开发人员只需要调用sf.getCurrentSession()方法即可获得与当前线程绑定的session对象

  注意1: 调用getCurrentSession方法必须配合主配置中的一段配置

         <!-- 指定session与当前线程绑定 --> <property name="hibernate.current_session_context_class">thread</property>
Salin selepas log masuk

  注意2:通过getCurrentSession方法获得的session对象.当事务提交时,session会自动关闭.不要手动调用close关闭.

crm项目中:

  Service层

    public void save(Customer c) {
        Session session =  HibernateUtils.getCurrentSession();//打开事务Transaction tx = session.beginTransaction();//调用Dao保存客户try {
            customerDao .save(c);
        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback();
        }//关闭事务        tx.commit();
    }
Salin selepas log masuk

  Dao层

    public void save(Customer c) {//1 获得sessionSession session = HibernateUtils.getCurrentSession();//3 执行保存        session.save(c);
    }
Salin selepas log masuk

 

 

五、hibernate中的批量查询(概述)

HQL查询-hibernate Query Language(多表查询,但不复杂时使用)

Hibernate独家查询语言,属于面向对象的查询语言

//测试HQL语句public class Demo {

    @Test//基本查询public void fun1(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1> 书写HQL语句//        String hql = " from cn.itheima.domain.Customer ";String hql = " from Customer "; // 查询所有Customer对象//2> 根据HQL语句创建查询对象Query query = session.createQuery(hql);//3> 根据查询对象获得查询结果List<Customer> list = query.list();    // 返回list结果//query.uniqueResult();//接收唯一的查询结果        
        System.out.println(list);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//条件查询//HQL语句中,不可能出现任何数据库相关的信息的public void fun2(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1> 书写HQL语句String hql = " from Customer where cust_id = 1 "; // 查询所有Customer对象//2> 根据HQL语句创建查询对象Query query = session.createQuery(hql);//3> 根据查询对象获得查询结果Customer c = (Customer) query.uniqueResult();
        
        System.out.println(c);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//条件查询//问号占位符public void fun3(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1> 书写HQL语句String hql = " from Customer where cust_id = ? "; // 查询所有Customer对象//2> 根据HQL语句创建查询对象Query query = session.createQuery(hql);//设置参数//query.setLong(0, 1l);query.setParameter(0, 1l);//3> 根据查询对象获得查询结果Customer c = (Customer) query.uniqueResult();
        
        System.out.println(c);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//条件查询//命名占位符public void fun4(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1> 书写HQL语句String hql = " from Customer where cust_id = :cust_id "; // 查询所有Customer对象//2> 根据HQL语句创建查询对象Query query = session.createQuery(hql);//设置参数query.setParameter("cust_id", 1l);//3> 根据查询对象获得查询结果Customer c = (Customer) query.uniqueResult();
        
        System.out.println(c);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//分页查询public void fun5(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1> 书写HQL语句String hql = " from Customer  "; // 查询所有Customer对象//2> 根据HQL语句创建查询对象Query query = session.createQuery(hql);//设置分页信息 limit ?,?query.setFirstResult(1);
        query.setMaxResults(1);//3> 根据查询对象获得查询结果List<Customer> list =  query.list();
        
        System.out.println(list);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联    }
}
Salin selepas log masuk

 

Criteria查询(单表条件查询)

Hibernate自创的无语句面向对象查询

//测试Criteria查询public class Demo {

    @Test//基本查询public void fun1(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------        //查询所有的Customer对象Criteria criteria = session.createCriteria(Customer.class);
        
        List<Customer> list = criteria.list();
        
        System.out.println(list);        
//        Customer c = (Customer) criteria.uniqueResult();        //-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//条件查询//HQL语句中,不可能出现任何数据库相关的信息的// >                 gt// >=                ge// <                lt// <=                le// ==                eq// !=                ne// in                in// between and        between// like             like// is not null         isNotNull// is null            isNull// or                or// and                andpublic void fun2(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//创建criteria查询对象Criteria criteria = session.createCriteria(Customer.class);//添加查询参数 => 查询cust_id为1的Customer对象criteria.add(Restrictions.eq("cust_id", 1l));//执行查询获得结果Customer c = (Customer) criteria.uniqueResult();
        System.out.println(c);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    
    
    @Test//分页查询public void fun3(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//创建criteria查询对象Criteria criteria = session.createCriteria(Customer.class);//设置分页信息 limit ?,?criteria.setFirstResult(1);
        criteria.setMaxResults(2);//执行查询List<Customer> list = criteria.list();
        
        System.out.println(list);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//查询总记录数public void fun4(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//创建criteria查询对象Criteria criteria = session.createCriteria(Customer.class);//设置查询的聚合函数 => 总行数        criteria.setProjection(Projections.rowCount());//执行查询Long count = (Long) criteria.uniqueResult();
        
        System.out.println(count);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
}
Salin selepas log masuk

 

原生SQL查询(复杂的业务查询)

//测试原生SQL查询public class Demo {

    @Test//基本查询public void fun1(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1 书写sql语句String sql = "select * from cst_customer";        //2 创建sql查询对象SQLQuery query = session.createSQLQuery(sql);        //3 调用方法查询结果List<Object[]> list = query.list();//query.uniqueResult();for(Object[] objs : list){
            System.out.println(Arrays.toString(objs));
        }        //-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//基本查询public void fun2(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1 书写sql语句String sql = "select * from cst_customer";        //2 创建sql查询对象SQLQuery query = session.createSQLQuery(sql);//指定将结果集封装到哪个对象中query.addEntity(Customer.class);        //3 调用方法查询结果List<Customer> list = query.list();
        
        System.out.println(list);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//条件查询public void fun3(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1 书写sql语句String sql = "select * from cst_customer where cust_id = ? ";        //2 创建sql查询对象SQLQuery query = session.createSQLQuery(sql);
        
        query.setParameter(0, 1l);//指定将结果集封装到哪个对象中query.addEntity(Customer.class);        //3 调用方法查询结果List<Customer> list = query.list();
        
        System.out.println(list);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
    
    @Test//分页查询public void fun4(){//1 获得sessionSession session = HibernateUtils.openSession();//2 控制事务Transaction tx = session.beginTransaction();//3执行操作//-------------------------------------------//1 书写sql语句String sql = "select * from cst_customer  limit ?,? ";        //2 创建sql查询对象SQLQuery query = session.createSQLQuery(sql);
        
        query.setParameter(0, 0);
        query.setParameter(1, 1);//指定将结果集封装到哪个对象中query.addEntity(Customer.class);        //3 调用方法查询结果List<Customer> list = query.list();
        
        System.out.println(list);//-------------------------------------------//4提交事务.关闭资源        tx.commit();
        session.close();// 游离|托管 状态, 有id , 没有关联        
        
    }
}
Salin selepas log masuk

 

五、练习:客户列表

案例比较简单,可以按照上面笔记的知识点完成

servlet:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1 调用Service查询所有客户List<Customer> list = cs.getAll();//2 将客户列表放入request域request.setAttribute("list", list);//3 转发到list.jsp显示request.getRequestDispatcher("/jsp/customer/list.jsp").forward(request, response);
    
    }
Salin selepas log masuk

service:

    public List<Customer> getAll() {
        Session session =  HibernateUtils.getCurrentSession();//打开事务Transaction tx = session.beginTransaction();
        
        List<Customer> list = customerDao.getAll();        
        //关闭事务                tx.commit();return list;
    }
Salin selepas log masuk

dao:

    public List<Customer> getAll() {//1 获得sessionSession session = HibernateUtils.getCurrentSession();//2 创建Criteria对象Criteria c = session.createCriteria(Customer.class);return c.list();
    }
Salin selepas log masuk

 

Atas ialah kandungan terperinci java--实体规则、对象状态、缓存、事务、批量查询和实现客户列表显示. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Belajar untuk menyahpasang pip sepenuhnya dan menggunakan Python dengan lebih cekap Belajar untuk menyahpasang pip sepenuhnya dan menggunakan Python dengan lebih cekap Jan 16, 2024 am 09:01 AM

Tidak perlu lagi pip? Datang dan pelajari cara menyahpasang pip dengan berkesan! Pengenalan: pip ialah salah satu alat pengurusan pakej Python, yang boleh memasang, menaik taraf dan menyahpasang pakej Python dengan mudah. Walau bagaimanapun, kadangkala kita mungkin perlu menyahpasang pip, mungkin kerana kita ingin menggunakan alat pengurusan pakej yang lain, atau kerana kita perlu mengosongkan sepenuhnya persekitaran Python. Artikel ini akan menerangkan cara menyahpasang pip dengan cekap dan memberikan contoh kod khusus. 1. Kaedah menyahpasang pip Berikut akan memperkenalkan dua kaedah biasa untuk menyahpasang pip.

Penyelaman mendalam ke dalam peta warna matplotlib Penyelaman mendalam ke dalam peta warna matplotlib Jan 09, 2024 pm 03:51 PM

Untuk mengetahui lebih lanjut tentang jadual warna matplotlib, anda memerlukan contoh kod khusus 1. Pengenalan matplotlib ialah perpustakaan lukisan Python yang berkuasa Ia menyediakan set fungsi dan alatan lukisan yang kaya yang boleh digunakan untuk mencipta pelbagai jenis carta. Peta warna (peta warna) ialah konsep penting dalam matplotlib, yang menentukan skema warna carta. Kajian mendalam tentang jadual warna matplotlib akan membantu kami menguasai fungsi lukisan matplotlib dengan lebih baik dan menjadikan lukisan lebih mudah.

Mendedahkan daya tarikan bahasa C: Mendedahkan potensi pengaturcara Mendedahkan daya tarikan bahasa C: Mendedahkan potensi pengaturcara Feb 24, 2024 pm 11:21 PM

Pesona Pembelajaran Bahasa C: Membuka Potensi Pengaturcara Dengan perkembangan teknologi yang berterusan, pengaturcaraan komputer telah menjadi satu bidang yang telah menarik perhatian ramai. Di antara banyak bahasa pengaturcaraan, bahasa C sentiasa digemari oleh pengaturcara. Kesederhanaan, kecekapan dan aplikasinya yang luas menjadikan pembelajaran bahasa C sebagai langkah pertama untuk ramai orang memasuki bidang pengaturcaraan. Artikel ini akan membincangkan daya tarikan mempelajari bahasa C dan cara membuka kunci potensi pengaturcara dengan mempelajari bahasa C. Pertama sekali, daya tarikan mempelajari bahasa C terletak pada kesederhanaannya. Berbanding dengan bahasa pengaturcaraan lain, bahasa C

Bermula dengan Pygame: Tutorial Pemasangan dan Konfigurasi Komprehensif Bermula dengan Pygame: Tutorial Pemasangan dan Konfigurasi Komprehensif Feb 19, 2024 pm 10:10 PM

Pelajari Pygame dari awal: tutorial pemasangan dan konfigurasi lengkap, contoh kod khusus diperlukan Pengenalan: Pygame ialah perpustakaan pembangunan permainan sumber terbuka yang dibangunkan menggunakan bahasa pengaturcaraan Python Ia menyediakan pelbagai fungsi dan alatan, membolehkan pembangun mencipta pelbagai jenis dengan mudah permainan. Artikel ini akan membantu anda mempelajari Pygame dari awal, dan menyediakan tutorial pemasangan dan konfigurasi yang lengkap, serta contoh kod khusus untuk membolehkan anda bermula dengan cepat. Bahagian Pertama: Memasang Python dan Pygame Pertama, pastikan anda mempunyai

Mari belajar cara memasukkan nombor akar dalam Word bersama-sama Mari belajar cara memasukkan nombor akar dalam Word bersama-sama Mar 19, 2024 pm 08:52 PM

Semasa mengedit kandungan teks dalam Word, anda kadangkala perlu memasukkan simbol formula. Sesetengah lelaki tidak tahu cara memasukkan nombor akar dalam Word, jadi Xiaomian meminta saya untuk berkongsi dengan rakan saya tutorial tentang cara memasukkan nombor akar dalam Word. Semoga membantu kawan-kawan. Mula-mula, buka perisian Word pada komputer anda, kemudian buka fail yang ingin anda edit, dan gerakkan kursor ke lokasi yang anda perlukan untuk memasukkan tanda akar, rujuk contoh gambar di bawah. 2. Pilih [Sisipkan], dan kemudian pilih [Formula] dalam simbol. Seperti yang ditunjukkan dalam bulatan merah dalam gambar di bawah: 3. Kemudian pilih [Insert New Formula] di bawah. Seperti yang ditunjukkan dalam bulatan merah dalam gambar di bawah: 4. Pilih [Radical], dan kemudian pilih radikal yang sesuai. Seperti yang ditunjukkan dalam bulatan merah dalam gambar di bawah:

Peraturan dan pengecualian untuk perbandingan penunjuk? Peraturan dan pengecualian untuk perbandingan penunjuk? Jun 04, 2024 pm 06:01 PM

Dalam C/C++, peraturan perbandingan penunjuk adalah seperti berikut: penunjuk yang menunjuk ke objek yang sama adalah sama. Penunjuk kepada objek yang berbeza tidak sama. Pengecualian: Penunjuk kepada alamat nol adalah sama.

Ketahui fungsi utama dalam bahasa Go dari awal Ketahui fungsi utama dalam bahasa Go dari awal Mar 27, 2024 pm 05:03 PM

Tajuk: Pelajari fungsi utama dalam bahasa Go dari awal Sebagai bahasa pengaturcaraan yang mudah dan cekap, bahasa Go digemari oleh pembangun. Dalam bahasa Go, fungsi utama ialah fungsi masuk, dan setiap program Go mesti mengandungi fungsi utama sebagai titik masuk program. Artikel ini akan memperkenalkan cara mempelajari fungsi utama dalam bahasa Go dari awal dan memberikan contoh kod khusus. 1. Pertama, kita perlu memasang persekitaran pembangunan bahasa Go. Anda boleh pergi ke laman web rasmi (https://golang.org

Soalan temuduga JPA Java terpilih: Uji penguasaan anda terhadap rangka kerja kegigihan Soalan temuduga JPA Java terpilih: Uji penguasaan anda terhadap rangka kerja kegigihan Feb 19, 2024 pm 09:12 PM

Apa itu JPA? Bagaimanakah ia berbeza daripada JDBC? JPA (JavaPersistence API) ialah antara muka standard untuk pemetaan hubungan objek (ORM), yang membenarkan pembangun Java menggunakan objek Java biasa untuk mengendalikan pangkalan data tanpa menulis pertanyaan SQL secara langsung terhadap pangkalan data. JDBC (JavaDatabaseConnectivity) ialah API standard Java untuk menyambung ke pangkalan data Ia memerlukan pembangun menggunakan pernyataan SQL untuk mengendalikan pangkalan data. JPA merangkum JDBC, menyediakan API yang lebih mudah dan tahap lebih tinggi untuk pemetaan hubungan objek, dan memudahkan operasi capaian data. Dalam JPA, apakah entiti? entiti

See all articles