java封装生成Po类方法带备注

本文介绍了如何在Java中封装一个方法,通过指定的表名动态查询表结构,并生成对应的Pojo类,包括字段名及注释。示例代码展示了转换常见数据类型的函数,用户可根据需求扩展其他类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面将封装一个根据给定的表名,查询出表中的字段,然后生成相应的Po类。

public static void creationPoClass(String tableName,String path){
		String url = "jdbc:mysql://localhost:3306/lending";//数据源(mysql)的连接地址
		String user = "root";//用户名
		String password = "root";//用户密码

		Connection con = null;
		PreparedStatement ps = null;
		ResultSet rs = null;

		//拼接SQL语句,用于查询出该表的所有字段
		String sql = "select * from " + tableName;

		try {

			//加载驱动程序
			Class.forName("com.mysql.jdbc.Driver");
			//获取连接
			con = DriverManager.getConnection(url, user, password);
			
			//先查询出字段的备注并放入Map集合中
		ps = con.prepareStatement("select COLUMN_NAME,COLUMN_COMMENT from INFORMATION_SCHEMA.COLUMNS where table_name = '"+tableName +"'");
		rs = ps.executeQuery();
		Map<String, String> map = new HashMap<String, String>();
		while(rs.next()){
			map.put(rs.getString(1), rs.getString(2));
		}
		
			//创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
			ps = con.prepareStatement(sql);
			//执行查询语句,执行后返回代表查询结果的ResultSet对象。
			rs = ps.executeQuery();

			//获取此 ResultSet 对象的列的编号、类型和属性。
			ResultSetMetaData rsmd = rs.getMetaData();

			//获取表中的列数
			int count = rsmd.getColumnCount();

			//把表名的首字母大写,用作于Po类的类名
			tableName = tableName.substring(0, 1).toUpperCase() + tableName.substring(1);

			//拼接Po类的路径
			path = path+"//"+tableName+"Po.java";
			File file = new File(path);
			//创建一个新的空文件。
			file.createNewFile();
			//创建输出流
			OutputStream out = new FileOutputStream(file);

			//拼接Po类中的数据
			StringBuffer sbf = new StringBuffer();
			sbf.append("package com.wlx.po;\n\n");
			sbf.append("import java.io.Serializable;\n\n");
			sbf.append("public class "+tableName+"Po implements Serializable{\n\n" );

			//生成字段属性
			for(int i=1;i<=count;i++){
				//把字段类型转换成小写
				String type = rsmd.getColumnTypeName(i).toLowerCase();
				//把数据库的数据类型改成java数据类型(alterType()该方法在下面单独封装了起来)
				type = alterType(type);
				//把字段名称首字母转成小写(如果不需要转,则直接使用rsmd.getColumnLabel(i)即可)
				String name = rsmd.getColumnLabel(i).substring(0, 1).toLowerCase() + rsmd.getColumnLabel(i).substring(1);
				sbf.append("\tprivate "+type+" 

“+name+”;//"+map.get(rsmd.getColumnLabel(i))+"\n\n");
}

			//生成get和set方法
			for(int i=1;i<=count;i++){
				//把字段类型转换成小写
				String type = rsmd.getColumnTypeName(i).toLowerCase();
				//把数据库的数据类型改成java数据类型(alterType()该方法在下面单独封装了起来)
				type = alterType(type);
				//把字段名称首字母小写
				String name = rsmd.getColumnLabel(i).substring(0, 1).toLowerCase() + rsmd.getColumnLabel(i).substring(1);
				String getsetName = rsmd.getColumnLabel(i);
				//get方法
				sbf.append("\tpublic "+type+" get"+getsetName+"() {\n\t\treturn "+ name+";\n\t}\n");
				//set方法
				sbf.append("\tpublic void set"+getsetName+"("+type+" "+ name +") {\n\t\tthis."+ name+" = "+name+";\n\t}\n");
			}

			sbf.append("}");
			out.write(sbf.toString().getBytes());
			out.flush();
			out.close();

		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally{
			try {
				//关闭资源
				if(rs !=null){
					rs.close();
				}
				if(ps !=null){
					ps.close();
				}
				if(con !=null){
					con.close();
				}
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

上面转换类型的方法在下面这里单独封装了起来,这里仅仅转换了几个常用的类型,根据需要自行添加

public static String alterType(String type){

	//当数据库中的数据类型与java类型不一致时,就转换成相应的java类型
	if(type.equalsIgnoreCase("varchar") || type.equalsIgnoreCase("char") || type.equalsIgnoreCase("datetime") || type.equalsIgnoreCase("date")){
		type = "String";
	}
	if(type.equalsIgnoreCase("binary")){
		type = "byte";
	}
	if(type.equalsIgnoreCase("tinyint")){
		type = "byte";
	}
	return type;
}

调用该方法

	public static void main(String[] asgr){
     		creationPoClass("borrowing","src//com//wlx//po");//参数一是数据库中的表名,参数二是生成Po类的目标路径
	}
<think>好的,我现在需要处理用户关于Oracle EBS OAF框架开发和配置的问题。首先,用户提到了EBS-OAF相关的技术资料或解决方案,所以我要先确定OAF在Oracle EBS中的位置和作用。根据引用[2],Oracle Applications Framework (OAF)是Oracle E-Business Suite技术层的一部分,属于Applications Technology Layer。这说明OAF是用于开发用户界面的框架,可能与Web应用有关。 接下来,用户需要开发或配置的相关资料。根据引用[1],Oracle ADF是另一个UI框架,但用户明确提到OAF,所以可能需要区分两者。不过引用[1]提到ADF可以和EBS集成,但用户的问题是关于OAF的,所以重点应放在OAF上。 然后,我需要整理OAF开发的关键点。根据引用[2],OAF是基于Java的框架,使用MVC模式,支持声明式开发,可能涉及XML定义和UI组件。此外,OAF的配置可能涉及安全性、配置文件选项等,这些属于FND模块的内容,如责任、数据组和并发处理。 用户可能需要具体的开发步骤,比如环境搭建、MVC结构、页面定制等。开发工具方面,Oracle JDeveloper是主要的IDE,但OAF可能也有特定的插件或设置。另外,部署和调试流程也是关键,比如如何将开发的应用部署到EBS环境中,如何调试和优化性能。 在配置方面,需要涉及安全配置,比如职责的分配,以及个性化设置,允许用户调整页面布局。同时,集成其他模块如Workflow或XML Publisher可能也是用户关心的点,比如如何在OAF页面中调用工作流或生成报表。 测试和优化也是重要的部分,用户可能需要知道如何进行单元测试、性能调优,比如使用AD工具中的性能监控功能。此外,问题排查和日志分析,比如使用FND日志来跟踪问题。 最后,根据用户的需求,生成相关的问题,比如OAF与ADF的区别,如何扩展OAF功能,或者如何处理安全性问题。需要确保回答结构清晰,分点说明,并正确引用提供的资料,尽管引用内容中关于OAF的具体细节有限,但可以结合一般知识和引用中的框架结构进行合理推断。</think>### Oracle EBS OAF框架开发与配置详解 #### 一、OAF框架基础 Oracle Applications Framework (OAF) 是Oracle E-Business Suite的核心技术层组件,基于Java和MVC架构,支持声明式开发模式[^2]。其核心特点包括: 1. **MVC分层**: - **模型层**:通过$EO$(Entity Object)封装业务逻辑 - **视图层**:$VO$(View Object)定义数据展示逻辑 - **控制器层**:$CO$(Controller)处理用户交互 2. **开发工具链**: - 主要使用Oracle JDeveloper + OA Extension插件 - 依赖XML元数据定义(如$PG$页面定义、$RN$区域定义) #### 二、开发环境搭建步骤 ```sql -- 示例:注册自定义OAF页面的数据库操作 BEGIN fnd_function.INSERT_FUNCTION( function_name => 'XX_CUSTOM_PAGE', application_id => 123, form_id => NULL, parameters => 'page=XXCUSTPG&functionType=SSWA' ); END; ``` #### 三、典型开发流程 1. **页面定制**: - 通过扩展标准页面实现字段级修改 - 示例:添加自定义字段到PO审批页面 ```xml <oa:messageTextInput prompt="自定义备注" dataSource="XXCustNote" viewUsage="PurchaseOrderRN"/> ``` 2. **业务逻辑扩展**: - 使用$CO$控制器重写`processRequest()`方法 ```java public void processRequest(OAPageContext pageContext, OAWebBean webBean) { super.processRequest(pageContext, webBean); OAApplicationModule am = pageContext.getApplicationModule(webBean); OAViewObject vo = am.findViewObject("SupplierVO"); vo.setWhereClause("STATUS = 'APPROVED'"); } ``` #### 四、关键配置项 1. **安全配置**: - 通过`FND_FUNCTION`表注册页面功能 - 配置职责菜单层级结构 2. **个性化设置**: ```sql UPDATE fnd_personalizations SET enabled_flag = 'Y' WHERE function_name = 'XX_CUSTOM_FUNC'; ``` #### 五、调试与部署 1. **诊断工具**: - `FND: Debug Log Enabled`配置文件设置 - 使用`OA_DEBUG`包输出运行时日志 2. **部署流程**: ```bash # 打包JAR文件示例 ojdeploy -buildfile $JDEV_HOME/jdev/bin/ojdeploy-build.xml ``` #### 六、集成扩展 与Oracle Workflow集成示例: ```java WFEngineAPI.startProcess(itemType, itemKey, processName); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值