忙里偷闲挪出了点时间看看能不能弄个Etmvc自动生成代码工具,首先最烦的是AR部分,表也多,字段也多,码起来完全靠体力.
首先是要遍历数据库中的表咯,当然要连接数据库,我们就不必再创造数据库连接了,Etmvc-AR中已经有咯哦,
仔细看看代码可以用上 ConnectionHolder 这个类,在初始化时随便给个类就行了.例如
ConnectionHolder connectionHolder = new ConnectionHolder(ApplicationsController.class);
可以这样
Connection conn = connectionHolder.getConnection();
得到数据库连接对象,至此获取数据库表列表代码如下
public JspView index() throws DataAccessException, SQLException{
JspView view = new JspView();
ConnectionHolder connectionHolder = new ConnectionHolder(MyUser.class);
Connection conn = connectionHolder.getConnection();
DatabaseMetaData dbmd = conn.getMetaData();
String[] types = { "TABLE" };
ResultSet resultSet = dbmd.getTables(null, null, "%", types);
view.setAttribute("tablelist", resultSet);
return view;
}
视图文件如下
<%@ page
import="java.sql.ResultSet"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="CreateAR" method="post" name="form1" >
<table>
<tr>
<td>数据表</td>
<td>
<select id="tableName" name="tableName">
<%
ResultSet resultSet = (ResultSet)request.getAttribute("tablelist") ;
while (resultSet.next()) {
String tableName = resultSet.getString(3);
%>
<option value="<%=tableName %>"><%=tableName%></option>
<%}%>
</select>
</td>
<td> <input type="submit" value="确定" > </td>
</tr>
</table>
</form>
</body>
</html>
接下来就是要遍历指定表的字段了,并生成相应的模板
遍历字段的方法
public JspView CreateAR() throws SQLException, DataAccessException{
String table = request.getParameter("tableName");
String sql = "select * from "+ table;
ResultSetMetaData rsmd = null;
ConnectionHolder connectionHolder = new ConnectionHolder(ApplicationsController.class);
try{
Connection conn = connectionHolder.getConnection();
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
rsmd = rs.getMetaData();
}
finally{
connectionHolder.close();
}
JspView view = new JspView();
view.setAttribute("tables", table);
view.setAttribute("tableinfo", rsmd);
return view;
}
用jsp来作为模板,根据自身要求修改下.(还需要调整的)
<%@ page import="java.sql.ResultSetMetaData" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
ResultSetMetaData rsmd = (ResultSetMetaData)request.getAttribute("tableinfo") ;
String table = (String)request.getParameter("tableName") ;
%>
<pre>
/* ***********************************************
* author : Anyhome
* email : ayhome@gmail.com
* function:
* @date 2009-10-30
* history: created by Anyhome
* ***********************************************/
package org.anyhome.models;
import com.et.ar.ActiveRecordBase;
import com.et.ar.annotations.Column;
import com.et.ar.annotations.Id;
import com.et.ar.annotations.Table;
@Table(name="<%=table%>")
public class <%=table%> extends ActiveRecordBase {
<%
for(int i=1;i<=rsmd.getColumnCount();i++)
{
String s = rsmd.getColumnTypeName(i);
String sid = "Column";
if (s.trim().equalsIgnoreCase("int"))
s = "Integer";
else if(s.trim().equalsIgnoreCase("int identity"))
{
s = "Integer";
sid = "Id";
}
else
s = "String";
String outs = "@"+sid+" private " + s + " "
+rsmd.getColumnName(i);
%>
<%=outs %>
<%
}
%>
<%
for(int i=1;i<=rsmd.getColumnCount();i++)
{
String s = rsmd.getColumnTypeName(i);
String sid = "Column";
if (s.trim().equalsIgnoreCase("int"))
s = "Integer";
else if(s.trim().equalsIgnoreCase("int identity"))
{
s = "Integer";
sid = "Id";
}
else
s = "String";
%>
public void set<%=rsmd.getColumnName(i)%>(<%=s %> <%=rsmd.getColumnName(i).replaceFirst(String.valueOf(rsmd.getColumnName(i).charAt(0)), String.valueOf(rsmd.getColumnName(i).charAt(0)).toLowerCase()) %>) {
<%=rsmd.getColumnName(i)%> = <%=rsmd.getColumnName(i).replaceFirst(String.valueOf(rsmd.getColumnName(i).charAt(0)), String.valueOf(rsmd.getColumnName(i).charAt(0)).toLowerCase()) %>;
}
public <%=s %> get<%=rsmd.getColumnName(i)%>() {
return <%=rsmd.getColumnName(i)%>;
}
<%
}
%>
}
</pre>
</body>
</html>
呵呵 很简单的吧 不过目前我只应用于我的项目,所以只知道mssql是通过了
分享到:
- 2009-11-14 12:09
- 浏览 1977
- 评论(0)
- 论坛回复 / 浏览 (0 / 2471)
- 查看更多
相关推荐
`et-mvc-1.0.1.jar`和`et-ar-1.0.1.jar`是etmvc框架的核心库文件。前者可能包含了框架的主要实现,包括控制器处理、模型绑定、视图渲染等关键组件。后者可能包含了辅助库或者框架的特定扩展,比如数据库访问支持或者...
VDE-AR-4105:2018中文翻译《与低压配电网连接的发电机 - 与低压配电网连接和并联运行的技术要求》。 《VDE-AR-N4105:2018》是德国的一项重要标准,该标准规定了与低压配电网络连接的发电机的技术要求。 VDE-AR-N ...
### VDE-AR-N4105:2018 英文版——德国V2G并网标准 #### 概述 《VDE-AR-N4105:2018》是德国的一项重要标准,该标准规定了与低压配电网络连接的发电机的技术要求。这份标准适用于那些连接到低压配电网络的发电机,并...
【标题】"breed-ar9344-ar8327n-r1163_迈普AR9344固件_ar9344固件大全_stiff54o_wdr431" 提供的信息是关于一个特定路由器固件的更新,这个固件适用于迈普(MAP)品牌的一款基于AR9344芯片组的路由器,并且它兼容AR...
aframe-ar-nft.js
【B-Link BL-LW05-AR5驱动】是一款专为B-Link BL-LW05-AR5无线网卡设计的驱动程序,对于确保无线网络设备的正常运行至关重要。无线网卡驱动是操作系统与硬件设备之间的桥梁,它允许操作系统识别并控制硬件设备,使...
"高通AR7240-ar9344-ar9341等不死BREED合集"是一个专门针对高通芯片的固件集合,它包含了多种型号的处理器,如AR7240、AR9341和AR9344等。这些处理器广泛应用于无线路由器、接入点和其他物联网设备。 AR7240是一款...
bllw05ar5驱动适用于B-Link BL-LW05-AR5型号的无线网卡,电脑系统支持WinXP/Vista/Win7/Win8/Win8.1,购买了此款必联网卡的用户赶紧下载这个驱动吧。bllw05ar5参数网络协议: CSMA/CA with ACK总线接口: USB传输...
VDE-AR-E 2510-50 _2017 英文 带锂电池的固定式电池储能系统安全要求 pdf.pdf
UnitySetup-Vuforia-AR-Support-for-Editor-2018.4 高通ar sdk
"德标VDE-AR-4105自动化测试使用说明" VDE-AR-4105自动化测试使用说明是广州致远电子股份有限公司发布的一份用户手册,旨在指导用户使用VDE-AR-4105自动化测试设备进行各种测试。该手册涵盖了VDE-AR-4105标准的简介...
openwrt-ar71xx-generic-tl-wr720n-v3-squashfs-factory.bin
openwrt-ar71xx-generic-tl-wr720n-v4-squashfs-sysupgrade.bin
breed-ar9331-wr710n_wr720n-r1163.bin
lede-17.01.5-ar71xx-generic-tl-wr720n-v3-squashfs-factory
lede-17.01.7-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin
bl lw06 ar 驱动分享给购买了B-Link BL-LW06-AR无线网卡的用户,它支持一键切换AP模式,也就是WIFI发射共享上网,适合用于手机WIFI发射共享上网,如果电脑无法适配,需要下载驱动后再次调试。参数介绍网络协议: ...
openwrt-ar71xx-generic-tl-wr740n-v4
openwrt-ar71xx-generic-tl-wr720n-v3-squashfs-sysupgrade.bin
openWrt.LEDE.17.01.7.TP-Link.TL-WR703N刷机包 lede-17.01.7-ar71xx-generic-tl-wr703n-v1-squashfs-factory