java - 使用 Entity 和 EntityClass 从数据库填充 jTable 太慢

标签 java swing jpa netbeans

我创建了一个 jtable,然后将数据库拖放到其中,这样它就会自动在表中生成所有列。

问题是,加载时间太长,比如二十秒。

有什么办法可以优化吗?

当我直接在 MySQL Workbench 上运行查询时,大约需要两秒钟。

生成代码的相关部分:

    bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

    MyDbPUEntityManager = java.beans.Beans.isDesignTime() ? null : javax.persistence.Persistence.createEntityManagerFactory("MyDbPU").createEntityManager();
    userQuery = java.beans.Beans.isDesignTime() ? null : MyDbPUEntityManager.createQuery("SELECT u FROM User u");
    userList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : userQuery.getResultList();


    org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, userList, jTable1);
    org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = 

jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${id}"));
    columnBinding.setColumnName("Id");
    columnBinding.setColumnClass(Integer.class);
    columnBinding.setEditable(false);
    columnBinding = 

jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${nome}"));
    columnBinding.setColumnName("Nome");
    columnBinding.setColumnClass(String.class);
    columnBinding.setEditable(false);
    columnBinding = 

jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${sexo}"));
    columnBinding.setColumnName("Sexo");
    columnBinding.setColumnClass(String.class);
    columnBinding.setEditable(false);
    columnBinding = 

jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${cpf}"));
    columnBinding.setColumnName("CPF");
    columnBinding.setColumnClass(String.class);
    columnBinding.setEditable(false);
    columnBinding = 

jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${cidade}"));
    columnBinding.setColumnName("Cidade");
    columnBinding.setColumnClass(String.class);
    columnBinding.setEditable(false);
    columnBinding = 

jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${estado}"));
    columnBinding.setColumnName("Estado");
    columnBinding.setColumnClass(String.class);
    columnBinding.setEditable(false);
    columnBinding = 

jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${ndoc}"));
    columnBinding.setColumnName("RG");
    columnBinding.setColumnClass(String.class);
    columnBinding.setEditable(false);
    columnBinding = 

jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${dataNasc}"));
    columnBinding.setColumnName("Data Nascimento");
    columnBinding.setColumnClass(String.class);
    columnBinding.setEditable(false);
    bindingGroup.addBinding(jTableBinding);
    jTableBinding.bind();

最佳答案

Is org.jdesktop.beansbinding a bad choice?

绑定(bind)无关紧要。由于数据库访问延迟本质上是随机的,因此应该在单独的线程上进行以避免阻塞 Swing event dispatch thread (EDT) 。同时,所有 GUI 更新都必须在 EDT 上完成。 SwingWorker非常适合此目的。可以看到使用 org.jdesktop.beansbinding 的工作线程的完整示例 here .

Are there faster, better alternatives?

Profiling可以指导您寻找最佳性能。

关于java - 使用 Entity 和 EntityClass 从数据库填充 jTable 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24935372/

相关文章:

java - 为什么 JSON 不需要 setXXX 方法?

java - JScrollPane 缩放 View ,里面有组件

java - 如何重新绘制 Java Applet

jakarta-ee - JavaEE : 'SELECT FOR UPDATE NOWAIT' without marking the JTA transaction for rollback when fails?

java - 如何用 Java 调用 ffmpeg - 变音符号?

java - 从HashSet得到的流过滤器的时间复杂度是多少?

java - 特定代码片段的同步语句

java - 如何插入 GridbagLayout 不在 JPanel 的中心放置组件

java - JPA 具有延迟加载字段的对象集合

java - 实体管理器在 JavaFX 中不起作用