我创建了一个 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/