查询Oracle表的字段SQL如下:
select
ut.TABLE_NAME,--表名称
ut.COLUMN_NAME,--字段名称
uc.comments,--字段注释
ut.DATA_TYPE,--字典类型
ut.DATA_LENGTH,--字典长度
ut.NULLABLE--是否为空
from user_tab_columns ut
inner JOIN user_col_comments uc
on ut.TABLE_NAME = uc.table_name and ut.COLUMN_NAME = uc.column_name
where ut.Table_Name='表名' -- order by ut.column_name
然后写个存储过程就简单了,只是借此机会熟悉一下oracle中写存储过程的各种语法。
存储过程内容:
create or replace procedure P_VME_COMMON_GENERATE_MODEL(table_name in varchar2)
AS
/* 生成JAVA 的Entity类 */
retString LONG;--Model类的代码
table_name_up varchar2(100);--大写的参数-表名
temp_func_name varchar2(50);--首字母大写形式字段名
temp_field_name varchar2(50);--首字母小写形式字段名
temp_getset LONG;--get set方法代码
temp_data_type varchar2(20); -- 数据类型
BEGIN
table_name_up:=upper(table_name);
retString:='';
retString:=retString||chr(10)||'package com.ly.mp.project.module.entities;';
retString:=retString||chr(10)||chr(10)||'import java.io.Serializable;';
retString:=retString||chr(10)||'import java.util.List;';
--类名:去掉前缀,自动改成首字母大写形式,去掉下划线
retString:=retString||chr(10)||chr(10)||'public class '|| replace(initcap(replace(lower(replace(table_name_up,'T_MDS_VME_','')),'_',' ')),' ','')
||'Entity extends Page implements Serializable{';
temp_getset:='';
FOR R IN (select
ut.TABLE_NAME,--表名称
ut.COLUMN_NAME,--字段名称
uc.comments,--字段注释
ut.DATA_TYPE,--字典类型
ut.DATA_LENGTH,--字典长度
ut.NULLABLE--是否为空
from user_tab_columns ut
inner JOIN user_col_comments uc
on ut.TABLE_NAME = uc.table_name and ut.COLUMN_NAME = uc.column_name
where ut.Table_Name=table_name_up -- order by ut.column_name
)
LOOP
-- 循环每个字段,拼接成java代码;
temp_data_type:=CASE R.DATA_TYPE
WHEN 'VARCHAR2' THEN 'String'
--when 'NUMBER' then ''
ELSE 'String' --默认都可以是String
END;
temp_func_name:= replace(initcap(lower(replace(R.COLUMN_NAME,'T_MDS_VME_',''))),'_','');
temp_field_name:= lower(substr(temp_func_name,1,1))||substr(temp_func_name,2);
retString:=retString||chr(10)||' private '||temp_data_type||' '||temp_field_name||';//'||R.comments;
temp_getset:=temp_getset||chr(10)||' public '||temp_data_type||' get'||temp_func_name||'() {';
temp_getset:=temp_getset||chr(10)||' return '||temp_field_name||';';
temp_getset:=temp_getset||chr(10)||' }';
temp_getset:=temp_getset||chr(10)||' public void set'||temp_func_name||'('||temp_data_type||' '||temp_field_name||') {';
temp_getset:=temp_getset||chr(10)||' this.'||temp_field_name||' = '||temp_field_name||';';
temp_getset:=temp_getset||chr(10)||' }';
end LOOP;
retString:=retString||temp_getset;
retString:=retString||chr(10)||'}';
--select retString from dual;
DBMS_OUTPUT.PUT_LINE(retString);
END P_VME_COMMON_GENERATE_MODEL;
/*
execute P_VME_COMMON_GENERATE_MODEL('tb_test');
*/然后调用测试一下:
然后输出日志中会输出Entity类代码,复制到java文件中,只要修改一点就能使用了,比如:
连接到数据库 TEST。
package com.ly.mp.project.module.entities;
import java.io.Serializable;
import java.util.List;
public class ProIndexDefEntity extends Page implements Serializable{
private String updateControlId;//并发控制字段
private String creator;//创建人
private String createdDate;//创建日期
private String modifier;//修改人
private String modifyDate;//修改日期
private String remark;//备注
//****省略其他字段
public String getUpdateControlId() {
return updateControlId;
}
public void setUpdateControlId(String updateControlId) {
this.updateControlId = updateControlId;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getCreatedDate() {
return createdDate;
}
public void setCreatedDate(String createdDate) {
this.createdDate = createdDate;
}
public String getModifier() {
return modifier;
}
public void setModifier(String modifier) {
this.modifier = modifier;
}
public String getModifyDate() {
return modifyDate;
}
public void setModifyDate(String modifyDate) {
this.modifyDate = modifyDate;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
//****省略其他get set方法
}
进程已退出。
从数据库 TEST 断开连接。
附:其实能自动生成Entity代码,那也一定能生成常用的增、删、改、查方法的代码,无非就是根据表名、字段名、字段类型来生成,这些信息我们都能查到就自然能处理了。
Oracle版本:Oracle 11g