SQL将关系数据库表转Java对象
最近⽤SpringBoot重构⼀个PHP项⽬,⽤JPA操作MySQL数据库,由于要维持原来的表结构,应⽤中要把许多表转化为Java类,⼀般的ORM框架可以很⽅便地把Java类映射为关系数据库表 ,但这⾥显然是它的逆过程,这个好像没有现成的⼯具和框架,难道要对着表⼀个字段⼀个字段地写?
要知道,数据库有⼏⼗张表,每张表都有很多字段,⼀个个写还真得花不少精⼒,⽽且⼿写还很容易出错。
最好的办法当然是⽤程序实现⾃动转换了,这⾥我们⽤SQL来实现这种转换。
SQL实现表转Java
基本思路就是根据表名查询出列名,⽤concat函数拼接修饰符得到Java对象属性列表:
SELECT concat('public ',CASE
WHEN data_type IN('varchar','char','text')THEN'String'
WHEN data_type IN('int','tinyint')THEN'Integer'
WHEN data_type IN('bigint')THEN'Long'
WHEN data_type IN('datetime')THEN'Date'
WHEN data_type IN('bit','boolean')THEN'Boolean'
ELSE'类型不确定'
END,' ', column_name,';')AS java
FROM lumns
WHERE table_name ='person';
运⾏结果就是转换好的Java对象属性了,直接复制到类中即可。
封装成 MySQL 存储过程python转java代码
把上⾯SQL语句封装成存储过程,使⽤的时候更⽅便:
-- 以表名为输⼊参数,输出对应的java对象属性
CREATE PROCEDURE sql2java (
IN t_name char(30)
)
BEGIN
SELECT concat('public ',CASE
WHEN data_type IN('varchar','char','text')THEN'String'
WHEN data_type IN('int','tinyint')THEN'Integer'
WHEN data_type IN('bigint')THEN'Long'
WHEN data_type IN('datetime')THEN'Date'
WHEN data_type IN('bit','boolean')THEN'Boolean'
ELSE'类型不确定'
END,' ', column_name,';')AS java
FROM lumns
WHERE table_name = t_name;
END;
调⽤ MySQL 存储过程,直接传⼊表名即可:
call sql2java('person');
循环遍历所有表
数据库中有很多张表,如果我们不想⼀次次输⼊表名,通过循环遍历可以⼀次性得到所有结果。
具体做法是先查出数据库所有表名:
SELECT table_name
FROM information_schema.TABLES
WHERE table_schema ='db_name';
然后把结果集通过游标和while循环遍历所有表:
-- 打开游标
open cur;
while done do
-- 获取数据
fetch cur into t_name;
-- 直接调⽤之前的存储过程
call sql2java (t_name);
end while;
-- 关闭游标
close cur;
最后把上⾯SQL语句封装成 sql2java_all 存储过程。
调⽤存储过程,可⼀次性输出所有表的Java类:
call sql2java_all;
此⽅法除了可以得到Java类,稍作修改也可以⽀持多语⾔,⽐如Python、PHP的类,C++、Golang 的结构体以及Protobuf 的DSL代码。
本⽂SQL源码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论