package com.lyr.autocode_v3.common.core.db.entity;
import lombok.Data;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@Data
public class Table {
private String tableName;
private String keys;
private String javaClassName;
private String tableComment;
private List<Column> columns;
private String tableCreateDate;
public List<Column> getColumnKeys() {
if (null == columns) {
return Collections.emptyList();
}
return columns.stream()
.filter(column -> column.getColumnKey() != null)
.collect(Collectors.toList());
}
}
package com.lyr.autocode_v3.common.core.db.entity;
import lombok.Data;
@Data
public class Column {
private String columnName;
private String javaPropertyName;
private String columnType;
private String javaClassType;
private String columnKey;
private String comment;
private String defaultProperty;
}
mapper 映射
package com.lyr.autocode_v3.common.core.db.mapper;
import com.lyr.autocode_v3.common.core.db.entity.Table;
import com.lyr.autocode_v3.common.core.db.util.StringUtils;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
public class TableMapper implements RowMapper<Table> {
public static final String QUERY_ALL_TABLE = "select `table_name`, `create_time`,`table_comment` from information_schema.tables where table_schema=?";
@Override
public Table mapRow(ResultSet resultSet, int i) throws SQLException {
Table table = new Table();
table.setTableComment(resultSet.getString("table_comment"));
table.setTableCreateDate(resultSet.getString("create_time"));
String tableName = resultSet.getString("table_name");
table.setTableName(tableName);
table.setJavaClassName(getJavaClassName(tableName));
return table;
}
private static final List<String> PREFIX_LIST = Arrays.asList("t_","tb_","tbl_","v_");
private static String getJavaClassName(String tableName) {
String tmp = StringUtils.removePrefix(tableName, PREFIX_LIST);
return StringUtils.underlineToBigHump(tmp);
}
}
package com.lyr.autocode_v3.common.core.db.mapper;
import com.lyr.autocode_v3.common.core.db.entity.Column;
import com.lyr.autocode_v3.common.core.db.util.StringUtils;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
public class ColumnMapper implements RowMapper<Column> {
public static final String QUERY_ALL_COLUMN = "show full fields from ";
@Override
public Column mapRow(ResultSet resultSet, int i) throws SQLException {
String columnName = resultSet.getString("Field");
String comment = resultSet.getString("Comment");
String type = resultSet.getString("Type");
String key = resultSet.getString("Key");
String defaultProperty = resultSet.getString("Default");
Column column = new Column();
column.setColumnKey(key);
column.setComment(comment);
column.setColumnName(columnName);
column.setColumnType(type);
column.setDefaultProperty(defaultProperty);
column.setJavaPropertyName(getJavaPropertyName(columnName));
column.setJavaClassType(getJavaClassType(type));
return column;
}
private String getJavaPropertyName(String columnName ) {
return StringUtils.underlineToSmallHump(columnName);
}
private String getJavaClassType(String t) {
if(null==t||t.isEmpty()) {
return "Object";
}
String type = t.toLowerCase();
if(type.startsWith("varchar")) {
return "String";
}else if(type.startsWith("int")) {
return "Long";
}else if(type.startsWith("char")) {
return "String";
}else if(type.startsWith("float")) {
return "java.math.BigDecimal";
}else if(type.startsWith("double")) {
return "java.math.BigDecimal";
}else if(type.startsWith("bigint")) {
return "Long";
}else if(type.startsWith("decimal")) {
return "java.math.BigDecimal";
}else if(type.startsWith("mediumint")||type.startsWith("tinyint")) {
return "Integer";
}else if(type.startsWith("date")||
type.startsWith("year")||
type.startsWith("timestamp")
||type.startsWith("datetime")
) {
return "java.util.Date";
}else if(type.startsWith("text")) {
return "String";
}else{
return "String";
}
}
}
测试代码
@Test
public void printTables() {
new JdbcTemplate(getDataSource())
.query(TableMapper.QUERY_ALL_TABLE,new TableMapper(),"blog")
.forEach(t -> System.out.println(t));
}
@Test
public void printColumns() {
new JdbcTemplate(getDataSource())
.query(ColumnMapper.QUERY_ALL_COLUMN+"tbl_user",new ColumnMapper())
.forEach(t -> System.out.println(t));
}