python 生成mybatis文件

entity文件

# coding=utf-8
import MySQLdb
import sys

dbhost=‘192.168.2.200‘
dbport=3306
dbuser=‘root‘
dbpassword=‘zufangbao69fc‘
dbname=‘OrderCenter‘

dbtypes = {‘int‘:‘Integer‘, ‘bigint‘:‘Long‘, ‘bit‘:‘Boolean‘, ‘datetime‘:‘Date‘, ‘decimal‘:‘BigDecimal‘, ‘varchar‘:‘String‘,‘text‘:‘String‘}
defvalues = {‘int‘:‘0‘, ‘bigint‘:‘0L‘, ‘bit‘:‘false‘, ‘datetime‘:‘new Date()‘, ‘decimal‘:‘BigDecimal.ZERO‘, ‘varchar‘:‘StringUtils.EMPTY‘, ‘text‘:‘StringUtils.EMPTY‘}
def genEntity():
    if len(sys.argv)<2:
        print ‘pls input tablename,eg: python mybatisentity.py T_User‘
        return
    publicStr = ‘\r\n‘
    tablename=sys.argv[1]
    try:
        conn=MySQLdb.connect(host=dbhost,user=dbuser,passwd=dbpassword,port=dbport,charset="utf8")
        cur=conn.cursor()
        conn.select_db(dbname)
        print ‘import java.io.Serializable;‘
        print ‘import java.math.BigDecimal;‘
        print ‘import java.util.Date;‘
        print ‘import org.apache.commons.lang3.StringUtils;‘
        print ‘import com.fasterxml.jackson.databind.annotation.JsonDeserialize;‘
        print ‘import com.fasterxml.jackson.databind.annotation.JsonSerialize;‘
        print ‘import com.u51.utils.jackson.JacksonDateDeserializer;‘
        print ‘import com.u51.utils.jackson.JacksonDateTimeSerializer;‘
        count=cur.execute("select TABLE_COMMENT from information_schema.TABLES where TABLE_SCHEMA=‘" + dbname + "‘ and TABLE_NAME=‘" + tablename + "‘")
        results=cur.fetchall()
        print ‘/**‘
        print ‘ * %s‘ % tablename
        print ‘ * %s‘ % results[0][0]
        print ‘ */‘
        count=cur.execute("select * from information_schema.COLUMNS where TABLE_SCHEMA=‘" + dbname + "‘ and TABLE_NAME=‘" + tablename + "‘")
        results=cur.fetchall()
        print ‘public class %s implements Serializable {‘ % getEntityName(tablename)
        print ‘\t/**  */‘
        print ‘\tprivate static final long serialVersionUID        = 5775744684088434080L;‘
        initDefaultValue = ‘‘
        for r in results:
            print ‘\t/**‘
            print ‘\t * %s‘ % (‘‘ if r[19] is None else r[19].replace(‘\r‘,‘‘).replace(‘\n‘,‘‘))
            print ‘\t */‘
            if r[7] == ‘datetime‘:
                print ‘\[email protected](using = JacksonDateTimeSerializer.class)\r\n\[email protected](using = JacksonDateDeserializer.class)‘
            print ‘\tprivate %s %s;‘ % (getType(r[7]), getFieldName(r[3]))
            if r[16] is None or r[16] != ‘PRI‘:
                if len(initDefaultValue) > 0:
                    initDefaultValue = ‘%s\r\n‘ % initDefaultValue
                initDefaultValue = ‘%s\t\tthis.%s = %s;‘ % (initDefaultValue, getFieldName(r[3]), getDefaultValue(r[7], r[5] ))
            publicStr = ‘%s\r\n\t/**\r\n\t * get <tt>%s</tt> %s\r\n\t */\r\n\tpublic %s get%s(){\r\n\t\treturn %s;\r\n\t}\r\n\r\n\t/**\r\n\t * set <tt>%s</tt> %s\r\n\t */\r\n\tpublic void set%s(%s %s){\r\n\t\tthis.%s = %s;\r\n\t}\r\n‘ % (publicStr,getFieldName(r[3]), ‘‘ if r[19] is None else r[19].replace(‘\r‘,‘‘).replace(‘\n‘,‘‘), getType(r[7]), getPublicFieldName(r[3]), getFieldName(r[3]), getFieldName(r[3]), ‘‘ if r[19] is None else r[19].replace(‘\r‘,‘‘).replace(‘\n‘,‘‘), getPublicFieldName(r[3]), getType(r[7]), getFieldName(r[3]), getFieldName(r[3]), getFieldName(r[3]))
        print ‘\r\n\t/**‘
        print ‘\t * 使用默认值初始化数据, 注意:在用于插入数据记录时,主键不能付值‘
        print ‘\t */‘
        print ‘\tpublic void initWithDefaultValue() {‘
        print initDefaultValue
        print ‘\t}‘
        publicStr = publicStr[0: len(publicStr) - 2]
        print publicStr
        print ‘}‘
        cur.close()
        conn.close()
    except MySQLdb.Error, e:
        print "Mysql error %s: %s" %(e.args[0], e.args[0])

def getEntityName(tablename):
    entityName=tablename
    if tablename.startswith(‘T_‘):
        entityName = tablename[2:]
    entityName = entityName.replace(‘_‘,‘‘)
    return ‘%sEntity‘ % entityName

def getType(type):
    return dbtypes[type]

def getFieldName(field):
    return "%s%s" % (field[0].lower(),field[1:])

def getPublicFieldName(field):
    return ‘%s%s‘ % (field[0].upper(), field[1:])

def getDefaultValue(type, defval):
    if type == ‘int‘ and defval is not None and len(defval)>0:
        return defval
    else:
        return defvalues[type]

genEntity()

  

mapper文件

# coding=utf-8
import MySQLdb
import sys

dbhost=‘192.168.2.200‘
dbport=3306
dbuser=‘root‘
dbpassword=‘zufangbao69fc‘
dbname=‘OrderCenter‘

defaultEntityPackage = ‘com.u51.ordercenter.dao.entities‘

dbtypes = {‘int‘:‘Integer‘, ‘bigint‘:‘Long‘, ‘bit‘:‘Boolean‘, ‘datetime‘:‘Date‘, ‘decimal‘:‘BigDecimal‘, ‘varchar‘:‘String‘,‘text‘:‘String‘}
defvalues = {‘int‘:‘0‘, ‘bigint‘:‘0L‘, ‘bit‘:‘false‘, ‘datetime‘:‘new Date()‘, ‘decimal‘:‘BigDecimal.ZERO‘, ‘varchar‘:‘StringUtils.EMPTY‘, ‘text‘:‘StringUtils.EMPTY‘}
def genEntity():
    if len(sys.argv)<2:
        print ‘pls input tablename,eg: python mybatisentity.py T_User‘
        return
    publicStr = ‘\r\n‘
    tablename=sys.argv[1]
    if len(sys.argv)>2:
        entityPackage = sys.argv[2]
    else:
        entityPackage = defaultEntityPackage
    try:
        conn=MySQLdb.connect(host=dbhost,user=dbuser,passwd=dbpassword,port=dbport,charset="utf8")
        cur=conn.cursor()
        conn.select_db(dbname)
        print ‘import java.util.List;‘
        print ‘import org.apache.ibatis.annotations.Param;‘
        print ‘import %s.%s;‘ % (entityPackage, getEntityName(tablename))
        count=cur.execute("select TABLE_COMMENT from information_schema.TABLES where TABLE_SCHEMA=‘" + dbname + "‘ and TABLE_NAME=‘" + tablename + "‘")
        results=cur.fetchall()
        print ‘/**‘
        print ‘ * %s的DAO接口‘ % tablename
        print ‘ * %s‘ % results[0][0]
        print ‘ */‘
        count=cur.execute("select COLUMN_NAME,DATA_TYPE from information_schema.COLUMNS where TABLE_SCHEMA=‘" + dbname + "‘ and TABLE_NAME=‘" + tablename + "‘ and COLUMN_KEY=‘PRI‘")
        results=cur.fetchall()
        pkName = results[0][0]
        pkType = results[0][1]
        print ‘public interface %s {‘ % getInterfaceName(tablename)
        print ‘\t/**\r\n\t * 根据主键获取指定记录\r\n\t * @return 获取到的实体对象,如果没有找到则返回null\r\n\t */‘
        print ‘\t%s findBy%s(@Param("%s") %s %s);‘ % (getEntityName(tablename), getPublicFieldName(pkName), getFieldName(pkName), getType(pkType), getFieldName(pkName))
        print ‘\r\n\t/**\r\n\t * 保存记录\r\n\t * @return 获取主键,如果在保存的实体中已经指定主键,则返回null\r\n\t */‘
        print ‘\t%s insert(@Param("record") %s record);‘ % (getType(pkType), getEntityName(tablename))
        print ‘\r\n\t/**\r\n\t * 根据主键记录\r\n\t * @return 返回更新到的记录数\r\n\t */‘
        print ‘\tint updateByPrimaryKey(@Param("record") %s record);‘ % (getEntityName(tablename))
        print ‘\r\n\t/**\r\n\t * 根据示例查找符合条件的所有行\r\n\t * @return 返回查到的记录数\r\n\t */‘
        print ‘\tint countByExample(@Param("example") %s example);‘ % (getEntityName(tablename))
        print ‘\r\n\t/**\r\n\t * 根据示例查找符合条件的所有行\r\n\t * @return 返回查到的记录集合\r\n\t */‘
        print ‘\tList<%s> findByExample(@Param("example") %s example);‘ % (getEntityName(tablename), getEntityName(tablename))
        print ‘}‘
        cur.close()
        conn.close()
    except MySQLdb.Error, e:
        print "Mysql error %s: %s" %(e.args[0], e.args[0])

def getEntityName(tablename):
    entityName=tablename
    if tablename.startswith(‘T_‘):
        entityName = tablename[2:]
    entityName = entityName.replace(‘_‘,‘‘)
    return ‘%sEntity‘ % entityName

def getInterfaceName(tablename):
    interfaceName = tablename
    if tablename.startswith(‘T_‘):
        entityName = tablename[2:]
    entityName = entityName.replace(‘_‘,‘‘)
    return ‘%sMapper‘ % entityName

def getType(type):
    return dbtypes[type]

def getFieldName(field):
    return "%s%s" % (field[0].lower(),field[1:])

def getPublicFieldName(field):
    return ‘%s%s‘ % (field[0].upper(), field[1:])

def getDefaultValue(type, defval):
    if type == ‘int‘ and defval is not None and len(defval)>0:
        return defval
    else:
        return defvalues[type]

genEntity()

  

xml文件

# coding=utf-8
import MySQLdb
import sys

dbhost=‘192.168.2.200‘
dbport=3306
dbuser=‘root‘
dbpassword=‘zufangbao69fc‘
dbname=‘OrderCenter‘

defaultEntityPackage = ‘com.u51.ordercenter.dao.entities‘
defaultMapperPackage = ‘com.u51.ordercenter.dao.mapper‘

idtypes = {‘int‘:‘java.lang.Integer‘, ‘bigint‘:‘java.lang.Long‘}
dbtypes = {‘int‘:‘INTEGER‘, ‘bigint‘:‘BIGINT‘, ‘bit‘:‘BIT‘, ‘datetime‘:‘TIMESTAMP‘, ‘decimal‘:‘DECIMAL‘, ‘varchar‘:‘VARCHAR‘,‘text‘:‘TEXT‘}
defvalues = {‘int‘:‘0‘, ‘bigint‘:‘0L‘, ‘bit‘:‘false‘, ‘datetime‘:‘new Date()‘, ‘decimal‘:‘BigDecimal.ZERO‘, ‘varchar‘:‘StringUtils.EMPTY‘, ‘text‘:‘StringUtils.EMPTY‘}
def genEntity():
    if len(sys.argv)<2:
        print ‘pls input tablename,eg: python mybatisentity.py T_User‘
        return
    tablename=sys.argv[1]
    if len(sys.argv)>2:
        entityPackage = sys.argv[2]
    else:
        entityPackage = defaultEntityPackage
    if len(sys.argv)>3:
        mapperPackage = sys.argv[3]
    else:
        mapperPackage = defaultMapperPackage
    try:
        conn=MySQLdb.connect(host=dbhost,user=dbuser,passwd=dbpassword,port=dbport,charset="utf8")
        cur=conn.cursor()
        conn.select_db(dbname)
        print ‘<?xml version="1.0" encoding="UTF-8" ?>\r\n<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >\r\n<mapper namespace="%s.%s">\r\n\t<resultMap id="BaseResultMap" type="%s.%s">‘ % (mapperPackage, getInterfaceName(tablename), entityPackage, getEntityName(tablename))
        count=cur.execute("select COLUMN_NAME,DATA_TYPE,COLUMN_KEY from information_schema.COLUMNS where TABLE_SCHEMA=‘" + dbname + "‘ and TABLE_NAME=‘" + tablename + "‘")
        results=cur.fetchall()
        fieldNames = ‘‘
        pkName = ‘‘
        pkType = ‘‘
        insertFieldNames = ‘‘
        insertFieldValues = ‘‘
        updateFieldValues = ‘‘
        whereFieldValues = ‘‘
        for r in results:
            if len(fieldNames)>0:
                fieldNames = fieldNames + ‘,‘
            fieldNames = ‘%s%s‘ % (fieldNames, r[0])
            if r[2] is not None and r[2] == ‘PRI‘:
                pkName = r[0]
                pkType = r[1]
                print ‘\t\t<id column="%s" property="%s" jdbcType="%s" />‘ % (r[0], getFieldName(r[0]), getType(r[1]))
            else:
                print ‘\t\t<result column="%s" property="%s" jdbcType="%s" />‘ % (r[0], getFieldName(r[0]), getType(r[1]))
            if len(insertFieldNames) > 0:
                insertFieldNames = insertFieldNames + ‘\r\n‘
            insertFieldNames = ‘%s\t\t\t<if test="record.%s != null">\r\n\t\t\t\t%s,\r\n\t\t\t</if>‘ % (insertFieldNames, getFieldName(r[0]), r[0])
            if len(insertFieldValues) > 0:
                insertFieldValues = insertFieldValues + ‘\r\n‘
            insertFieldValues = ‘%s\t\t\t<if test="record.%s != null">\r\n\t\t\t\t#{record.%s,jdbcType=%s},\r\n\t\t\t</if>‘ % (insertFieldValues, getFieldName(r[0]), getFieldName(r[0]), getType(r[1]))
            if len(updateFieldValues)>0:
                updateFieldValues = updateFieldValues + ‘\r\n‘
            updateFieldValues = ‘%s\t\t\t<if test="record.%s != null">\r\n\t\t\t\t%s = #{record.%s,jdbcType=%s},\r\n\t\t\t</if>‘ % (updateFieldValues, getFieldName(r[0]), r[0], getFieldName(r[0]), getType(r[1]))
            if len(whereFieldValues)>0:
                whereFieldValues = whereFieldValues + ‘\r\n‘
            whereFieldValues = ‘%s\t\t\t<if test="example.%s != null">\r\n\t\t\t\t%s = #{example.%s,jdbcType=%s} and\r\n\t\t\t</if>‘ % (whereFieldValues, getFieldName(r[0]), r[0], getFieldName(r[0]), getType(r[1]))

        print ‘\t</resultMap>‘
        print ‘\t<sql id="Base_Column_List">‘
        print ‘\t\t%s‘ % fieldNames
        print ‘\t</sql>‘
        print ‘\t<select id="selectBy%s" resultMap="BaseResultMap" parameterType="java.util.HashMap">‘ % (getPublicFieldName(pkName), )
        print ‘\t\tselect‘
        print ‘\t\t<include refid="Base_Column_List" />‘
        print ‘\t\tfrom %s‘ % tablename
        print ‘\t\twhere %s = #{%s,jdbcType=%s}‘ % (pkName, getFieldName(pkName), getIdType(pkType))
        print ‘\t</select>‘
        print ‘\t<insert id="insert" parameterType="java.util.HashMap">‘
        print ‘\t\t<selectKey resultType="%s" order="AFTER" keyProperty="%s">\r\n\t\t\tSELECT LAST_INSERT_ID() AS %s\r\n\t\t</selectKey>‘ % (getIdType(pkType), getFieldName(pkName), getFieldName(pkName))
        print ‘\t\tinsert into %s‘ % tablename
        print ‘\t\t<trim prefix="(" suffix=")" suffixOverrides=",">‘
        print insertFieldNames
        print ‘\t\t</trim>‘
        print ‘\t\t<trim prefix="values (" suffix=")" suffixOverrides=",">‘
        print insertFieldValues
        print ‘\t\t</trim>‘
        print ‘\t</insert>‘
        print ‘\t<update id="updateByPrimaryKey" parameterType="java.util.HashMap">‘
        print ‘\t\tupdate %s‘ % tablename
        print ‘\t\t<set>‘
        print updateFieldValues
        print ‘\t\t</set>‘
        print ‘\t\twhere %s = #{record.%s,jdbcType=%s}‘ % (pkName, getFieldName(pkName), getType(pkType))
        print ‘\t</update>‘
        print ‘\t<sql id="example_Where_Clause">\r\n\t\t<trim prefix="where " suffixOverrides=" and">‘
        print whereFieldValues
        print ‘\t\t</trim>\r\n\t</sql>‘
        print ‘\t<select id="countByExample" parameterType="java.util.HashMap" resultType="java.lang.Integer">‘
        print ‘\t\tselect count(*) from %s‘ % (tablename)
        print ‘\t\t<include refid="example_Where_Clause" />‘
        print ‘\t</select>‘
        print ‘\t<select id="selectListByExample" resultMap="BaseResultMap" parameterType="java.util.HashMap">‘
        print ‘\t\tselect‘
        print ‘\t\t<include refid="Base_Column_List" />‘
        print ‘\t\tfrom %s‘ % tablename
        print ‘\t\t<include refid="example_Where_Clause" />‘
        print ‘\t</select>‘
        print ‘</mapper>‘
        cur.close()
        conn.close()
    except MySQLdb.Error, e:
        print "Mysql error %s: %s" %(e.args[0], e.args[0])

def getEntityName(tablename):
    entityName=tablename
    if tablename.startswith(‘T_‘):
        entityName = tablename[2:]
    entityName = entityName.replace(‘_‘,‘‘)
    return ‘%sEntity‘ % entityName

def getInterfaceName(tablename):
    interfaceName = tablename
    if tablename.startswith(‘T_‘):
        entityName = tablename[2:]
    entityName = entityName.replace(‘_‘,‘‘)
    return ‘%sMapper‘ % entityName

def getType(type):
    return dbtypes[type]

def getIdType(type):
    return idtypes[type]
def getFieldName(field):
    return "%s%s" % (field[0].lower(),field[1:])

def getPublicFieldName(field):
    return ‘%s%s‘ % (field[0].upper(), field[1:])

def getDefaultValue(type, defval):
    if type == ‘int‘ and defval is not None and len(defval)>0:
        return defval
    else:
        return defvalues[type]

genEntity()

  

时间: 2024-08-12 23:02:25

python 生成mybatis文件的相关文章

Python生成pyc文件

pyc文件是py文件编译后生成的字节码文件(byte code).pyc文件经过Python解释器最终会生成机器码运行 为什么要手动提前生成pyc文件呢,主要是不想把源代码暴露出来. python -m foo.py    #生成单个pyc文件

使用Python生成pdf文件

Python平台的优秀PDF报表类库Reportlab.它不属于Python的标准类库,所以必须手动下载类库包并安装:       yum install python-reportlab -y    这篇文章将介绍reportlab中基本常用的api,使用canvas画出一份整洁的PDF报表.详细内容参考reportlab的官方user guide. 示例一.生成一段文字 #!/usr/bin/python from reportlab.pdfgen import canvas def hel

python生成.exe文件

python生成.exe,可以使用pyinstaller模块 在windows下,打开powershell,cd到当前目录,使用 pyinstaller -F test.py 会在当前文件夹下生成一个dist的文件夹 文件test.exe在该文件夹下,可以直接使用 主要选项: -D,创建一个目录,包含exe文件,但会以来很多文件 -c,使用控制台,无界面 -W,使用窗口,无控制台

Python生成pyd文件

Python的脚本文件是开源的,量化策略的安全性没有保障.因此需要保护源码.那么要对Python代码进行混淆.加密保护. 混淆代码,我准备使用pyminifier.而加密处理,就比较麻烦. Python有py.pyc.pyw.pyo.pyd等文件格式. 其中,pyc是二进制文件.但很容易被反编译. pyw也不行,只是隐藏命令行界面而已,可以作为入口脚本. pyo和pyc差不多,也容易被反编译. 最后剩下pyd格式.pyd格式是D语言(C/C++综合进化版本)生成的二进制文件,实际也会是dll文件

python生成xml文件

先上代码: 1 #!/usr/bin/env python3 2 # _*_ coding: utf-8 _*_ 3 5 from xml.dom.minidom import Document 6 7 def readFile(filename, lines): 8 with open(filename, 'r') as f: 9 for line in f: 10 line = line.rstrip(' \n') 11 if line.startswith('//') or len(lin

Python生成exe文件

一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序.py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序.py2exe是发布在开源许可证下的.目前只有python2.x的才有对应版本的. 二.安装py2exe 从http://prdownloads.sour

python 生成 xml文件 属性的顺序问题

需求很奇葩. 文档示例 <ITEM key="username" eng="User Name" chn="用户名" val="小明"/> 用python 的xml 导出的xml文件,相应的内容是 <ITEM  chn="用户名" eng="User Name" key="username" val="小明"/> 我们都知道

python 生成日志文件

import logging name=input() logging.basicConfig(filename=r'C:\Program Files\log.txt',datefmt='%Y-%m-%d %H:%M:%S %p',level=logging.DEBUG,format='%(asctime)s-%(message)s') logging.debug('print your name:'+name) filemode: 'w'或'a',默认是'a'format:  %(leveln

python读取和生成excel文件

今天来看一下如何使用python处理excel文件,处理excel文件是在工作中经常用到的,python为我们考虑到了这一点,python中本身就自带csv模块. 1.用python读取csv文件: csv是逗号分隔符格式 一般我们用的execl生成的格式是xls和xlsx  直接重命名为csv的话会报错: Error: line contains NULL byte insun解决方案:出错原因是直接是把后缀为xls的execl文件重命名为csv的 正常的要是另存为csv文件 就不会报错了 譬