LoginSignup
8
6

More than 5 years have passed since last update.

LightAdmin Spring BootベースのCRUD Webサービス

Posted at

LightAdminについて

Spring BootでRailsのScaffoldのように、CRUD Webサービスが立ち上がるライブラリを探していたのですが、LightAdminというライブラリがありました。

公式サイトによるとLightAdminは、luggable CRUD UI library for Java web applications です。
Bootを使わない単独起動もあるようです。

公式サイト http://lightadmin.org/
Github https://github.com/la-team/light-admin
Github https://github.com/la-team/lightadmin-springboot

クイックスタート

lightadmin-springboot プロジェクトからgit cloneして、起動するだけです。

git clone https://github.com/la-team/lightadmin-springboot.git
cd lightadmin-springboot/
mvn spring-boot:run

ログイン画面

スクリーンショット 2017-04-11 18.42.26.png
UsernameとPasswordはどちらもadmin

メインメニュー

スクリーンショット 2017-04-11 18.44.20.png

一覧画面

スクリーンショット 2017-04-11 18.45.37.png

MySQLにつないでみる

MySQL環境を用意

手元のMySQL環境に検証用のdbとtableを作成します。

#dockerで立ち上げる例
docker run --name mysql -e MYSQL_ROOT_PASSWORD=mysql -d -p 3306:3306 mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
create database testdb;
use testdb;
create table Item(id int,name varchar(10), primary key(id));

JavaCode

元のサンプルモデルを削除

このクラスを全部削除してください。
- src/main/java/org/lightadmin/boot/administration/CityAdministration.java
- src/main/java/org/lightadmin/boot/administration/HotelAdministration.java
- src/main/java/org/lightadmin/boot/domain/City.java
- src/main/java/org/lightadmin/boot/domain/Hotel.java
- src/main/java/org/lightadmin/boot/repository/HotelRepository.java
- src/main/java/org/lightadmin/boot/web/ApplicationController.java

新たなモデルを作成

src/org/lightadmin/boot/domain/Item.java
package org.lightadmin.boot.domain;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "Item")
public class Item implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id private Long id;
    @Column private String name;

    public Item() {}
    public Item(Long id, String name, String country) {
        super();
        this.id = id;
        this.name = name;
    }

    public Long getId() {return id;}
    public void setId(Long id) {this.id = id;}
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
}
src/main/java/org/lightadmin/boot/administration/ItemAdministration.java
package org.lightadmin.boot.administration;

import org.lightadmin.api.config.AdministrationConfiguration;
import org.lightadmin.api.config.builder.EntityMetadataConfigurationUnitBuilder;
import org.lightadmin.api.config.unit.EntityMetadataConfigurationUnit;
import org.lightadmin.boot.domain.Item;

public class ItemAdministration extends AdministrationConfiguration<Item> {

    @Override
    public EntityMetadataConfigurationUnit configuration(EntityMetadataConfigurationUnitBuilder configurationBuilder) {
        return configurationBuilder.nameField("name").singularName("Item").pluralName("Items").build();
    }
}

DB接続

src/main/java/org/lightadmin/boot/ApplicationConfiguration.java
package org.lightadmin.boot;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;
import java.util.Properties;

import static org.springframework.orm.jpa.vendor.Database.MYSQL;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = {"org.lightadmin.boot.persistence"})
public class ApplicationConfiguration {

    @Bean
    @Autowired
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL5InnoDBDialect");
        vendorAdapter.setDatabase(MYSQL);
        vendorAdapter.setShowSql(false);

        final LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("org.lightadmin.boot.domain");
        factory.setDataSource(dataSource);

        return factory;
    }

    @Bean
    public JpaTransactionManager transactionManager() {
        return new JpaTransactionManager();
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/testdb?useUnicode=true&connectionCollation=utf8_general_ci&characterSetResults=utf8&characterEncoding=utf8");
        dataSource.setUsername("root");
        dataSource.setPassword("mysql");
        return dataSource;
    }

}
pom.xml
HSQLDBを削除
         <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <scope>runtime</scope>
         </dependency>

MySQLを追加
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>

結果

スクリーンショット 2017-04-12 11.05.00.png

スクリーンショット 2017-04-12 11.06.16.png

スクリーンショット 2017-04-12 11.06.49.png

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6