GeneratorServiceImpl.java 4.8 KB
Newer Older
1
package me.zhengjie.service.impl;
2

D
dqjdda 已提交
3
import cn.hutool.core.collection.CollectionUtil;
4
import cn.hutool.core.util.ObjectUtil;
5
import me.zhengjie.domain.GenConfig;
D
dqjdda 已提交
6
import me.zhengjie.domain.ColumnInfo;
7
import me.zhengjie.domain.vo.TableInfo;
8
import me.zhengjie.exception.BadRequestException;
D
dqjdda 已提交
9
import me.zhengjie.repository.ColumnInfoRepository;
10 11
import me.zhengjie.service.GeneratorService;
import me.zhengjie.utils.GenUtil;
12
import me.zhengjie.utils.PageUtil;
13
import me.zhengjie.utils.StringUtils;
14 15 16 17 18 19 20 21 22
import org.springframework.stereotype.Service;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
23
 * @author Zheng Jie
24 25 26
 * @date 2019-01-02
 */
@Service
27
@SuppressWarnings("all")
28 29 30 31 32
public class GeneratorServiceImpl implements GeneratorService {

    @PersistenceContext
    private EntityManager em;

D
dqjdda 已提交
33 34 35 36 37 38
    private final ColumnInfoRepository columnInfoRepository;

    public GeneratorServiceImpl(ColumnInfoRepository columnInfoRepository) {
        this.columnInfoRepository = columnInfoRepository;
    }

39
    @Override
40 41 42 43 44 45 46 47 48 49
    public Object getTables() {
        // 使用预编译防止sql注入
        String sql = "select table_name ,create_time , engine, table_collation, table_comment from information_schema.tables " +
                "where table_schema = (select database()) " +
                "order by create_time desc";
        Query query = em.createNativeQuery(sql);
        return query.getResultList();
    }

    @Override
50
    public Object getTables(String name, int[] startEnd) {
51 52 53 54 55
        // 使用预编译防止sql注入
        String sql = "select table_name ,create_time , engine, table_collation, table_comment from information_schema.tables " +
                "where table_schema = (select database()) " +
                "and table_name like ? order by create_time desc";
        Query query = em.createNativeQuery(sql);
56
        query.setFirstResult(startEnd[0]);
57
        query.setMaxResults(startEnd[1]-startEnd[0]);
58
        query.setParameter(1, StringUtils.isNotBlank(name) ? ("%" + name + "%") : "%%");
59
        List result = query.getResultList();
60
        List<TableInfo> tableInfos = new ArrayList<>();
61 62 63
        for (Object obj : result) {
            Object[] arr = (Object[]) obj;
            tableInfos.add(new TableInfo(arr[0],arr[1],arr[2],arr[3], ObjectUtil.isNotEmpty(arr[4])? arr[4] : "-"));
64 65 66 67 68 69 70
        }
        Query query1 = em.createNativeQuery("SELECT COUNT(*) from information_schema.tables where table_schema = (select database())");
        Object totalElements = query1.getSingleResult();
        return PageUtil.toPage(tableInfos,totalElements);
    }

    @Override
D
dqjdda 已提交
71 72 73 74 75 76 77 78 79 80 81
    public List<ColumnInfo> getColumns(String tableName) {
        List<ColumnInfo> columnInfos = columnInfoRepository.findByTableNameOrderByIdAsc(tableName);
        if(CollectionUtil.isNotEmpty(columnInfos)){
            return columnInfos;
        } else {
            columnInfos = query(tableName);
            return columnInfoRepository.saveAll(columnInfos);
        }
    }

    public List<ColumnInfo> query(String tableName){
82 83 84 85
        // 使用预编译防止sql注入
        String sql = "select column_name, is_nullable, data_type, column_comment, column_key, extra from information_schema.columns " +
                "where table_name = ? and table_schema = (select database()) order by ordinal_position";
        Query query = em.createNativeQuery(sql);
D
dqjdda 已提交
86
        query.setParameter(1,tableName);
87
        List result = query.getResultList();
88
        List<ColumnInfo> columnInfos = new ArrayList<>();
89 90
        for (Object obj : result) {
            Object[] arr = (Object[]) obj;
D
dqjdda 已提交
91 92 93 94 95 96 97 98 99 100
            columnInfos.add(
                    new ColumnInfo(
                            tableName,
                            arr[0].toString(),
                            arr[1].equals("NO"),
                            arr[2].toString(),
                            ObjectUtil.isNotNull(arr[3]) ? arr[3].toString() : null,
                            ObjectUtil.isNotNull(arr[4]) ? arr[4].toString() : null,
                            ObjectUtil.isNotNull(arr[5]) ? arr[5].toString() : null)
            );
101
        }
D
dqjdda 已提交
102 103 104 105 106 107 108 109 110 111 112
        return columnInfos;
    }

    @Override
    public void sync(List<ColumnInfo> columnInfos) {

    }

    @Override
    public void save(List<ColumnInfo> columnInfos) {
        columnInfoRepository.saveAll(columnInfos);
113 114 115
    }

    @Override
116
    public Object generator(GenConfig genConfig, List<ColumnInfo> columns) {
117 118 119 120
        if(genConfig.getId() == null){
            throw new BadRequestException("请先配置生成器");
        }
        try {
121
            GenUtil.generatorCode(columns,genConfig);
122 123 124
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
125
        return null;
126 127
    }
}