04
2019
01

oracle-存储过程生成Java的entity类代码

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



版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。