package com.ruoyi.mybatis.utils; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.jdbc.SQL; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.mybatis.domain.ColumnInfo; import com.ruoyi.mybatis.domain.MapColumnInfo; import com.ruoyi.mybatis.domain.TableInfo; import lombok.extern.slf4j.Slf4j; @Slf4j public class SQLUtil { private static final Map, TableInfo> tableInfoMap = new HashMap<>(); private static TableInfo getTableInfo(T entity) { Class clazz = entity.getClass(); TableInfo tableInfo = tableInfoMap.get(clazz); if (tableInfo == null) tableInfo = new TableInfo(clazz); return tableInfo; } public static String list(T entity) { SQL sql = new SQL(); TableInfo tableInfo = getTableInfo(entity); sql.SELECT(String.join(",", tableInfo.getQueryColumns())) .FROM(tableInfo.getTableNameFrom()); if (tableInfo.isEnbleMap()) { tableInfo.getJoinSql().stream() .forEach(sql::LEFT_OUTER_JOIN); tableInfo.getNotNullMapColumns(entity).stream() .map(MapColumnInfo::getQuerySql) .forEach(sql::WHERE); tableInfo.getNotNullColumns(entity).stream() .map(ColumnInfo::getQuerySql) .map(query -> tableInfo.getTableNameT() + "." + query) .forEach(sql::WHERE); } else { tableInfo.getNotNullColumns(entity).stream() .map(ColumnInfo::getQuerySql) .forEach(sql::WHERE); } log.debug(sql.toString()); return sql.toString(); } public static String insert(T entity) { SQL sql = new SQL(); TableInfo tableInfo = getTableInfo(entity); sql.INSERT_INTO(tableInfo.getTableName()); tableInfo.getNotNullColumns(entity).stream() .forEach(column -> sql.VALUES(column.getColumnName(), column.getTemplate())); return sql.toString(); } public static String update(T entity) { SQL sql = new SQL(); TableInfo tableInfo = getTableInfo(entity); sql.UPDATE(tableInfo.getTableName()); List sets = new ArrayList(); tableInfo.getColumns().stream() .forEach(column -> { if (column.isPrimaryKey()) { sql.WHERE(column.getColumnName() + " = " + column.getTemplate()); } else { sets.add(column.getColumnName() + " = " + column.getTemplate()); } }); sql.SET(sets.toArray(new String[0])); return sql.toString(); } public static String deleteById(T entity) { SQL sql = new SQL(); TableInfo tableInfo = getTableInfo(entity); sql.DELETE_FROM(tableInfo.getTableName()); tableInfo.getPrimaryKeys().stream() .map(column -> column.getColumnName() + " = " + column.getTemplate()) .forEach(sql::WHERE); return sql.toString(); } public static String selectById(T entity) { SQL sql = new SQL(); TableInfo tableInfo = getTableInfo(entity); sql.SELECT(String.join(",", tableInfo.getQueryColumns())) .FROM(tableInfo.getTableNameFrom()); if (tableInfo.isEnbleMap()) { tableInfo.getJoinSql().stream() .forEach(sql::LEFT_OUTER_JOIN); tableInfo.getPrimaryKeys().stream() .map(column -> tableInfo.getTableNameT() + "." + column.getColumnName() + " = " + column.getTemplate()) .forEach(sql::WHERE); } else { tableInfo.getPrimaryKeys().stream() .map(column -> column.getColumnName() + " = " + column.getTemplate()) .forEach(sql::WHERE); } return sql.toString(); } }