用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以下的环境不支持.
随机推荐
- f1 f12热键关闭
fn+f2进入bios系统——>找到configuration——>Hotkey Mode——>enter——>选择disable——>fn+f10保存
- java 查看运行时某个类文件所在jar的位置
在一些大型项目中,项目所依赖的库可能比较到,有时候也会出现库冲突的情况,曾经遇到过一种情况:一个第三方云存储提供了一个sdk,这个sdk本身依赖httpclient相关的包,然而对方却把httpcli ...
- hdu 3729(二分图最大匹配)
I'm Telling the Truth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- mybatis spring sqlsession
sqlsession是什么? 从 http://blog.csdn.net/hupanfeng/article/details/9238127 知道 sqlsession创建 可以看出,创建sqlse ...
- Centos6.9下安装OpenOffice 4.1.4
# 对一下时间,时间不准,解压不了yum install -y ntp unzipntpdate -u 202.112.10.36yum install libXext.x86_64 -yyum gr ...
- 利用js生成读取页面数据并导出为excel
//核心,js部分 */var navs = new Vue({ el: '#navs', data: { navs: [] }, ready: function () { this.$http.ge ...
- win10的VMware虚机host-only模式下,虚拟机无法ping通物理机,而物理机能ping通虚机
1.打开控制面板—->Windows防火墙(win10操作系统) 2.点击最上面的”允许应用或功能通过xxxxx” 3.勾上上图的“文件和打印机共享” 然后点确定.
- 五十七 POP3收取邮件
SMTP用于发送邮件,如果要收取邮件呢? 收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上.收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3. Python ...
- POJ 2777.Count Color-线段树(区间染色+区间查询颜色数量二进制状态压缩)-若干年之前的一道题目。。。
Count Color Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 53312 Accepted: 16050 Des ...
- 从零开始做SSH项目(二)
使用hibernate测试加载数据.删除数据和修改数据等功能时,针对的是与数据库表user对应的User. 为了简化对其他数据表对应的实体类的持久化操作,可以在项目中创建一个BaseHibernate ...