MySQL中表字段转Java实体类的属性

背景

阿里开发规范中表示字段名要求以小写字母或数字+下划线命名,如果不使用mybatis自动生成器,在开发过程手动写对应的Java实体类的属性时,字段少还可以接受,字段多了就会写得非常难受,于是写了下面的SQL来解决这个问题。


效果展示

 


SQL

使用说明

此SQL用于快速根据表字段和注释获取Java实体类中对应的属性和注释用,在使用时只需将最后两行语句处的数据名改成对应的你自己的数据库,数据表名改成你需要获取属性的数据表,执行SQL后将执行结果复制到实体类中即可(若继承了某基类则还需要删除重复属性) 。

注意事项:

1. SQL能接受字段中的下划线个数最多5个,若多于5个自行在转小驼峰命名函数中修改v_max即可;

2. SQL中的数据映射只做了常见的几种数据类型,若使用过程有用到一些特殊的数据类型,在数据映射函数中按实例格式添加即可。

-- 下划线命名转小驼峰命名
DELIMITER $$
DROP FUNCTION IF EXISTS underLine2LowerCamelCase$$
CREATE FUNCTION underLine2LowerCamelCase(name varchar(50)) RETURNS varchar(50)
BEGIN
  DECLARE ret VARCHAR(50) DEFAULT '';
-- 下划线个数接受5个内,若多于5个自行修改下面值即可
	declare v_max int unsigned default 5;
  SET ret=name;
	while v_max >0  do
		set ret=REPLACE(ret,SUBSTR(ret,INSTR(ret,'_'),2),SUBSTR(UPPER(SUBSTR(ret,INSTR(ret,'_'),2)),2));
    set v_max=v_max-1;
  end while;
  return ret;
END $$
DELIMITER ;

-- 数据类型映射
DELIMITER $$
DROP FUNCTION IF EXISTS dataTypeMapping$$
CREATE FUNCTION dataTypeMapping (type VARCHAR(20)) RETURNS VARCHAR (20)
BEGIN
	DECLARE ret VARCHAR(20) DEFAULT type;
	 CASE UPPER(type)
-- 布尔型
		WHEN 'BIT' THEN SET ret ='Boolean';
-- 整型
		WHEN 'INT' THEN SET ret ='Integer';
		WHEN 'INTEGER' THEN SET ret ='Integer';
		WHEN 'TINYINT' THEN SET ret ='Integer';
		WHEN 'SMALLINT' THEN SET ret ='Integer';
		WHEN 'MEDIUMINT' THEN SET ret ='Integer';
		WHEN 'BIGINT' THEN SET ret ='Long';
-- 浮点型
		WHEN 'DECIMAL' THEN SET ret ='BigDecimal';
		WHEN 'FLOAT' THEN SET ret ='FLOAT';
		WHEN 'DOUBLE' THEN SET ret ='DOUBLE';
-- 字符串类型
		WHEN 'VARCHAR' THEN SET ret ='String';
		WHEN 'CHAR' THEN SET ret ='String';
		WHEN 'TEXT' THEN SET ret ='String';
-- 时间类型
		WHEN 'DATETIME' THEN SET ret ='Date';
		WHEN 'DATE' THEN SET ret ='Date';
		WHEN 'TIME' THEN SET ret ='Time';
		WHEN 'TIMESTAMP' THEN SET ret ='Timestamp';
		WHEN 'DATETIME' THEN SET ret ='Timestamp';
-- 特殊类型按照以下格式添加即可
-- 		WHEN '数据库中类型大写' THEN SET ret ='Java中类型';
-- 其他类型不做映射
		ELSE SET ret = type;
	END CASE;
	return ret;
END $$
DELIMITER ;


-- 获取字段
SELECT
	CONCAT(
-- 注释部分
		'/**\n* ',
-- 注释值
		COLUMN_COMMENT,
		'\n*/',
		'\n',
-- 修饰符
		'private ',
-- 数据类型
		dataTypeMapping(DATA_TYPE),
		' ',
-- 属性
		underLine2LowerCamelCase (COLUMN_NAME),
		';'
	)
FROM
	information_schema.`COLUMNS`
WHERE
	TABLE_SCHEMA = 'database_name' -- 数据库名
AND TABLE_NAME = 'table_name'; -- 表名

参考

【MySQL和Java数据类型对应】:https://www.cnblogs.com/haoyul/p/9815472.html

【MySQL自定义函数用法详解-复合结构自定义变量/流程控制】:https://www.cnblogs.com/caoruiy/p/4485273.html

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值