DROP PROCEDURE IF EXISTS `PROC_Table2Class`; CREATE ` PROCEDURE `PROC_Table2Class`(IN dbName varchar(50),IN tableName varchar(50) ,IN package varchar(512)) COMMENT '将表转换成JFinal中的model类' OK:BEGIN -- 判断数据库和表是否存在 IF (dbName = '') THEN SET dbName = DATABASE(); SELECT CONCAT('参数"dbName"为空,默认使用当前所选数据库[',dbName,']') AS MSG; END IF; SELECT COUNT(*) INTO @dbExists FROM information_schema.SCHEMATA WHERE SCHEMA_NAME=dbName; IF (@dbExists <> 1) THEN SELECT CONCAT('数据库[',tableName,']不存在') as MSG; LEAVE OK; END IF; SELECT COUNT(*),TABLE_COMMENT,CREATE_TIME,UPDATE_TIME INTO @tbExists,@tbComment,@tbCreateTime,@tbLastUpdateTime FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=dbName AND TABLE_NAME=tableName; IF (@tbExists <> 1) THEN SELECT CONCAT('数据库[',tableName,']中的表[',tableName,']不存在') as MSG; LEAVE OK; END IF; IF (package = '') THEN SELECT CONCAT('类中的[package]不能为空') as MSG; LEAVE OK; END IF; -- 将tb_xx_yy转为Xxyy SELECT LOCATE('_',tableName) INTO @idx; SET @clazzName = tableName; IF (@idx > 0) THEN SET @clazzName = SUBSTRING(@clazzName, @idx + 1, LENGTH(@clazzName)); SET @clazzName = REPLACE(@clazzName,'_', ''); END IF; -- 去掉尾部的s SELECT RIGHT(@clazzName,1) INTO @idx; IF (@idx = 's') THEN SET @clazzName = SUBSTRING(@clazzName, 1, LENGTH(@clazzName) - 1); END IF; -- 首字母大写 SET @clazzName = CONCAT(UPPER(LEFT(@clazzName,1)), SUBSTRING(@clazzName,2, (LENGTH(@clazzName)-1))); -- 拼接类 SELECT CONCAT('package ',package,';\n\nimport com.jfinal.plugin.activerecord.Model;\n\n/**\n* ',@clazzName,'.java \n* 说明:',IF(LENGTH(@tbComment) > 0,@tbComment,'无'),'\n* 建立人: ',user(),'\n* 建立时间:', IFNULL(@tbCreateTime,DATE_FORMAT(NOW(), '%Y-%m-%d %T')),'\n* 最后修改时间:',IFNULL(@tbLastUpdateTime,DATE_FORMAT(NOW(), '%Y-%m-%d %T')),'\n*/\npublic class ', @clazzName,' extends Model<',@clazzName,'> {\n') as MSG UNION SELECT ' private static final long serialVersionUID = 1L;' as MSG UNION SELECT CONCAT(' public static final ', @clazzName,' dao = new ',@clazzName,'();\n') UNION SELECT CONCAT(' /*数据库表名*/\n public static final String TABLE_NAME = "',tableName,'";\n /*如下是数据库字段*/') UNION SELECT CONCAT(' public static final String ', COLUMN_NAME,' = "', COLUMN_NAME,'"; //', IF(LENGTH(COLUMN_COMMENT)>0, COLUMN_COMMENT, '注释无'), ', 数据库字段类型:', COLUMN_TYPE, IF(IS_NULLABLE='NO', ', 不可为空', ', 容许为空')) as MSG FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=dbName AND TABLE_NAME=tableName UNION SELECT '}' as MSG; END;
使用方法java
-- 参数databaseName 能够为空,默认使用当前所选数据库 call PROC_Table2Class('databaseName','tableName','package.path') call PROC_Table2Class('','tableName','package.path')