用python生成基于lombok 和 hibernate 生成javabean
mysql工具类
import pymysql.cursors
import sys
from contextlib import contextmanager
import traceback
import ExcelHelp as excel from logbook import Logger, StreamHandler StreamHandler(sys.stdout).push_application()
log = Logger('FileOperation') """
pymysql.Connect()参数说明
host(str): MySQL服务器地址
port(int): MySQL服务器端口号
user(str): 用户名
passwd(str): 密码
db(str): 数据库名称
charset(str): 连接编码 connection对象支持的方法
cursor() 使用该连接创建并返回游标
commit() 提交当前事务
rollback() 回滚当前事务
close() 关闭连接 cursor对象支持的方法
execute(op) 执行一个数据库的查询命令
fetchone() 取得结果集的下一行
fetchmany(size) 获取结果集的下几行
fetchall() 获取结果集中的所有行
rowcount() 返回数据条数或影响行数
close() 关闭游标对象 """ # charset='utf8'
class Mysql(object):
StreamHandler(sys.stdout).push_application()
logger = Logger('Mysql')
# 连接数据库 # 生产环境数据库
__config = {
'host': '118.190.158.239',
'port': 3306,
'user': 'develop',
'password': 'B06C670823934B0B9838F96E1F8C11AC',
'db': 'faith',
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor,
} # 数据库构造函数,从连接池中取出连接,并生成操作游标
def __init__(self):
"""
配置成员变量
"""
# 连接对象
self.__conn = self.__getConn()
self.__cursor = self.__getCursor() def __getConn(self):
"""
获取con连接
:return: con
"""
self.__conn = pymysql.Connect(**Mysql.__config)
return self.__conn def __getCursor(self):
"""
获取游标
:return: cursor
"""
self.__cursor = self.__conn.cursor()
return self.__cursor @contextmanager
def __con_cursor(self):
"""
1、定义上下文管理器,连接后自动关闭连接
2、元组对象前面如果不带“*”、字典对象如果前面不带“**”,则作为普通的对象传递参数。
:return:
"""
# 打开连接
conn = self.__getConn()
# 打开游标
cursor = self.__getCursor() try:
yield cursor
except Exception as ex:
conn.rollback()
Mysql.logger.error(repr(ex))
finally:
self.__conn.commit()
self.__cursor.close()
self.__conn.close() # ---------- 搜索 ---------- def __query(self, cursor, sql, param=None):
if param:
count = cursor.execute(sql, param)
else:
count = cursor.execute(sql)
return count def getOne(self, sql, param=None):
"""
@summary: 执行查询,并取出第一条
@param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
@param param: 可选参数,条件列表值(元组/列表)
@return: result list/boolean 查询到的结果集
""" with self.__con_cursor() as cursor:
if self.__query(cursor, sql, param) > 0:
result = cursor.fetchone()
else:
result = False
return result def getMany(self, sql, param=None, num=1):
"""
@summary: 执行查询,并取出num条结果
@param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
@param num:取得的结果条数
@param param: 可选参数,条件列表值(元组/列表)
@return: result list/boolean 查询到的结果集
"""
with self.__con_cursor() as cursor:
if self.__query(cursor, sql, param) > 0:
result = cursor.fetchmany(num)
else:
result = False
return result def getAll(self, sql, param=None):
"""
@summary: 执行查询,并取出所有结果集
@param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来
@param param: 可选参数,条件列表值(元组/列表)
@return: result list(字典对象)/boolean 查询到的结果集
""" with self.__con_cursor() as cursor:
if self.__query(cursor, sql, param) > 0:
result = cursor.fetchall()
else:
result = False
return result def __select(self, table, cond_dict=None, order=None):
"""
@summary: 执行条件查询,并取出所有结果集
@cond_dict:{'name':'xiaoming'...}
@order:'order by id desc'
@return: result ({"col":"val","":""},{})
"""
consql = ' '
if cond_dict != '':
for k, v in cond_dict.items():
consql = consql + k + '=' + v + ' and'
consql = consql + ' 1=1 '
sql = 'select * from %s where ' % table
sql = sql + consql + order
'_select:' + sql
return self._exeCute(sql) # ---------- 更新 ---------- def update(self, sql, param=None):
"""
@summary: 更新数据表记录
@param sql: SQL格式及条件,使用(%s,%s)
@param param: 要更新的 值 tuple/list
@return: count 受影响的行数
"""
with self.__con_cursor() as cursor:
return cursor.execute(sql, param) # ---------- 删除 ---------- def delete(self, sql, param=None):
"""
@summary: 删除数据表记录
@param sql: SQL格式及条件,使用(%s,%s)
@param param: 要删除的条件 值 tuple/list
@return: count 受影响的行数
""" with self.__con_cursor() as cursor:
return cursor.execute(sql, param) # ---------- 插入 ---------- # 插入一条/多条数据
def insert(self, sql, *param):
"""
@summary: 向数据表插入一条记录
@param sql:要插入的SQL格式
@param value:要插入的记录数据tuple/list
@return: insertId
"""
with self.__con_cursor() as cursor:
# 执行插入操作
cursor.executemany(sql, param)
# cursor.execute(sql)
# 获取最后更新的ID
return cursor.lastrowid if __name__ == '__main__':
aaa = Mysql()
# print(aaa.getOne("select * from erp_users"))
# print(aaa.getOne("select * from erp_users WHERE id in(%s)", (19,)))
# for item in aaa.getMany("select * from erp_users WHERE id in(19,39)", None, 5):
# print(item)
# for item in aaa.getAll("select name from erp_users ORDER BY `name` asc"):
# print(item)
# for item in aaa.getAll("select * from erp_users WHERE id in(%s)", (19,)):
# print(item)
print(aaa.update("UPDATE erp_users SET mail =%s WHERE id = %s", ('123@789', 19)))
# print(aaa.delete("DELETE erp_users WHERE id = %s", (19,)))
# print(aaa.getInsertId())
# 插入一条数据
# print(aaa.insert("INSERT `erp_areas` (`areaName`,`charge`,`areaCode`,`is_delete`,`commission`) VALUES (%s,%s,%s,%s,%s)", ('通州片区2222ssssssd', '片区经理3', '0', '0', '0.90')))
# 插入多条数据
# print(aaa.insert("INSERT `erp_areas` (`areaName`,`charge`,`areaCode`,`is_delete`,`commission`) VALUES (%s,%s,%s,%s,%s)", ('通州片区2222ssssssd', '片区经理3', '0', '0', '0.90'), ('通州片区2222ssssssd', '片区经理3', '0',
'0', '0.90')))
python生成javabean
import sys
import datetime
from unipath import * sys.path.append("lib")
from MySQLHelper import Mysql
from io import StringIO
from logbook import Logger, StreamHandler # sys.path.append("lib/test")
StreamHandler(sys.stdout).push_application()
log = Logger('ProcessProdect') class StringBuilder(object):
_file_str = None def __init__(self):
self._file_str = StringIO() def Append(self, str):
self._file_str.write(str) def AppendN(self, str):
self._file_str.write(str + "\n") def __str__(self):
return self._file_str.getvalue() class CreateJaveBean: @staticmethod
def createJaveClass(databaseName, tableName, ClassNameSuffix, filepath):
# 类型映射
datatypeMapping = {"varchar": "String", "int": "Integer", "bit": "Boolean", "datetime": "Date"}
selectSql = "SELECT * FROM information_schema. COLUMNS WHERE TABLE_SCHEMA = '{schemaName}' AND table_name = '{tabName}';".format(schemaName=databaseName, tabName=tableName)
mysql = Mysql() resultset = mysql.getAll(selectSql)
log.info(resultset)
sb = StringBuilder()
# entity #####################################################################################
sb.AppendN("package com.shouxin.modules.erp.model;")
sb.AppendN("")
sb.AppendN("import lombok.*;")
sb.AppendN("import org.hibernate.annotations.DynamicUpdate;")
sb.AppendN("import javax.persistence.*;")
sb.AppendN("import java.util.*;")
sb.AppendN("")
sb.AppendN("")
sb.AppendN("/**")
sb.AppendN(" * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有")
sb.AppendN(" * 文件名称 : " + tableName + "Entity.java:")
sb.AppendN(" * 文件编号 : 1-1-1")
sb.AppendN(" * 功能描述 : ")
sb.AppendN(" * 文件版本 : " + datetime.datetime.now().strftime('%Y-%m-%d') + ".01")
sb.AppendN(" * 创建人名 : 于继业")
sb.AppendN(" * 创建日期 : " + datetime.datetime.now().strftime('%Y-%m-%d'))
sb.AppendN(" * 修改人名 :")
sb.AppendN(" * 修改日期 :")
sb.AppendN(" */")
sb.AppendN("@RequiredArgsConstructor")
sb.AppendN("@Accessors(chain = true)")
sb.AppendN("@ToString")
sb.AppendN("@EqualsAndHashCode")
sb.AppendN("@Entity")
sb.AppendN("@DynamicUpdate")
sb.AppendN("@Table(name = \"" + str(tableName).lower() + "\")")
sb.AppendN("public class " + tableName + ClassNameSuffix + " {")
sb.AppendN("") for data in resultset:
# sb.Append(data["colName"] + "\t")
# 获取注解
sb.AppendN("/** " + data["COLUMN_COMMENT"] + " */")
# PRI主键约束;
# UNI唯一约束;
# MUL可以重复。
if data["COLUMN_KEY"].strip():
sb.AppendN("@Id")
sb.AppendN("@Getter")
sb.AppendN("@Setter")
sb.AppendN("@GeneratedValue(strategy = GenerationType.IDENTITY)")
# 是否有版本控制
elif str(data["COLUMN_NAME"]).lower() == "version":
sb.AppendN("@Getter")
sb.AppendN("@Setter")
sb.AppendN("@Version")
else: # 基本格式
sb.AppendN("@Basic")
sb.AppendN("@Getter")
sb.AppendN("@Setter")
sb.AppendN("@Column(name = \"" + data["COLUMN_NAME"] + "\"" + ("" if data["IS_NULLABLE"] == "YES" else ", nullable = false") + (", length = " + str(data["CHARACTER_MAXIMUM_LENGTH"]) if data["DATA_TYPE"] == "varchar" else "") + ")")
# sb.AppendN("@Getter(onMethod = @_({" + keyinfo + ", @Column(name = \""
# + data["COLUMN_NAME"] + "\""
# + ("" if data["IS_NULLABLE"] == "YES" else ", nullable = false")
# + (", length = " + str(data["CHARACTER_MAXIMUM_LENGTH"]) if data["DATA_TYPE"] == "varchar" else "") + ")}))")
sb.AppendN("private " + datatypeMapping[data["DATA_TYPE"]] + " " + str(data["COLUMN_NAME"][0:1]).lower() + data["COLUMN_NAME"][1:] + ";")
sb.AppendN("}")
log.info(sb)
with open(Path(Path(filepath), tableName + ClassNameSuffix + '.java'), 'w+', encoding='utf-8') as file:
file.write(str(sb)) # dao层接口#####################################################################################
sb = StringBuilder()
sb.AppendN("package com.shouxin.modules.erp.dao;")
sb.AppendN("")
sb.AppendN("import com.shouxin.modules.erp.model." + tableName + "Entity;")
sb.AppendN("import org.hibernate.HibernateException;")
sb.AppendN("")
sb.AppendN("")
sb.AppendN("/**")
sb.AppendN(" * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有")
sb.AppendN(" * 文件名称 : I" + tableName + "Dao.java:")
sb.AppendN(" * 文件编号 : 1-1-1")
sb.AppendN(" * 功能描述 : ")
sb.AppendN(" * 文件版本 : " + datetime.datetime.now().strftime('%Y-%m-%d') + ".01")
sb.AppendN(" * 创建人名 : 于继业")
sb.AppendN(" * 创建日期 : " + datetime.datetime.now().strftime('%Y-%m-%d'))
sb.AppendN(" * 修改人名 :")
sb.AppendN(" * 修改日期 :")
sb.AppendN(" */")
sb.AppendN("public interface I" + tableName + "Dao extends IBaseDao<" + tableName + "Entity> {")
sb.AppendN("")
sb.AppendN("}")
with open(Path(Path(filepath), "I" + tableName + 'Dao.java'), 'w+', encoding='utf-8') as file:
file.write(str(sb)) # dao层实现#####################################################################################
sb = StringBuilder()
sb.AppendN("package com.shouxin.modules.erp.dao.impl;")
sb.AppendN("")
sb.AppendN("import org.springframework.stereotype.Repository;")
sb.AppendN("import org.hibernate.HibernateException;")
sb.AppendN("import com.shouxin.modules.erp.dao.IRoleDao;")
sb.AppendN("import com.shouxin.modules.erp.model.Role;")
sb.AppendN("")
sb.AppendN("")
sb.AppendN("/**")
sb.AppendN(" * 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有")
sb.AppendN(" * 文件名称 : " + tableName + "DaoImpl.java:")
sb.AppendN(" * 文件编号 : 1-1-1")
sb.AppendN(" * 功能描述 : ")
sb.AppendN(" * 文件版本 : " + datetime.datetime.now().strftime('%Y-%m-%d') + ".01")
sb.AppendN(" * 创建人名 : 于继业")
sb.AppendN(" * 创建日期 : " + datetime.datetime.now().strftime('%Y-%m-%d'))
sb.AppendN(" * 修改人名 :")
sb.AppendN(" * 修改日期 :")
sb.AppendN(" */")
sb.AppendN("@Repository(\"" + str(tableName[0:1]).lower() + tableName[1:] + "Dao\")")
sb.AppendN("public class " + tableName + "DaoImpl extends BaseDaoImpl<" + tableName + "Entity> implements I" + tableName + "Dao {")
sb.AppendN("")
sb.AppendN("}")
with open(Path(Path(filepath), tableName + 'DaoImpl.java'), 'w+', encoding='utf-8') as file:
file.write(str(sb)) if __name__ == '__main__':
CreateJaveBean.createJaveClass("faith", "UniqueCode", "Entity", r'C:\Users\Administrator\Desktop\流程信息')
例子
package com.shouxin.modules.erp.model; import com.shouxin.annotation.model.AModelView;
import lombok.*;
import lombok.experimental.Accessors;
import org.hibernate.annotations.DynamicUpdate; import javax.persistence.*; /**
* 保留版权 : CopyRright (c) 2018-2018 于继业 版权所有
* 文件名称 : UniqueCodeEntity.java:
* 文件编号 : 1-1-1
* 功能描述 : 唯一码存储表
* 文件版本 : 2018-01-22.01
* 创建人名 : 于继业
* 创建日期 : 2018-01-22
* 修改人名 :
* 修改日期 :
*/
@RequiredArgsConstructor
@Accessors(chain = true)
@ToString
@EqualsAndHashCode
@Entity
@DynamicUpdate
@AModelView(viewName = "view_uniquecode")
@Table(name = "uniquecode")
public class UniqueCodeEntity { /**
* 唯一码
*/
@Id
@Getter
@Setter
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
private Integer iD;
/**
* GUID
*/
@Basic
@Getter
@Setter
@Column(name = "GUID", nullable = false, length = 36, updatable = false)
private String gUID;
/**
* 明码
*/
@Basic
@Getter
@Setter
@Column(name = "PublicCode", nullable = false, length = 36, updatable = false)
private String publicCode;
/**
* 暗码
*/
@Basic
@Getter
@Setter
@Column(name = "PrivateCode", nullable = false, length = 36, updatable = false)
private String privateCode;
/**
* 所属供应商
*/
@Basic
@Getter
@Setter
@Column(name = "VenID", nullable = false, updatable = false)
private Integer venID;
/**
* 类型
*/
@Basic
@Getter
@Setter
@Column(name = "TypeID", updatable = false)
private Integer typeID;
/**
* 状态
*/
@Basic
@Getter
@Setter
@Column(name = "StateID")
private Integer stateID;
/**
* 所属产品
*/
@Basic
@Getter
@Setter
@Column(name = "ProID", nullable = false, updatable = false)
private Integer proID;
}
用python生成基于lombok 和 hibernate 生成javabean的更多相关文章
- python实现基于两张图片生成圆角图标效果的方法
python实现基于两张图片生成圆角图标效果的方法 这篇文章主要介绍了python实现基于两张图片生成圆角图标效果的方法,实例分析了Python使用pil模块进行图片处理的技巧,分享给大家供大家参考. ...
- 让Hibernate生成的DDL脚本自动增加注释
我们知道可以通过Hibernate对象自动生成DDL建表语句,通过PowerDesigner工具可以反向工程生成数据字典,但是在生成的DDL中一直不能写上中文的注释,这就使我们生成的数据字典不具有可用 ...
- 基于数据库的自动化生成工具,自动生成JavaBean、自动生成数据库文档等(v4.1.2版)
目录: 第1版:http://blog.csdn.net/vipbooks/article/details/51912143 第2版:htt ...
- JSP利用freemarker生成基于word模板的word文档
利用freemarker生成基于word模板的word文档 freemarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器 ...
- Hibernate学习笔记(三)Hibernate生成表单ID主键生成策略
一. Xml方式 <id>标签必须配置在<class>标签内第一个位置.由一个字段构成主键,如果是复杂主键<composite-id>标签 被映射的类必须定义对应数 ...
- 用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean)
用eclipes 添加jboss tools中的hibernate tool进行反向工程生成数据库对应的BOJO(Javabean) 安装: 在help中eclise marksplace中查询JBo ...
- J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式
J2EE进阶(十五)MyEclipse反向工程实现从数据库反向生成实体类之Hibernate方式 反向工程又称逆向工程. 开发项目涉及到的表太多,一个一个的写JAVA实体类很是费事.MyEcl ...
- python 将png图片格式转换生成gif动画
先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...
- Visual Studio2012 添加服务引用时,生成基于任务操作不可用原因
今天在添加服务引用时,发现 单选按钮 ”生成基于任务操作“不可用,原因项目选择的.net frame是3.5,调整为.net 4.5或.net4.6即可. 原因:.net4.5以下的环境不支持.
随机推荐
- Android ADT插件更新后程序运行时抛出java.lang.VerifyError异常解决办法
当我把Eclipse中的 Android ADT插件从21.1.0更新到22.0.1之后,安装后运行程序抛出java.lang.VerifyError异常. 经过调查,终于找到了一个有效的解决办法: ...
- leetcode 141 142. Linked List Cycle
题目描述: 不用辅助空间判断,链表中是否有环 /** * Definition for singly-linked list. * struct ListNode { * int val; * Lis ...
- 阿里云ftp连接遇到的错误,entering passive mode失败(一个并不成熟的产品?)
####禁止自行转载 ####违者必究 ####需要转载请联系我 因为最近用python写了一个自动上传的脚本,想通过FTP把数据上传到我的服务器. 于是, 兴高采烈地打开我一直信任的阿里云,yum ...
- 7:django 中间件
中间件 中间件是一个连接django请求/相应处理的框架,是一个轻量级的低层次的全局影响django输入输出的系统插件. 每一个中间件组件负责一些特定的功能,这里我们我们只看一下如何激活使用系统自带的 ...
- ES6新数据结构Set让数组去重
function unique(array){ return Array.from(new Set(array)); } var arr = ['aa','bb','cc','',1,0,'1',1, ...
- grid+report 怎么在项目中使用
grid+report 的例子很丰富,首先看你所用对应编程语言的例子.参考帮助的“产品介绍->快速入门指导”部分.根据快速入门指导中的说明,先把例子程序运行. 例子分两部分:1.报表模板例子,主 ...
- Divide Two Integers——二分法的经典变形
Divide two integers without using multiplication, division and mod operator. If it is overflow, retu ...
- Linux安全之密钥登录
我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者 ...
- 找不到 libgtk-x11-2.0.so.0
找不到 libgtk-x11-2.0.so.0 安装 yum groupinstall "Development Tools" yum install gtk+-devel gtk ...
- sql 触发器 游标
在数据库中,删除一条记录的同时想要删除另一个表里的数据,这时我们可以选择使用触发器.触发器主要是通过事件进行触发被自动调用执行的,而存储过程可以通过存储过程的名称被调用.触发器是当对某一个表进行操作. ...