jfinal mysql存储过程_依据MySQL表结构生成JFinal Model类的存储过程

本文介绍了一个MySQL存储过程,该过程可以根据指定的数据库名、表名和包路径,自动生成对应的JFinal Model类代码。过程首先检查数据库和表是否存在,然后处理表名以符合Java类命名规范,并生成包含字段名、注释和数据类型的Model类代码。
摘要由CSDN通过智能技术生成

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 {\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('/*数据库表名*/\npublic 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;

使用方法

-- 参数databaseName 可以为空,默认使用当前所选数据库

call PROC_Table2Class('databaseName','tableName','package.path')

call PROC_Table2Class('','tableName','package.path')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值