Как заполнить таблицу Vaadin 12.0.4 данными / полями из таблицы или представления PostgreSQL 10.5? - PullRequest
0 голосов
/ 24 января 2019

Я знаю, что существуют десятки учебных пособий о том, как сделать это на таком же количестве веб-сайтов, но я впервые пытаюсь подключить таблицу базы данных к пользовательскому интерфейсу, поэтому, когда версия Spring Boot / MyBatis / Vaadin, дляНапример, они отличаются от того, с которым я работаю, или они используют JPA или JDBC вместо MyBatis, я понятия не имею, как изменить его для работы с моей конкретной ситуацией.

Когда люди говорят «это неотличается от любого другого метода «сделать это с помощью», который не помогает ВСЕ, поскольку, как я уже говорил ранее, я никогда не делал этого раньше.Аннотации и классы в примерах кода учебника удаляются и осуждаются с каждой новой версией без четкого объяснения того, как изменить его для работы с более новой версией.Я изучал различные API (Spring Boot, Vaadin, MyBatis) около месяца и имею смутное представление о том, что каждый из них делает, но не о том, как они работают вместе для достижения желаемого результата создания пользовательского интерфейса для базы данных.Я просто очень расстроен тем, как одна устаревшая аннотация или класс в учебнике может привести к краху всего этого.Я знаю, что это было многословно, но я просто хотел, чтобы вы все поняли, откуда я.Я не особенно привязан к какому-либо отдельному 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.

У меня есть база данных PostgreSQL 10.5 с 17 таблицами, которая в конечном итоге станет пользовательским интерфейсом для менеджера магазина, который будет использоваться для таких вещей, как просмотр полученных отгрузок товаров, часы работы сотрудника идругие задачи.

Моя база данных называется «store», пользователь: «store», пароль: «store» (если это имеет значение).

Например, вот несколько моих таблиц:

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

1 Ответ

0 голосов
/ 24 января 2019

Вы спрашиваете довольно много, поэтому я постараюсь немного коснуться всего и ничего слишком подробного. Я надеюсь, что это поможет вам запустить мяч.

Прежде всего, вам понадобится 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 для него. Это можно сделать проще всего с Grid<Supplier> supplierGrid = new Grid<Supplier>(Supplier.class);.

Теперь заполнить сетку предметами (поставщиками). Это сделано с supplierGrid.setItems(allSuppliers);. Но откуда вы спросите allSuppliers?

Их можно получить с помощью Repository . Поскольку хранилище будет аннотировано @Repository, его компонент пружины может быть автоматически сгенерирован пружиной и может быть Injected / Autowired (то есть, на ваш взгляд) с помощью @Inject /@Autowired.
Затем вы просто звоните List<Supplier> allSuppliers = supplierRepository.findAll() и у вас есть список всех поставщиков из вашей БД, который вы теперь можете поместить в сетку с вышеупомянутым supplierGrid.setItems(allSuppliers);

Любой класс, в который его экземпляр может быть вставлен пружиной, является пружинным компонентом, включая классы, аннотированные @Component, @Serivce или @Repository. 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();
}
...