本例是运用的若依的框架,其中有根据表名生成实体的功能。有的公司会用liquibase去管理数据库的表,先将初始化自动生成方式记录(本文基础数据库是oracle,生成的脚本适用于oracle,mysql,达梦)
一、Controller层
/**
* 生成代码
*/
@RequiresPermissions("tool:gen:code")
@GetMapping("/genCode/{tableName}")
public void genCode(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException {
byte[] data = genService.generatorCode(tableName);
response.reset();
response.setHeader("Content-Disposition", "attachment; filename=\"gen.zip\"");
response.addHeader("Content-Length", "" + data.length);
response.setContentType("application/octet-stream; charset=UTF-8");
IOUtils.write(data, response.getOutputStream());
}
二、service层
package cn.com.XXXX.framework.tool.gen.service.impl;
import cn.com.XXXX.common.config.GenConfig;
import cn.com.XXXX.common.exception.base.BaseException;
import cn.com.XXXX.common.utils.ConfigUtil;
import cn.com.XXXX.common.utils.security.ShiroUtils;
import cn.com.XXXX.common.web.page.PageDomain;
import cn.com.XXXX.common.web.page.TableSupport;
import cn.com.XXXX.framework.tool.gen.constant.LiquibaseConstant;
import cn.com.XXXX.framework.tool.gen.domain.ColumnInfo;
import cn.com.XXXX.framework.tool.gen.domain.TableInfo;
import cn.com.XXXX.framework.tool.gen.domain.liquibase.VmFieldModel;
import cn.com.XXXX.framework.tool.gen.domain.liquibase.VmTableModel;
import cn.com.XXXX.framework.tool.gen.mapper.GenMapper;
import cn.com.XXXX.framework.tool.gen.service.IGenService;
import cn.com.XXXX.framework.tool.gen.util.GenUtils;
import cn.com.XXXX.framework.tool.gen.util.VelocityInitializer;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.github.pagehelper.PageHelper;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* 代码生成 服务层处理
*
* @author RongDa
*/
@Service("genService")
public class GenServiceImpl implements IGenService {
@Autowired
private GenMapper genMapper;
/**
* 查询ry数据库表信息
*
* @param tableInfo 表信息
* @return 数据库表列表
*/
@Override
public List<TableInfo> selectTableList(TableInfo tableInfo) {
tableInfo.setOwner(ConfigUtil.get("sys.gen.owner", "oracle"));
PageDomain pageDomain = TableSupport.buildPageRequest();
PageHelper.startPage(pageDomain.getPageNum(), pageDomain.getPageSize());
return genMapper.selectTableList(tableInfo);
}
/**
* 生成代码
*
* @param tableName 表名称
* @return 数据
*/
@Override
public byte[] generatorCode(String tableName) {
String owner = ConfigUtil.get("sys.gen.owner", "oracle");
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zip = new ZipOutputStream(outputStream);
// 查询表信息
TableInfo table = genMapper.selectTableByName(owner, tableName);
// 查询列信息
List<ColumnInfo> columns = genMapp