如何使用 PostgreSQL 10.5 table 或视图中的 data/fields 填充 Vaadin 12.0.4 网格?
How do I populate a Vaadin 12.0.4 Grid with data/fields from a PostgreSQL 10.5 table or view?
我知道在很多网站上都有很多教程可以教你如何做到这一点,但这是我第一次尝试将数据库 table 连接到 UI,所以当例如,Spring Boot/MyBatis/Vaadin 的版本与我正在使用的版本不同,或者他们使用 JPA 或 JDBC 而不是 MyBatis,我不知道如何将其更改为根据我的具体情况工作。
当人们说 "it's no different than any other method of doing it with " 根本没有帮助时,因为正如我之前所说,我以前从未这样做过。教程代码示例中的注释和 classes 在每个新版本中都会被删除和弃用,但没有明确解释如何更改它以使用较新版本。我研究了各种 APIs(Spring Boot、Vaadin、MyBatis)大约一个月,对每个人的作用有一个模糊的理解,但不知道他们如何协同工作以达到预期的结果为数据库制作 UI。我只是对教程中的单个弃用注释或 class 如何导致整个事情崩溃感到非常沮丧。我知道这很啰嗦,但我只是想让你们都明白我的意思。我并不特别喜欢任何一个 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 个 table 的 PostgreSQL 10.5 数据库,它最终将成为 UI 供商店经理使用,例如查看收到的库存货物、员工工作的小时数和其他任务。
我的数据库名为 'store',用户:'store',密码:'store'(如果重要的话)。
例如,这些是我的一些 tables:
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,这不是必需的,并且可以在 SQL 语句上使用 @Update
等注释取代那个。另外,用简单的英语来说,Spring Bean 到底是什么?我希望那不会太长..或者不够长。
编辑:Vaadin 12 的当前版本是 12.0.4
你问的太多了,所以我会尽量触及所有内容,不要太详细。我希望这可以帮助您开始工作。
首先,您需要一个 java class,其中包含供应商 table 中的所有字段,并用 @Entity
进行注释。 @Table
注解可以让你定义 Db table 名称,如果 table 和 class 一样被调用(不区分大小写)则没有必要:
@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
}
现在您的 table 有了一个 class,您可以开始为它创建一个 Vaadin 网格。这可以通过 Grid<Supplier> supplierGrid = new Grid<Supplier>(Supplier.class);
.
最简单地完成
现在用项目(供应商)填充网格。这是用 supplierGrid.setItems(allSuppliers);
完成的。但是你问 allSuppliers
从哪里来?
可以使用 Repository. Because the repository will be annotated with @Repository
, its a spring component that can be automatically generated by spring and can be Injected/Autowired(即在您看来)使用 @Inject
/@Autowired
.
获取它们
然后,您只需调用 List<Supplier> allSuppliers = supplierRepository.findAll()
即可获得数据库中所有供应商的列表,现在您可以使用上述 supplierGrid.setItems(allSuppliers);
将其放入网格中
任何 class 实例可以被 spring 注入的是 spring-bean,这包括使用 @Component、@ 注释的 classes服务或@Repository。 Spring 不能自动注入像 Supplier 这样的实体,除非你定义这是你的 @Configuration class:
/* 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();
}
我知道在很多网站上都有很多教程可以教你如何做到这一点,但这是我第一次尝试将数据库 table 连接到 UI,所以当例如,Spring Boot/MyBatis/Vaadin 的版本与我正在使用的版本不同,或者他们使用 JPA 或 JDBC 而不是 MyBatis,我不知道如何将其更改为根据我的具体情况工作。
当人们说 "it's no different than any other method of doing it with " 根本没有帮助时,因为正如我之前所说,我以前从未这样做过。教程代码示例中的注释和 classes 在每个新版本中都会被删除和弃用,但没有明确解释如何更改它以使用较新版本。我研究了各种 APIs(Spring Boot、Vaadin、MyBatis)大约一个月,对每个人的作用有一个模糊的理解,但不知道他们如何协同工作以达到预期的结果为数据库制作 UI。我只是对教程中的单个弃用注释或 class 如何导致整个事情崩溃感到非常沮丧。我知道这很啰嗦,但我只是想让你们都明白我的意思。我并不特别喜欢任何一个 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 个 table 的 PostgreSQL 10.5 数据库,它最终将成为 UI 供商店经理使用,例如查看收到的库存货物、员工工作的小时数和其他任务。
我的数据库名为 'store',用户:'store',密码:'store'(如果重要的话)。
例如,这些是我的一些 tables:
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,这不是必需的,并且可以在 SQL 语句上使用 @Update
等注释取代那个。另外,用简单的英语来说,Spring Bean 到底是什么?我希望那不会太长..或者不够长。
编辑:Vaadin 12 的当前版本是 12.0.4
你问的太多了,所以我会尽量触及所有内容,不要太详细。我希望这可以帮助您开始工作。
首先,您需要一个 java class,其中包含供应商 table 中的所有字段,并用 @Entity
进行注释。 @Table
注解可以让你定义 Db table 名称,如果 table 和 class 一样被调用(不区分大小写)则没有必要:
@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
}
现在您的 table 有了一个 class,您可以开始为它创建一个 Vaadin 网格。这可以通过 Grid<Supplier> supplierGrid = new Grid<Supplier>(Supplier.class);
.
现在用项目(供应商)填充网格。这是用 supplierGrid.setItems(allSuppliers);
完成的。但是你问 allSuppliers
从哪里来?
可以使用 Repository. Because the repository will be annotated with @Repository
, its a spring component that can be automatically generated by spring and can be Injected/Autowired(即在您看来)使用 @Inject
/@Autowired
.
获取它们
然后,您只需调用 List<Supplier> allSuppliers = supplierRepository.findAll()
即可获得数据库中所有供应商的列表,现在您可以使用上述 supplierGrid.setItems(allSuppliers);
任何 class 实例可以被 spring 注入的是 spring-bean,这包括使用 @Component、@ 注释的 classes服务或@Repository。 Spring 不能自动注入像 Supplier 这样的实体,除非你定义这是你的 @Configuration class:
/* 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();
}