很多时候,我们需要对某个表进行业务开发,生成对应的controller,service,dao,entity等操作类,分别编写增、删、改、查业务操作方法 ,而这些细活往往比较简单且没有挑战性,纯粹苦力活,又累又耗时,程序的生命是有限,不能浪费,这些方法完全可以有迹可寻的可以采用某些方法快速产生,因此想到python这个利器,采用 flask服务基于html定制代码模板,于是有了代码生成器的开发,目前有部份功能还未完成,不过还是可以满足基本的开发应用;

先说明,首先文中所用到的模板,是基于我们现在有项目定制的,像其中的BaseMarketMongoServiceImpl等类是我们框架底层的基类,如果你需要使用请自行到templates目录更改;

开发工具版本:python 3.5 + flask + pycharm

上代码:

# -*- coding: UTF-8 -*-
'''
Created on 2018年7月24日
通过模板自动生成java文件,可生成controller,service,dao,entity层等类,提供简单的list,findById,delete,save,update,page方法
@author: JL
'''import os
import json
import time
import tarfile
from flask import Flask, render_template, send_from_directory, requestapp = Flask(__name__)@app.route('/index')
def index():return render_template('create_class.html')@app.route("/download/<filename>", methods=['GET'])
def downloader(filename):# 指定文件下载目录,默认为当前项目根路径dirpath = os.path.join(app.root_path, '')# as_attachment=True 表示下载return send_from_directory(dirpath, filename, as_attachment=True)@app.route('/createClass', methods=['GET', 'POST'])
def create_class():file_name = msg = None# {'column': {'age': 'int', 'id': 'String', 'address': 'String', 'name': 'String'}, 'table': 'cc_user'}fields = request.form['fields']if len(fields) <= 0:msg='request data json is null!'print(fields)j = json.loads(fields, encoding='utf-8')class_name = j['class']package = j['package']db_type = j['type']if len(class_name) <= 0 :msg = 'className is null!'if len(package) <= 0:msg = 'package is null'if len(db_type) <= 0:msg = 'type is null'print(class_name + '\n' + package)if not msg or len(msg) <= 0:d = time.strftime("%Y-%m-%d", time.localtime())entity = request.form.get('entity')if entity and len(entity) >= 1:print('--- create entity class')create_entity(class_name, package, j['table'], j['column'], db_type, d)dao = request.form.get('dao')if dao and len(dao) >= 1:print('--- create dao class')create_dao(class_name, package, d)service = request.form.get('service')if service and len(service) >= 1:print('--- create service class')create_service(class_name, package, d)controller = request.form.get('controller')if controller and len(controller) >= 1:print('--- create controller class')create_controller(class_name, package, d)file_name = make_targz()return render_template('create_class.html', msg=msg, file_name=file_name)# 创建entity
def create_entity(class_name, package, table_name, columns, db_type, date):propertys = ''methods = ''if columns:for key in columns.keys():propertys += 'private %s %s;' % (columns[key], key) + '\n'p1 = 'public void get%s() {\nreturn this.%s;\n}' % (key.title(), key)p2 = 'public %s set%s(%s %s) {\nthis.%s = %s;\n}' % (columns[key], key.title(), columns[key], key, key, key)methods += p1+'\n'+p2c = {'package': package + '.entity','entity_package': package + '.entity.' + class_name,'class_name': class_name,'table_name': table_name,'propertys': propertys,'methods': methods,'date': date}if db_type == 'mongodb':s = render_template('entity_mongodb_templates.html', **c)create_java_file(class_name, package + '.entity', s)elif db_type == 'mysql':s = render_template('entity_mysql_templates.html', **c)create_java_file(class_name, package + '.entity', s)s = render_template('entity_mysql_mapper_templates.html', **c)create_java_file(class_name, package + '.entity', s, 'Mapper.xml')# 创建Dao
def create_dao(class_name, package, date):c = {'package': package + '.dao','class_name': class_name,'entity_package': package + '.entity.' + class_name,'date': date}s = render_template('dao_templates.html', **c)create_java_file(class_name + 'Dao', package + '.dao', s)# 创建Service
def create_service(class_name, package, date):c = {'package': package + '.service','class_name': class_name,'small_class_name': small_str(class_name),'entity_package': package + '.entity.' + class_name,'dao_package': package + '.dao.' + class_name + 'Dao','date': date}s = render_template('service_templates.html', **c)create_java_file(class_name + 'Service', package + '.service', s)# 创建controller
def create_controller(class_name, package, date):c = {'package': package + '.entity','class_name': class_name,'small_class_name': small_str(class_name),'entity_package': package + '.entity.' + class_name,'dao_package': package + '.dao.' + class_name + 'Dao','service_package': package + '.dao.' + class_name + 'Service','date': date}s = render_template('controller_templates.html', **c)# print(s)create_java_file(class_name + 'Controller', package + '.controller', s)# 将首字母转换为小写
def small_str(s):if len(s) <= 1:return sreturn (s[0:1]).lower() + s[1:]# 创建java文件
def create_java_file(class_name, package, text, suffix='.java'):dirs = 'D:/temp/python/'+package.replace('.', '/')+'/'if not os.path.exists(dirs):os.makedirs(dirs, 0o777)fd = os.open(dirs + class_name + suffix, os.O_WRONLY | os.O_CREAT)os.write(fd, text.encode(encoding="utf-8", errors="strict"))os.close(fd)#生成tar.gz压缩包
def make_targz():file_name = 'com.tar.gz'source_dir = 'D:/temp/python/'with tarfile.open(file_name, "w:gz") as tar:tar.add(source_dir, arcname=os.path.basename(source_dir))return file_nameif __name__ == '__main__':app.run()

模板定制:java结构代码

package {{ package }};import org.springframework.data.mongodb.core.mapping.Document;/*** @author admin* @version 1.0* @Description 实体类* @date {{ date }}*/
@Document(collection = "{{ table_name }}")
public class {{ class_name }} {{{ propertys }}{{ methods }}
}

其它就不一一贴上代码,文末会贴上项目下载码云链接;

运行服务,在浏览器中输入:http://127.0.0.1:5000/index

输入数据结构json串,选择生成的类,结构比较简单,都看的懂,提交后,页脚有下载打包的链接;

下载解压即有了java代码

打开目录下java文件

完毕,当然功能比较简单,后续再完善。

最后贴上码云中项目的地址:https://gitee.com/omsgit/auto-create-java

用100多行python代码开发java代码生成器相关推荐

  1. 20行Python代码开发植物识别 app

    这篇文章介绍如何用Python快速实现一个植物识别的app,家里养了几盆多肉还叫不上名字,正好拿来识别一下.实现这样一个app只需要20行左右的代码,先来看下效果: 文末点击阅读全文即可访问线上应用( ...

  2. python 作物识别_20行Python代码开发植物识别 app

    这篇文章介绍如何用Python快速实现一个植物识别的app,家里养了几盆多肉还叫不上名字,正好拿来识别一下.实现这样一个app只需要20行左右的代码,先来看下效果: 另外,我也开发了微信小程序版本,大 ...

  3. 20行Python代码开发植物识别 app!这样还怕认不出菜的尴尬吗?

    这篇文章介绍如何用Python快速实现一个植物识别的app,家里养了几盆多肉还叫不上名字,正好拿来识别一下.实现这样一个app只需要20行左右的代码,先来看下效果: 实现该app主要包含两步,前端界面 ...

  4. 100个必会的python脚本-100行Python代码实现自动抢火车票(附源码)

    前言 又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool.下面话不多说了,来一起看看详细的介绍吧. 先准备好: 12306网站用户名和密码 chrome浏览器及下载chromedr ...

  5. c语言微信挑一挑编程,100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  6. 100行python代码做一个程序_100行python代码实现微信跳一跳辅助程序

    写在前面 分享一下今天下午用python写的"跳一跳"小游戏的辅助程序.之前是准备用树莓派操控一个"机械手指"来代替人的触摸操作,但该方案还在酝酿中,实现了再分 ...

  7. python模拟别人说话的声音_如何用100行Python代码做出魔性声控游戏“八分音符酱”...

    最近几天,一款魔性的小游戏在微博上刷屏了,各大平台的主播也纷纷如感染病毒一样直播自己怎么玩这个游戏(被游戏玩). 这个游戏叫做<不要停!八分音符酱♪>.它是一款来自岛国的恶搞游戏,主角是一 ...

  8. 100行python代码实现五子棋-教程

    五子棋是是一种两人对弈的纯策略型棋类游戏. 五子棋有两种玩法.玩法一:双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成五子连线者获胜.玩法二:自己形成五子连线就替换对方任意一枚棋子.被 ...

  9. python pdf编辑开发_20行Python代码实现一款永久免费PDF编辑工具的实现

    PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档...很多都是PDF格式.它以格式稳定的优势,使得我们在打印.分享.传输过程 ...

  10. 10行 python 代码做出哪些酷炫的事情?

    来源 | Python小二 Python凭借其简洁的代码,赢得了许多开发者的喜爱.因此也就促使了更多开发者用Python开发新的模块,从而形成良性循环,Python可以凭借更加简短的代码实现许多有趣的 ...

最新文章

  1. Softmax 回归 vs. k 个二元分类器
  2. 数据结构--二叉树(1)
  3. Linux 创建桌面应用程序图标 (Ubuntu 18.04 16.04、Linux Mint、Deepin、等均适用 )
  4. javascript实现平滑的锚点
  5. Linux下修改只读文件
  6. 2017.0622.《计算机组成原理》-虚拟存储器和主存
  7. UCOS操作系统——软件定时器(八)
  8. CString提取数字
  9. 直播改革:关闭10家平台监管3万主播
  10. 2022 火狐插件 Tamper Data 下载安装使用教程
  11. win server 2008 r2 iis+php 500错误内部服务器错误。
  12. 歌剧《猫》的经典唱段《memory》中英文对照
  13. 2023年全国最新二级建造师精选真题及答案
  14. 每天5分钟玩转K8S (看书笔记)
  15. 美国的学位制度以及各学位的英文简写
  16. 慎用Java Collection的contains函数
  17. Ubuntu20.04桌面系统快速上手教程
  18. (十八)【模电】(放大电路中的反馈)交流负反馈对放大电路性能的影响
  19. 【Verilog基础】CDC跨时钟域问题,个人理解总结(下)(数据丢失、多路扇出、异步复位解决方案)
  20. Gartner:超级应用成为战略技术趋势,小程序是否能够脱引而出?

热门文章

  1. MySQL数据库优化的八种方式(总结)
  2. python运维是什么_python运维方面一般用来做什么
  3. 100多个微信小程序代码免费送
  4. python的设计模式
  5. vscode中怎样格式化js代码_VSCode代码格式化设置
  6. 论文笔记-深度估计(4) Semi-Supervised Deep Learning for Monocular Depth Map Prediction
  7. Navicat for MySQL_11.2.15破解版
  8. C语言:设计简单的计算器!
  9. svn文件本地删除 服务器不删,svn delete-删除文件和目录命令大全
  10. SVN删除文件及其恢复