查询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