ORACLE-代码生成器 脚本,根据需求,可以更改定制

该博客介绍了一个自动化代码生成器,它能够读取Oracle数据库中的表信息,然后根据这些信息自动生成Java实体类、Mapper接口、Service接口和服务实现类、Controller以及相应的VO和DTO类。整个过程涉及了Tkinter GUI、数据库连接、XML解析、YAML配置读取、文件操作和代码模板生成等技术。此外,还展示了如何使用这个工具进行数据库连接测试和文件复制。
from lib2to3.pytree import convert
from struct import pack
import time
import datetime
from glob import glob
from tkinter import filedialog
import tkinter as tk
import os
import shutil
import cx_Oracle
import xml.dom.minidom
from matplotlib.pyplot import table
import yaml
import tkinter.messagebox as msgbox
import traceback
import sys



config_dict = {}

now = datetime.datetime.now()


#读取xml文件
def get_info_from_xml():

    xml_file = xml.dom.minidom.parse("Connect2Oracle\generator.xml")
    xml_file.find("author").text()
    print(xml_file.find("author").text)
    print('---')



def get_yaml_data():
    f =  open('Connect2Oracle\\application.yml', encoding='utf-8')
    # 设置Loader=yaml.FullLoader忽略YAMLLoadWarning警告
    return yaml.load(f,Loader=yaml.FullLoader)


#半驼峰  如字段名为   scc_locked_id  会转成 sccLockedId
def convert_half_camel(one_string,space_character):
    string_list = str(one_string).split(space_character) #将字符串转化为list

    first = string_list[0].lower()

    others = string_list[1:]

    others_capital = [word.capitalize() for word in others] #str.capitalize():将字符串的首字母转化为大写

    others_capital[0:0] = [first]

    hump_string = ''.join(others_capital) #将list组合成为字符串,中间无连接符。

    return hump_string



#驼峰 如字段名为   scc_locked_id  会转成 SccLockedId
def convert_camel(one_string,space_character):
    string_list = str(one_string).split(space_character) #将字符串转化为list

    others_capital = [word.capitalize() for word in string_list] #str.capitalize():将字符串的首字母转化为大写

    hump_string = ''.join(others_capital) #将list组合成为字符串,中间无连接符。

    return hump_string



def connect_OK():
    config_dict = get_yaml_data()
    username = config_dict['username']
    password = config_dict['password']
    host = config_dict['host']
    port = config_dict['port']
    servicename = config_dict['servicename']

    try:
        conn = cx_Oracle.connect(username,password, host + ':' + str(port) + '/' + servicename)
        cursor = conn.cursor ()
      
        msgbox.showinfo('温馨提示', '连接成功!')

    except Exception as ex_results:
        msg = traceback.format_exc()
        msgbox.showinfo('温馨提示', msg)


def connect_2_oracle():

    table_name = text4.get().upper()

    if len(table_name) == 0:
        msgbox.showinfo('温馨提示', '请输入表名!')
        # sys.exit(0)
        # os._exit
        return


    config_dict = get_yaml_data()

    package = config_dict['package']
    author = config_dict['author']
    schema = config_dict['schema']
    username = config_dict['username']
    password = config_dict['password']
    host = config_dict['host']
    port = config_dict['port']
    servicename = config_dict['servicename']
    
    conn = cx_Oracle.connect(username,password, host + ':' + str(port) + '/' + servicename)
    cursor = conn.cursor ()    
    
    execute_sql_for_table_values = "SELECT * FROM {}".format(table_name)
    cursor.execute (execute_sql_for_table_values)  
    table_values = cursor.fetchall() #得到表数据集  
    col_names = [x[0] for x in cursor.description] #获取列名

    execute_sql_for_field =  "select  ut.COLUMN_NAME,    uc.comments,    ut.DATA_TYPE,   ut.DATA_LENGTH,    ut.NULLABLE  from all_tab_columns  ut inner JOIN all_col_comments uc on ut.TABLE_NAME  = uc.table_name and ut.COLUMN_NAME = uc.column_name where ut.Table_Name= '{}' order by ut.column_name  ".format(table_name.upper())
    cursor.execute (execute_sql_for_field)  
    field_values = cursor.fetchall() #得到字段类型、字段注释等数据集    
   
    execute_sql_for_pk = "select cu.* from all_cons_columns cu, all_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = '{}'".format(table_name.upper())
    cursor.execute (execute_sql_for_pk)  
    pk_values = cursor.fetchall() #得到字段类型、字段注释等数据集 
   

    execute_sql_for_table_comment = " SELECT a.TABLE_NAME,b.COMMENTS FROM all_tables a,all_tab_comments b WHERE a.TABLE_NAME=b.TABLE_NAME and  a.TABLE_NAME = '{}'  ORDER BY TABLE_NAME   ".format(table_name.upper())
    cursor.execute(execute_sql_for_table_comment)
    table_comments = cursor.fetchall()#获取表的中文名
    table_chinses_name = ''
    if(len(table_comments) > 0):
        table_chinses_name = table_comments[0][1]
    primary_key = ""
    if(len(pk_values)> 0):
        primary_key = pk_values[0][3]

    f=open(convert_camel(table_name,"_") + '.java',"a",encoding="utf-8")#利用追加模式,参数从w替换为a即可
    f.write("""
package {}.model;


import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import javax.persistence.*;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.sql.Timestamp;

import cn.com.scc.common.base.BaseExtEntity;

/**
*
* @Author {}
* @date {}
**/
@Entity
@Getter
@Setter
@ToString
@Table(name="{}", schema="{}")
""".format(package,author,now.strftime('%Y-%m-%d %H:%M:%S'),table_name,schema))




    f.writelines("""
public class {} extends BaseExtEntity implements Serializable {}

    private static final long serialVersionUID = 1L;  
    
    
    """.format(convert_camel(table_name,"_"),"{"))
   
# 0:'AUTH_TYPE'
# 1:'授权类型'
# 2:'VARCHAR2'
# 3:20
# 4:'Y'


    for index in field_values:
        if (primary_key == index[0]):
            f.writelines("""
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator={})
    @SequenceGenerator(name="{}", sequenceName={}, allocationSize = 1, schema={})
    @Column(name = "{}")
    @ApiModelProperty(value = "{}")
    private Long {};            
    """.format(table_name.upper()+"_S",table_name.upper()+"_S",table_name.upper()+"_S",schema,primary_key,index[1],convert_half_camel(primary_key,'_')))

        elif('DATE' == index[2]):
            if(index[4] == 'Y'):
                f.writelines("""
    @Column(name = "{}", nullable = true)
    @ApiModelProperty(value = "{}")
    private Timestamp {};
                """.format(index[0],index[1],convert_half_camel(index[0],"_")))
            else:
                f.writelines("""
    @Column(name = "{}", nullable = false)
    @NotNull
    @ApiModelProperty(value = "{}")
    private Timestamp {};
                """.format(index[0],index[1],convert_half_camel(index[0],"_")))



        elif('VARCHAR2' == index[2]):
            if(index[4] == 'Y'):                
                f.writelines("""
    @Column(name = "{}", nullable = true, length = {})
    @ApiModelProperty(value = "{}")
    private String {};
                """.format(index[0],index[3],index[1],convert_half_camel(index[0],"_")))
            else:
                f.writelines("""
    @Column(name = "{}", nullable = false, length = {})
    @NotBlank
    @ApiModelProperty(value = "{}")
    private String {};
                """.format(index[0],index[3],index[1],convert_half_camel(index[0],"_")))

        else:
            if(index[4] == 'Y'):
                f.writelines("""
    @Column(name = "{}", nullable = true)
    @ApiModelProperty(value = "{}")
    private Long {};""".format(index[0],index[3],index[1],convert_half_camel(index[0],"_")))
            else:
                f.writelines("""
    @Column(name = "{}", nullable = false, length = {})
    @NotBlank
    @ApiModelProperty(value = "{}")
    private Long {};
                """.format(index[0],index[3],index[1],convert_half_camel(index[0],"_")))



    f.writelines("""
    public void copy({} source){}
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    {}        
{}""".format(convert_camel(table_name,"_"),"{","}","}"))
    f.close()




    #生成service
    f_service=open('I' + convert_camel(table_name,"_")+  'Service'  + '.java',"a",encoding="utf-8")#利用追加模式,参数从w替换为a即可
    f_service.writelines("""
package {}.service;

import {}.dto.ProcessAbnormalTriggerDTO;
import {}.model.ProcessAbnormalTrigger;
import {}.vo.ProcessAbnormalTriggerQueryVO;
import org.springframework.data.domain.Pageable;
import cn.com.scc.common.page.PageTableData;

import java.util.List;
import java.util.Set;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;

/**
*
* @author {}
* @date {}
**/
public interface {} {}

    /**
    * 查询数据分页
    * @param criteria 条件
    * @param pageable 分页参数
    * @return Map<String,Object>
    */
    public PageTableData queryAll({}VO criteria, Pageable pageable);

    /**
    * 查询所有数据不分页
    * @param criteria 条件参数
    * @return List<{}DTO>
    */
    public List<{}DTO> queryAll({}VO criteria);

    /**
     * 根据ID查询
     * @param id ID
     * @return {}DTO
     */
    public {}DTO findById(Long id);

    /**
    * 创建
    * @param resources /
    * @return {}DTO
    */
    public {}DTO create({} resources);

    /**
    * 编辑
    * @param resources /
    */
    public void update({} resources);

    /**
    * 多选删除
    * @param ids /
    */
    public void deleteAll(Set<Long> ids);

    /**
    * 导出数据
    * @param all 待导出的数据
    * @param response /
    * @throws IOException /
    */
    public void download(List<{}DTO> all, HttpServletResponse response) throws IOException;
{}
""".format(
package,
package,
package,
package,
author,
now.strftime('%Y-%m-%d %H:%M:%S'),
'I' + convert_camel(table_name,"_")+  'Service' , 
"{", 
convert_camel(table_name,'_'),
convert_camel(table_name,'_'),     
convert_camel(table_name,'_'),
convert_camel(table_name,'_'),
convert_camel(table_name,'_'),
convert_camel(table_name,'_'),
convert_camel(table_name,'_'),
convert_camel(table_name,'_'),
convert_camel(table_name,'_'),
convert_camel(table_name,'_'),
convert_camel(table_name,'_'), 
"}"
))

    f_service.close()
    

    f_mapper = open(convert_camel(table_name,"_")+  'Mapper'  + '.java',"a",encoding="utf-8")#利用追加模式,参数从w替换为a即可

    f_mapper.writelines("""
package {}.mapstruct;

import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;

import cn.com.scc.common.base.BaseMapper;
import {}.dto.{}DTO;
import {}.model.{};

/**
*
* @author {}
* @date {}
**/
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface {}Mapper extends BaseMapper<{}DTO, {}> {}

{}
""".format(package,package,convert_camel(table_name,'_'),package,convert_camel(table_name,'_'),author,now.strftime('%Y-%m-%d %H:%M:%S'), convert_camel(table_name,'_'),convert_camel(table_name,'_'),convert_camel(table_name,'_'),"{","}"    ))

    f_mapper.close()

    #生成VO
    f_VO=open(convert_camel(table_name,"_")+  'VO'  + '.java',"a",encoding="utf-8")#利用追加模式,参数从w替换为a即可

    f_VO.writelines("""
package {}.vo;

import cn.com.scc.common.annotation.JpaConvert;
import cn.com.scc.common.base.BaseExtDTO;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.io.Serializable;
import java.math.BigDecimal;

/**
*
* @author {}
* @date {}
**/
@Getter
@Setter
@ToString
public class {}VO implements Serializable {}

	private static final long serialVersionUID = 1L;  
    
    """.format(package,author,now.strftime('%Y-%m-%d %H:%M:%S'),convert_camel(table_name,'_'),"{"))


    # 0:'AUTH_TYPE'
# 1:'授权类型'
# 2:'VARCHAR2'
# 3:20                     ('DATE' == index[2]):
# 4:'Y'
    
    for index in field_values: 
        
        if('NUMBER' == index[2]):
            f_VO.writelines("    " + "/**" + index[1]+ "*/" + '\n')
            f_VO.writelines("    private Long " + convert_half_camel(index[0], '_') + ';' + '\n' )
        elif('VARCHAR2' == index[2]):
            f_VO.writelines("    " + "/**" + index[1]+ "*/" + '\n')
            f_VO.writelines("    private String " + convert_half_camel(index[0], '_') + ';' + '\n' )
        else:
            f_VO.writelines("    " + "/**" + index[1]+ "*/" + '\n')
            f_VO.writelines("    private Timestamp " + convert_half_camel(index[0], '_') + ';' + '\n' )

    f_VO.writelines("""
    public {}VO(){}  
    {}
    """.format(convert_camel(table_name,'_'),"{","}"))

    # 0:'AUTH_TYPE'
    # 1:'授权类型'
    # 2:'VARCHAR2'
    # 3:20
    # 4:'Y'

    f_VO.writelines("""
	@JpaConvert    
    public {}VO(""".format(convert_camel(table_name,'_')))


    i = 0
    for index in field_values:
        
        if(len(field_values) != i +1 ):
            if('DATE' == index[2]):
                f_VO.writelines('Object ' + convert_half_camel(index[0],'_') + ',' )
            elif('VARCHAR2' == index[2]):
                f_VO.writelines('String ' + convert_half_camel(index[0],'_') + ',' )
            else:
                f_VO.writelines('BigDecimal ' + convert_half_camel(index[0],'_') + ',' )
            i = i+ 1
        else:
            if('DATE' == index[2]):
                f_VO.writelines('Object ' + convert_half_camel(index[0],'_') + ')' + '{')
            elif('VARCHAR2' == index[2]):
                f_VO.writelines('String ' + convert_half_camel(index[0],'_')+ ')' + '{')
            else:
                f_VO.writelines('BigDecimal ' + convert_half_camel(index[0],'_')+ ')' + '{')
            

    for index in field_values:
        f_VO.writelines('\n')
        if('DATE' == index[2]):
            f_VO.writelines("""
        this.{} = {} == null ? null :(Timestamp) {};                                
            """.format(convert_half_camel(index[0],'_'), convert_half_camel(index[0],'_'), convert_half_camel(index[0],'_')))                
        elif('VARCHAR2' == index[2]):
                f_VO.writelines("""
        this.{} = {};                      
            """.format(convert_half_camel(index[0],'_'), convert_half_camel(index[0],'_')))

        else:
            f_VO.writelines("""
        this.{} = {} == null ? null : {}.longValue();
            """.format(convert_half_camel(index[0],'_'), convert_half_camel(index[0],'_'), convert_half_camel(index[0],'_')))
    f_VO.writelines("""
    {}
{}
    """.format("}","}"))
    f_VO.close()



    #DTO实现过程
    f_DTO=open(convert_camel(table_name,"_")+  'DTO'  + '.java',"a",encoding="utf-8")#利用追加模式,参数从w替换为a即可

    f_DTO.writelines("""
package {}.dto;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.io.Serializable;

import cn.com.scc.common.annotation.JpaConvert;
import cn.com.scc.common.base.BaseExtDTO;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

/**
*
* @author {}
* @date {}
**/
@Getter
@Setter
@ToString
@NoArgsConstructor
public class {}DTO extends BaseExtDTO implements Serializable {}

	private static final long serialVersionUID = 1L;  
    
    """.format(package,author,now.strftime('%Y-%m-%d %H:%M:%S'),convert_camel(table_name,'_'),"{"))


# 0:'AUTH_TYPE'
# 1:'授权类型'
# 2:'VARCHAR2'
# 3:20        
# 4:'Y'
    
    for index in field_values: 
        
        if('NUMBER' == index[2]):
            f_DTO.writelines("    " + "/**" + index[1]+ "*/" + '\n')
            f_DTO.writelines("    private Long " + convert_half_camel(index[0], '_') + ';' + '\n' )
        elif('VARCHAR2' == index[2]):
            f_DTO.writelines("    " + "/**" + index[1]+ "*/" + '\n')
            f_DTO.writelines("    private String " + convert_half_camel(index[0], '_') + ';' + '\n' )
        else:
            f_DTO.writelines("    " + "/**" + index[1]+ "*/" + '\n')
            f_DTO.writelines("    private Timestamp " + convert_half_camel(index[0], '_') + ';' + '\n' )

    f_DTO.writelines("""
    public {}(){}  
    {}
    """.format(convert_camel(table_name,'_'),"{","}"))

    # 0:'AUTH_TYPE'
    # 1:'授权类型'
    # 2:'VARCHAR2'
    # 3:20
    # 4:'Y'

    f_DTO.writelines("""
	@JpaConvert    
    public {}VO(""".format(convert_camel(table_name,'_')))


    i = 0
    for index in field_values:
        
        if(len(field_values) != i +1 ):
            if('DATE' == index[2]):
                f_DTO.writelines('Object ' + convert_half_camel(index[0],'_') + ',' )
            elif('VARCHAR2' == index[2]):
                f_DTO.writelines('String ' + convert_half_camel(index[0],'_') + ',' )
            else:
                f_DTO.writelines('BigDecimal ' + convert_half_camel(index[0],'_') + ',' )
            i = i+ 1
        else:
            if('DATE' == index[2]):
                f_DTO.writelines('Object ' + convert_half_camel(index[0],'_') + ')' + '{')
            elif('VARCHAR2' == index[2]):
                f_DTO.writelines('String ' + convert_half_camel(index[0],'_')+ ')' + '{')
            else:
                f_DTO.writelines('BigDecimal ' + convert_half_camel(index[0],'_')+ ')' + '{')
            

    for index in field_values:
        f_DTO.writelines('\n')
        if('DATE' == index[2]):
            f_DTO.writelines("""
        this.{} = {} == null ? null :(Timestamp) {};                                
            """.format(convert_half_camel(index[0],'_'), convert_half_camel(index[0],'_'), convert_half_camel(index[0],'_')))                
        elif('VARCHAR2' == index[2]):
                f_DTO.writelines("""
        this.{} = {};                      
            """.format(convert_half_camel(index[0],'_'), convert_half_camel(index[0],'_')))

        else:
            f_DTO.writelines("""
        this.{} = {} == null ? null : {}.longValue();
            """.format(convert_half_camel(index[0],'_'), convert_half_camel(index[0],'_'), convert_half_camel(index[0],'_')))
    f_DTO.writelines("""
    {}
{}
    """.format("}","}"))
    f_DTO.close()




    #service实现类
    #f_service_impl=open(convert_camel(table_name,"_")+  'Mapper'  + '.java',"a",encoding="utf-8")#利用追加模式,参数从w替换为a即可
    #DTO实现过程
    f_serviceimpl=open(convert_camel(table_name,"_")+  'ServiceImpl'  + '.java',"a",encoding="utf-8")#利用追加模式,参数从w替换为a即可    

    f_serviceimpl.writelines("""
package {}.service.impl;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.com.scc.common.utils.ValidationUtil;
import cn.com.scc.common.utils.FileUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import cn.com.scc.common.exception.BusinessException;
import cn.com.scc.common.page.PageTableData;
import cn.com.scc.common.utils.PageUtil;
import cn.com.scc.common.utils.QueryHelp;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.io.IOException;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
    
import {}.repository.{};
import {}.service.{};
import {}.dto.{};
import {}.vo.{};
import {}.mapstruct.{};
import {}.model.{};    
    
""".format(package,
           package, 
           convert_camel(table_name, '_') + 'Repository',
            package,
            'I' + convert_camel(table_name, '_') + 'Service',
            package,
            convert_camel(table_name,'_') + 'DTO',
            package,
            convert_camel(table_name,'_') + 'VO',
            package,
            convert_camel(table_name,'+') + 'Mapper',
            package,
            convert_camel(table_name, '_')
   ))


    f_serviceimpl.writelines("""
/**
*
* @author {}
* @date {}
**/
@Service(value = {})
public class {} implements {} {}    
    
    """.format( author,
                now.strftime('%Y-%m-%d %H:%M:%S'),
                convert_half_camel(table_name,'_') + 'Service',
                convert_camel(table_name,'_') + 'ServiceImpl',
                'I' + convert_camel(table_name,'_') + 'Service',
                "{"
    ))

    f_serviceimpl.writelines("""
	private static final Logger log = LoggerFactory.getLogger({}.class);
	
	@Resource
    private {} {};
    
	@Resource
    private {} {};


    """.format(convert_camel(table_name,'_') + 'ServiceImpl',
               convert_camel(table_name,'_') + 'Repository',
               convert_half_camel(table_name,'_') + 'Repository',
               convert_camel(table_name, '_') + 'Mapper',
               convert_half_camel(table_name, '_') + 'Mapper' 
   
           ))


    #查詢方法
    f_serviceimpl.writelines("""
    @Override
    public PageTableData queryAll({} criteria, Pageable pageable){}
        Page<{}> page = {}.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable);
        return PageUtil.toPageTable(page.map({}::toDto));
    {}

    @Override
    public List<{}> queryAll({} criteria){}
        return {}.toDto({}.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder)));
    {}

    @Override
    public {} findById(Long id) {}
        {} {} = {}.findById(id).orElseGet({}::new);
        ValidationUtil.isNull({}.getId(),{},"id",id);
        return {}.toDto({});
    {}
    """.format(   convert_camel(table_name,'_') + 'QueryVO', 
                  "{",
                  convert_camel(table_name, '_'),
                  convert_half_camel(table_name,'_') + 'Repository',
                  convert_half_camel(table_name,'_') + 'Mapper',
                  "}",
                  convert_half_camel(table_name,'_') + 'DTO',
                  convert_camel(table_name,'_') + 'QueryVO',
                  "{",                      
                  convert_half_camel(table_name,'_') + 'Mapper',
                  convert_half_camel(table_name,'_') + 'Repository',
                  "}",
                  convert_half_camel(table_name,'_') + 'DTO',
                  "{",
                  convert_camel(table_name, '_'),
                  convert_half_camel(table_name, '_'),
                  convert_half_camel(table_name,'_') + 'Repository',
                  convert_camel(table_name, '_'),
                  convert_half_camel(table_name, '_'),
                  "\"" + convert_camel(table_name, '_') + "\"",
                  convert_half_camel(table_name,'_') + 'Mapper',
                  convert_half_camel(table_name,'_'),
                 "}"
                  ))

    f_serviceimpl.writelines("""
    @Override
    @Transactional
    public {} create({} resources) {}
    	List<Object[]> isExist = {}.findById(resources.getId());
    	if (isExist.size()>0) {}
    		throw new BusinessException("ERR-0226");
		{}
        return {}.toDto({}.save(resources));
    {}

    @Override
    @Transactional
    public void update({} resources) {}
        {} {} = {}.findById(resources.getId()).orElseGet({}::new);
        ValidationUtil.isNull( {}.getId(),{},"id",resources.getId());
        {}.copy(resources);
        {}.save({})
    {}
    
    """.format(convert_camel(table_name,'_') + 'DTO', 
               convert_camel(table_name,'_'), 
               "{",
               convert_half_camel(table_name,'_') + 'Repository' , 
               "{",
               "}",
               convert_half_camel(table_name,'_') + 'Mapper' , 
               convert_half_camel(table_name,'_') + 'Repository',
                "}",


                convert_camel(table_name,'_'), 
                "{",
                convert_camel(table_name,'_'), 
                convert_half_camel(table_name,'_'), 
                convert_half_camel(table_name,'_') + 'Repository',
                convert_camel(table_name,'_'), 
                convert_half_camel(table_name,'_'), 
                "\"" +  convert_camel(table_name,'_') + "\"", 
                convert_half_camel(table_name,'_'),
                convert_half_camel(table_name,'_') + 'Repository',
                convert_half_camel(table_name,'_'),
                "}" ) )


    f_serviceimpl.writelines("""
    @Override
    @Transactional
    public void deleteAll(Set<Long> ids) {}
        for (Long id : ids) {}
            {}.deleteById(id);
        {}
    {}""".format("{", "{",convert_half_camel(table_name,'_') + 'Repository', "}" , "}")) 


    f_serviceimpl.writelines("""
    @Override
    public void download(List<{}> all, HttpServletResponse response) throws IOException {}
        List<Map<String, Object>> list = new ArrayList<>();
        for ({} {} : all) {}
    """.format(convert_camel(table_name,'_'), "{", convert_camel(table_name, '_'), convert_half_camel(table_name, '_'), "{"    ))

    for index in field_values:
        f_serviceimpl.writelines("""
            map.put({},{});""".format("\"" + index[1] + "\"",convert_half_camel(table_name,'_') + 'DTO.get' + convert_camel(index[0], '_') + '()'))


    f_serviceimpl.writelines("""
            list.add(map);""") 
    f_serviceimpl.writelines("""
        {}
    FileUtil.downloadExcel(list, response);
    {}
{}    
    """.format("}","}", "}"))

    f_serviceimpl.close()



    #dao层数据
    f_Dao=open(convert_camel(table_name,"_")+  'Repository'  + '.java',"a",encoding="utf-8")#利用追加模式,参数从w替换为a即可
    f_Dao.writelines("""
package {}.repository;

import {}.model.{};
import cn.com.scc.common.base.BaseRepository;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
/**
*
* @author {}
* @date {}
**/
public interface {} extends BaseRepository<{}, Long> {}

{}
    """.format(package,
               package,
               convert_camel(table_name,'_'), 
               author,
               now.strftime('%Y-%m-%d %H:%M:%S'),
               convert_camel(table_name,'_') + 'Repository',
               convert_camel(table_name,'_'),
               "{",
               "}"          
               ))

    f_Dao.close()



    #controller层数据

    f_Controller=open(convert_camel(table_name,"_")+  'Controller'  + '.java',"a",encoding="utf-8")#利用追加模式,参数从w替换为a即可
    
    f_Controller.writelines("""
package {}.web;

import java.util.Set;
import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import cn.com.scc.common.annotation.Log;
import {}.model.UniqueNumberRule;
import {}.service.IUniqueNumberRuleService;
import {}.vo.UniqueNumberRuleQueryVO;

/**
 * @author {}
 * @date {}
 */ 
    """.format(package,
               package,
               package,
               package,
               author,
               now.strftime('%Y-%m-%d %H:%M:%S') 
                ))



    f_Controller.writelines("""
@RestController
@Api(tags = "{}")
@RequestMapping("/api/{}")
public class {}Controller {}

    private static final Logger log = LoggerFactory.getLogger({}.class);

    @Resource
    {} {};
    """.format(table_chinses_name, 
               convert_half_camel(table_name,'_'),
               convert_camel(table_name,'_'),
               "{",
               convert_camel(table_name,'_'),
               "I" + convert_camel(table_name,'_') + "Service" ,
               convert_half_camel(table_name,'_')))


    f_Controller.writelines("""
    @GetMapping("/download")
    @Log("导出数据")
    @ApiOperation("导出数据")
    @PreAuthorize("@el.check('{}:download')")
    public void download(HttpServletResponse response, {} criteria) throws IOException {}
        {}.download({}.queryAll(criteria), response);
    {}    
    """.format(convert_half_camel(table_name,'_'),
               convert_camel(table_name,'_') + 'QueryVO',
               "{",
               convert_half_camel(table_name,'_') + 'Service',
               convert_half_camel(table_name,'_') + 'Service',
               "}"
                 ))


    f_Controller.writelines("""
    @PostMapping("/create")
    @Log("新增{}信息")
    @ApiOperation("新增{}信息")
    @PreAuthorize("@el.check('{}:add')")
    public ResponseEntity<Object> create(@Validated @RequestBody {} resources){}
        return new ResponseEntity<>({}.create(resources),HttpStatus.CREATED);
    {}  
    """.format(table_chinses_name,
               table_chinses_name,
               convert_half_camel(table_name,'_'),
               convert_camel(table_name,'_'),
               "{",
               convert_half_camel(table_name,'_')+ 'Service',
                "}"))

    f_Controller.writelines("""
    @DeleteMapping("/delete")
    @Log("删除{}信息")
    @ApiOperation("删除{}信息")
    @PreAuthorize("@el.check('{}:del')")
    public ResponseEntity<Object> delete(@RequestBody Set<Long> ids) {}
        {}.deleteAll(ids);
        return new ResponseEntity<>(HttpStatus.OK);
    {}    
    """.format(table_chinses_name,
               table_chinses_name,
               convert_half_camel(table_name,'_'),
               "{",   
                convert_half_camel(table_name,'_'),
                "}"
                    ))




    f_Controller.writelines("""
    @PutMapping("/update")
    @Log("修改{}信息")
    @ApiOperation("修改{}信息")
    @PreAuthorize("@el.check('{}:edit')")
    public ResponseEntity<Object> update(@Validated @RequestBody {} resources){}
        {}.update(resources);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    {}
    """.format(table_chinses_name,
               table_chinses_name,
               convert_half_camel(table_name,'_'),
               convert_camel(table_name,'_'),
               "{",
               convert_half_camel(table_name,'_') + 'Service',
               "}"
               ))

    f_Controller.writelines("""
    @GetMapping("/queryAllData")
    @Log("查询{}信息")
    @ApiOperation("查询{}信息")
    @PreAuthorize("@el.check('{}:list')")
    public ResponseEntity<Object> queryAllData({} criteria, Pageable pageable){}
        return new ResponseEntity<>({}.queryAllData(criteria,pageable),HttpStatus.OK);
    {}
{}  
    
    """.format(        
        table_chinses_name,
        table_chinses_name,
        convert_half_camel(table_name,'_'),
        convert_camel(table_name,'_'),
        "{",
        convert_half_camel(table_name,'_') + 'Service',
        "}",
        "}"
    ))
    f_Controller.close()
    #生成QueryVO
    f_QueryVO=open(convert_camel(table_name,"_")+  'QueryVO'  + '.java',"a",encoding="utf-8")#利用追加模式,参数从w替换为a即可
    f_QueryVO.writelines(""" 
package {}.vo;

import lombok.Data;
import java.io.Serializable;
import java.util.List;
import cn.com.scc.common.annotation.Query;

    /**
    *
    * @author {}
    * @date {}
    **/""".format(package,author,now.strftime('%Y-%m-%d %H:%M:%S')))


    f_QueryVO.writelines("""
    @Data
    public class {} implements Serializable{}

	private static final long serialVersionUID = 1L; 
""".format(convert_camel(table_name, '_') + 'QueryVO',"{"))

    for index in field_values:        
        if('NUMBER' == index[2]):
            f_QueryVO.writelines("    " + "/**" + index[1]+ "*/" + '\n')
            f_QueryVO.writelines("    @Query"  + '\n' )
            f_QueryVO.writelines("    private Long " + convert_half_camel(index[0], '_') + ';' + '\n' )
        elif('VARCHAR2' == index[2]):
            f_QueryVO.writelines("    " + "/**" + index[1]+ "*/" + '\n')
            f_QueryVO.writelines("    @Query"  + '\n')
            f_QueryVO.writelines("    private String " + convert_half_camel(index[0], '_') + ';' + '\n' )
        else:
            f_QueryVO.writelines("    " + "/**" + index[1]+ "*/" + '\n')
            f_QueryVO.writelines("    @Query"  + '\n')
            f_QueryVO.writelines("    private Timestamp " + convert_half_camel(index[0], '_') + ';' + '\n' )


    f_QueryVO.writelines("""
{}
    """.format("}"))

    f_QueryVO.close()





    
    cursor.close ()  
    conn.close () 

def CopyFile(filepath, newPath):
    # 获取当前路径下的文件名,返回List
    fileNames = os.listdir(filepath)
    for file in fileNames:
        # 将文件命加入到当前文件路径后面
        newDir = filepath + '/' + file
        # 如果是文件
        if os.path.isfile(newDir):
            print(newDir)
            newFile = newPath +  '/' +file
            shutil.copyfile(newDir, newFile)
        #如果不是文件,递归这个文件夹的路径
        else:
            CopyFile(newDir,newPath)

print(tk.TkVersion) 
HEIGHT = 1000
WIDTH = 1000

source_path = ''
dest_path = ''

root_window = tk.Tk()

canvas  = tk.Canvas(root_window, height=HEIGHT, width=WIDTH)
canvas.pack()



frame = tk.Frame(root_window, bg='#80c1ff')
frame.place(relx=0.1, rely=0.1, relwidth= 0.8, relheight= 0.8)


# label_ip = tk.Label(frame,font=40,text='IP_host:')
# label_ip.place(relx=0.03,rely=0.15,relwidth= 0.3, relheight= 0.05)

# text1 = tk.Entry(frame,font=40)
# text1.place(relx= 0.4, rely= 0.15 ,relwidth=0.3, relheight= 0.05)


# label_port = tk.Label(frame,font=40,text='端口_PORT:')
# label_port.place(relx=0.03,rely=0.25,relwidth= 0.3, relheight= 0.05)

# text2 = tk.Entry(frame,font=40)
# text2.place(relx= 0.4, rely= 0.25 ,relwidth=0.3, relheight= 0.05)

# label_service_name = tk.Label(frame,font=40,text='服务名_SERVICE_NAME:')
# label_service_name.place(relx=0.03,rely=0.35,relwidth= 0.3, relheight= 0.05)

# text3 = tk.Entry(frame,font=40)
# text3.place(relx= 0.4, rely= 0.35 ,relwidth=0.3, relheight= 0.05)

label_table_name = tk.Label(frame,font=40,text='表名:')
label_table_name.place(relx=0.2,rely=0.25,relwidth= 0.3, relheight= 0.2)

text4 = tk.Entry(frame,font=40)
text4.place(relx= 0.6, rely= 0.25 ,relwidth=0.3, relheight= 0.2)

# label_user_name = tk.Label(frame,font=40,text='用户名:')
# label_user_name.place(relx=0.03,rely=0.55,relwidth= 0.3, relheight= 0.05)

# text5 = tk.Entry(frame,font=40)
# text5.place(relx= 0.4, rely= 0.55 ,relwidth=0.3, relheight= 0.05)

# label_password = tk.Label(frame,font=40,text='密码:')
# label_password.place(relx=0.03,rely=0.65,relwidth= 0.3, relheight= 0.05)

# text6 = tk.Entry(frame,font=40)
# text6.place(relx= 0.4, rely= 0.65 ,relwidth=0.3, relheight= 0.05)

button2 = tk.Button(frame,text="数据库测试连接",command =lambda: connect_OK())
button2.place(relx=0.3, rely= 0.8, relwidth= 0.2, relheight=0.1)

button3 = tk.Button(frame,text="确定" ,command =lambda: connect_2_oracle())
button3.place(relx=0.7, rely= 0.8, relwidth= 0.2, relheight=0.1)

root_window.title('无锡JPA代码自动生成器')
root_window.mainloop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值