zoukankan      html  css  js  c++  java
  • 用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
            print
            '_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 + "
    ")
    
        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"] + "	")
                # 获取注解
                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:UsersAdministratorDesktop流程信息')

     例子

    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;
    }
  • 相关阅读:
    JS获取URL中参数值(QueryString)的4种方法
    js 字符串转换成数字的 三种方法
    jquery.cookie 介绍 和 用法
    JS的document.all函数使用 示例
    JS按回车键实现登录的三种方法
    js 字符串转换成数字的三种方法
    GitHub访问速度慢的一种优化方法
    git commit 提交的时候报错husky > pre-commit hook failed (add --no-verify to bypass)
    git回退
    git commit 提交的时候报错husky > pre-commit hook failed (add --no-verify to bypass)(解决办法)
  • 原文地址:https://www.cnblogs.com/armyant/p/8341185.html
Copyright © 2011-2022 走看看