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
ログイン画面
メインメニュー
一覧画面
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
新たなモデルを作成
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;}
}
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接続
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;
}
}
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>