如何使用PostgreSQL 10.5表或视图中的数据/字段填充Vaadin 12.0.4网格?

时间:2019-01-24 08:12:02

标签: postgresql spring-boot spring-data mybatis vaadin12

我知道在许多网站上都有许多教程来介绍如何执行此操作,但这是我第一次尝试将数据库表连接到UI,因此当使用Spring Boot / MyBatis / Vaadin版本时,例如,与我正在使用的软件不同,或者它们使用JPA或JDBC而不是MyBatis,我不知道如何更改它以适合我的特定情况。

当人们说“这与使用它进行操作的任何其他方法都没有什么不同”时,这根本没有帮助,因为正如我之前所说,我以前从未这样做过。教程的代码示例中的注释和类在每个新版本中均已删除并弃用,没有明确说明如何更改它以使其与新版本一起使用。我已经研究了大约一个月的各种API(Spring Boot,Vaadin,MyBatis),并且对每个API的功能含糊不清,但对它们如何协同工作以实现为数据库创建UI的预期结果却含糊其词。我只是对教程中一个不推荐使用的注释或类如何使整个过程崩溃感到非常沮丧。我知道这很困难,但我只想让大家了解我的来历。我并没有特别喜欢任何一个简单的API。

我当前的依赖项是:

- Maven : 4.0.0 - Spring Boot: 2.1.2.RELEASE - Vaadin: 12.0.4 - MyBatis Spring Boot Starter: 2.0.0

我从Spring Initializr获得了入门包,并在以后添加了MyBatis依赖项。

我有一个包含17个表的PostgreSQL 10.5数据库,该数据库最终将成为商店经理的UI,用于查看诸如收到的库存货物,员工的工作时间以及其他任务之类的信息。

我的数据库名为“商店”,用户:“商店”,密码:“商店”(如果有的话)。

例如,这些是我的一些表:

CREATE TABLE IF NOT EXISTS supplier ( id SERIAL, brand VARCHAR(30) NOT NULL, phone VARCHAR(15) NOT NULL, address VARCHAR(100) NOT NULL, CONSTRAINT pk_supplier PRIMARY KEY (id) );

CREATE TABLE IF NOT EXISTS shipment ( id SERIAL, shipdate DATE NOT NULL, shiptime TIME NOT NULL, status VARCHAR(10) DEFAULT 'arrived' NOT NULL, sid INT NOT NULL, CONSTRAINT pk_shipment PRIMARY KEY (id), CONSTRAINT fk_shipment_supplier FOREIGN KEY (sid) REFERENCES supplier(id) );

CREATE TABLE IF NOT EXISTS shipmentcontains ( shipid INT NOT NULL, iid INT NOT NULL, quantity INT NOT NULL, price DEC(6,2) NOT NULL, CONSTRAINT pk_shipmentcontains PRIMARY KEY (shipid, iid), CONSTRAINT fk_shipmentcontains_shipment FOREIGN KEY (shipid) REFERENCES shipment(id), CONSTRAINT fk_shipmentcontains_item FOREIGN KEY (iid) REFERENCES item(id) );

CREATE TABLE IF NOT EXISTS item ( id SERIAL, itemtype VARCHAR(25) NOT NULL, itemsize VARCHAR(10) NOT NULL, price DEC(5,2) NOT NULL, sid INT NOT NULL, CONSTRAINT pk_item PRIMARY KEY (id), CONSTRAINT fk_item_supplier FOREIGN KEY (sid) REFERENCES supplier(id) );

CREATE TABLE IF NOT EXISTS employee ( id SERIAL, lastname VARCHAR(40) NOT NULL, firstname VARCHAR(40) NOT NULL, hourlywage DEC(4,2), manager BOOLEAN DEFAULT false NOT NULL, CONSTRAINT pk_employee PRIMARY KEY (id) );

如果有人可以给我一个如何仅将其中一个显示在Grid中的代码示例,我相信我可以弄清楚如何完成其​​余部分。我的application.properties文件中有连接详细信息,但是我已经看到,对于MyBatis的较新版本,不需要这样做,可以在SQL语句上使用诸如@Update之类的注释来代替它。另外,用简单的英语来说,春豆到底是什么?我希望那不会太长..或不够长。

编辑:Vaadin 12的当前版本为12.0.4

1 个答案:

答案 0 :(得分:0)

您要问的很多,所以我会尽力介绍所有内容,但不要太详尽。我希望这可以帮助您使事情顺利进行。

首先,您将需要一个Java类,其中包含供应商表中具有的所有字段,并用@Entity注释。 @Table注释使您可以定义Db表的名称,如果表的名称与类相同(不区分大小写),则不必这样做:

@Entity                        // javax.persistence
@Table(name = "supplier")      // javax.persistence
public class Supplier {

    @Id                        // javax.persistence
    private Long id;

    private String brand;
    private String phone;
    private String address;

    public Supplier(){

    }

    // public getters and setters for all fields
    // omitted for brevity
}

现在您的表有了一个类,您可以从为其创建Vaadin网格开始。可以使用Grid<Supplier> supplierGrid = new Grid<Supplier>(Supplier.class);最简单的方法。

现在用项目(供应商)填充网格。这是通过supplierGrid.setItems(allSuppliers);完成的。但是allSuppliers是从哪里来的呢?

可以使用Repository来获取它们。由于存储库将使用@Repository进行注释,因此它是一个spring组件,可以由spring自动生成,并可以使用{{1} Injected/Autowired(即您认为) } / @Inject
然后,您只需致电@Autowired,您便拥有数据库中所有供应商的清单,现在您可以将其与上述List<Supplier> allSuppliers = supplierRepository.findAll()

放入网格中

任何可以通过spring注入其实例的类都是spring-bean,其中包括用@ Component,@ Serivce或@Repository注释的类。除非您将其定义为@Configuration类,否则Spring无法自动注入诸如Supplier之类的实体:

supplierGrid.setItems(allSuppliers);