1

我知道在同样多的网站上有很多关于如何做到这一点的教程,但这是我第一次尝试将数据库表连接到 UI,所以例如,当 Spring Boot/MyBatis/Vaadin 的版本是与我正在使用的不同,或者他们使用 JPA 或 JDBC 而不是 MyBatis,我不知道如何更改它以适应我的具体情况。

当人们说“这与任何其他方法没有什么不同”时,这根本没有帮助,因为正如我之前所说,我以前从未这样做过。教程代码示例中的注释和类在每个新版本中都被删除和弃用,没有明确说明如何更改它以与新版本一起使用。我一直在研究各种 API(Spring Boot、Vaadin、MyBatis)大约一个月,对每个 API 的作用有一个模糊的了解,但不知道它们如何协同工作以实现为数据库制作 UI 的预期结果。我只是对教程中一个不推荐使用的注释或类如何导致整个事情崩溃感到非常沮丧。我知道那是冗长的,但我只是想让你们都明白我来自哪里。我'

我当前的依赖项是:

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

我从 Spring Initializr 获得了启动包,后来添加了 MyBatis 依赖项。

我有一个 PostgreSQL 10.5 数据库,其中包含 17 个表,最终将成为商店经理的 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) );

如果有人可以给我一个代码示例,说明如何让其中一个显示在网格中,我相信我可以弄清楚如何完成其​​余的工作。我的application.properties文件中有连接详细信息,但我发现对于较新版本的 MyBatis,这不是必需的,并且@Update可以在 SQL 语句上使用注释来替换它。另外,用简单的英语来说,Spring Bean 到底是什么?我希望那不是太长……或者不够长。

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

4

1 回答 1

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自动生成,并且可以使用 / 进行注入/自动装配(即在您的视图中)。 然后你只需打电话,你就有一个来自你的数据库的所有供应商的列表,你现在可以使用上述方法将其放入网格中@Inject@Autowired
List<Supplier> allSuppliers = supplierRepository.findAll()supplierGrid.setItems(allSuppliers);

任何可以通过 spring 注入其实例的类都是 spring-bean,这包括使用 @Component、@Serivce 或 @Repository 注释的类。像 Supplier 这样的实体不能被 Spring 自动注入,除非你定义这是你的 @Configuration 类:

/* Do this only if you want to inject a Supplier somewhere. */
@Bean
public Supplier supplier(){
    /* define here how a default Supplier should look like */
    return new Supplier();
}
于 2019-01-24T09:23:24.817 回答