- 浏览: 82036 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
yhq1212:
http://wibiline.iteye.com/blog/ ...
jacob word -
yhq1212:
http://www.oschina.net/p/hudson ...
JAVA WEB 程序自动更新思路, -
yhq1212:
持续集成引擎 Hudson
JAVA WEB 程序自动更新思路, -
11lingxian:
已经有这样的产品了:bamboo
JAVA WEB 程序自动更新思路, -
Mr.Cheney:
实现了请分享一下哦
JAVA WEB 程序自动更新思路,
核心.
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import com.framework.dao.SqlDao;
import com.framework.logic.procurement.mapping.DynaTable;
import com.framework.util.BeanUtil;
import com.framework.util.StringUtil;
public class DynaTableUtil {
public SqlDao sqlDao;
public static DynaTableUtil tableUtil = null;
public static DynaTableUtil getInstance() {// lazy initialization
if (tableUtil == null) {
tableUtil = new DynaTableUtil();
}
return tableUtil;
}
public Object getDynaTableRecord(DynaTable table) throws Exception {
if (!table.getQueryForeignkey()) {// 查询主键
// 获取MAP ,将MAP转为实体对象
Map map = null;
map = (Map) sqlDao.getRecord("procurement.getDynamicTableByKey", table);
if (map != null) {
Object ob = createBean(table.getTableBeanClass(), map);
return ob;
} else {
return map;
}
} else {// 查询表外键,
List listMap = new ArrayList();
List list = sqlDao.getRecordList("procurement.getDynamicTableByForeginKey", table);
// 转换为javaBean
for (Object ob : list) {
Object temp = createBean(table.getTableBeanClass(), (Map) (ob));
listMap.add(ob);
}
return listMap;
}
}
public void insertRecord(DynaTable table) throws Exception {
// 创建INSERT_SQL
table.setSql(this.createInsertSql(table));
System.out.println(table.getSql());
sqlDao.insertRecord("procurement.insertDynamicTable", table);
}
public String createInsertSql(DynaTable table) throws InstantiationException, IllegalAccessException {
StringBuffer sb = new StringBuffer();
sb.append("insert into " + table.getTableName() + " ");
// 获取对象,判断属性值是否为NULL
Object objInstance = table.getTableBean();
BeanWrapper beanWrapper = new BeanWrapperImpl(objInstance);
String name;
String type;
Object value;
StringBuffer columnName = new StringBuffer();
StringBuffer columnValue = new StringBuffer();
// 循环属性说明
for (PropertyDescriptor descriptor : beanWrapper.getPropertyDescriptors()) {
name = descriptor.getName();
type = descriptor.getPropertyType().getName();
if (!beanWrapper.isWritableProperty(name))
continue;
columnName.append(name + ",");
try {
Object tempValue = descriptor.getReadMethod().invoke(objInstance, null);
tempValue = BeanUtil.convertType(type, String.valueOf(tempValue));
if (tempValue != "null" && tempValue != null) {
tempValue = "'" + tempValue + "'";
}
// 判断是否为主键
if (name.toUpperCase().equals(table.getTableKey().toUpperCase())) {
// 生成主键VALUE
// 保存至于table_key_value
table.setKeyValue(StringUtil.getPrimaryKey());
tempValue = "'" + table.getKeyValue() + "'";
}
columnValue.append(tempValue + ",");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
sb.append("(" + columnName.substring(0, columnName.length() - 1) + ")");
sb.append("values(" + columnValue.substring(0, columnValue.length() - 1) + ")");
return sb.toString();
}
public static Object createBean(Class beanClass, Map map) throws InstantiationException, IllegalAccessException {
Object objInstance = beanClass.newInstance();
BeanWrapper beanWrapper = new BeanWrapperImpl(objInstance);
String name;
String type;
Object value;
// 循环属性说明
for (PropertyDescriptor descriptor : beanWrapper.getPropertyDescriptors()) {
name = descriptor.getName();
type = descriptor.getPropertyType().getName();
if (!beanWrapper.isWritableProperty(name))
continue;
value = BeanUtil.convertType(type, String.valueOf(map.get(name)));// 从MAP中查询参数,并转换为相应的类型
if (value == null || value == "null")
continue;
beanWrapper.setPropertyValue(name, value);
}
return objInstance;
}
}
//动态TABLE需要的参数
public class DynaTable {
private Class tableBeanClass;// bean Class对象
private String tableName;// biaoming
private String tableKey;// 主键
private String keyValue;// VALUE
private String javaBennQualified;// 限定名,存JAVABEAN包下面
private String sql;
private Object tableBean;// bean对象
private String foreignkey, foreignkeyValue;// 设置外键,以及外键的值
private Boolean queryForeignkey =false;// 是否查询外键,注,设置为FALSE后,查询返回值为BEAN_LIST,否则为JAVABEAN
public String getForeignkey() {
return foreignkey;
}
public void setForeignkey(String foreignkey) {
this.foreignkey = foreignkey;
}
public String getForeignkeyValue() {
return foreignkeyValue;
}
public void setForeignkeyValue(String foreignkeyValue) {
this.foreignkeyValue = foreignkeyValue;
}
public Boolean getQueryForeignkey() {
return queryForeignkey;
}
public void setQueryForeignkey(Boolean queryForeignkey) {
this.queryForeignkey = queryForeignkey;
}
public Object getTableBean() {
return tableBean;
}
public void setTableBean(Object tableBean) {
this.tableBean = tableBean;
}
public void setTableBeanClass(Class tableBeanClass) {
this.tableBeanClass = tableBeanClass;
}
public String getSql() {
return sql;
}
public void setSql(String sql) {
this.sql = sql;
}
public String getJavaBennQualified() {
return javaBennQualified;
}
public void setJavaBennQualified(String javaBennQualified) {
this.javaBennQualified = javaBennQualified;
try {
this.tableBeanClass = Class.forName(javaBennQualified);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public String getTableName() {
return tableName;
}
public Class getTableBeanClass() {
return tableBeanClass;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTableKey() {
return tableKey;
}
public void setTableKey(String tableKey) {
this.tableKey = tableKey;
}
public String getKeyValue() {
return keyValue;
}
public void setKeyValue(String keyValue) {
this.keyValue = keyValue;
}
}
//添加
//处理方法,要处理的TABLE
public Map<String, DynaTable> getTableNameMap() {
this.tableNameMap = new HashMap<String, DynaTable>();
// 初始化要查询对象
DynaTable a = new DynaTable();
// 设置返回的实例对象
a.setJavaBennQualified("com.framework.logic.procurement.mapping.Procurement");
// 查询的表
a.setTableName("Procurement");
a.setTableKey("Procurementid");// 主键
a.setKeyValue(request.getParameter("procurementid"));
this.tableNameMap.put("Procurement", a);
}
//保存
public void procurementSave() throws Exception {
this.model = new HashMap();
this.viewName = "message.jsp";
String message = "";
String beanName = request.getParameter("beanName");
try {
// 获取TABLE对象
DynaTable table = this.tableNameMap.get(beanName);
// 基本参数
table.setTableBean((BeanUtil.createBean(table.getTableBeanClass(), request)));
// FILE文件设置值
// 插入数据库
DynaTableUtil.getInstance().insertRecord(table);
System.out.println(table.getKeyValue());
message="保存成功!<a href='procurementList.procurement' >返回</a>";
} catch (Exception e) {
e.printStackTrace();
message = "获取页面参数出现异常,异常原因为:" + e.getMessage();
}
this.model.put("message", message);
System.out.println(message);
this.modelAndView = new ModelAndView(this.viewName, this.model);
}
//查看
public void procurementMod() throws Exception {
this.model = new HashMap();
this.viewName = "procurement/procurementMod.jsp";
// 查询
DynaTableUtil tableUtil = DynaTableUtil.getInstance();
tableUtil.sqlDao = sqlDao;
getTableNameMap();
Iterator it = this.tableNameMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Entry) it.next();
DynaTable dt = (DynaTable) entry.getValue();
Object ob = tableUtil.getDynaTableRecord(dt);
this.model.put(dt.getTableName().toLowerCase(), ob);
}
this.modelAndView = new ModelAndView(this.viewName, this.model);
}
sqlmap
<insert id="insertDynamicTable" parameterClass="com.framework.logic.procurement.mapping.DynaTable" >
<![CDATA[
$sql$
]]>
</insert>
<!-- 此处增加remapResults="true"指每次查询都更新列名 -->
<select id="getDynamicTableByKey" parameterClass="com.framework.logic.procurement.mapping.DynaTable" resultClass="java.util.HashMap" remapResults="true">
<![CDATA[
select * from $tableName$ where $tableKey$ =#keyValue# limit 1
]]>
</select>
<!-- 此处增加remapResults="true"指每次查询都更新列名 -->
<select id="getDynamicTableByForeginKey" parameterClass="com.framework.logic.procurement.mapping.DynaTable" resultClass="java.util.HashMap" remapResults="true">
<![CDATA[
select * from $tableName$ where $foreignkey$ =#foreignkeyValue#
]]>
</select>
发表评论
-
spring boot集成activi工作流问题
2021-07-13 16:00 1384在 @SpringBootApplication(exclu ... -
SpringBoot 读取 jar包下resource中整个文件夹下内容,生成临时目录
2020-03-06 09:22 1564static { try { copytR ... -
java webservice
2017-03-17 10:13 1062现在已经是中度脑残患者了,记性什么的都见了鬼,更大的原因还是 ... -
复选框提交回选
2015-10-15 23:23 649越来越健忘 1,复选框提交回选。 $(d ... -
STRUTS2 上传
2015-08-21 20:56 606得空上代码。 -
Nginx Tomcat Memcached SESSION 集群配置实践(Sticky Session)
2015-08-19 15:54 12811,附件1中为WIDNOW版本的 Memcached ... -
jacob word
2015-03-13 19:45 976Jacob操作office文档(Word,PPT,Excel ... -
tomcat右键Add and Remove
2014-11-06 18:41 771SET org.eclipse.wst.common ... -
动态添加行等 取值
2013-08-22 16:50 689... -
ireport 报表 中间出现空白
2013-04-22 14:24 5244现象,ireport 嵌套子报表自动分页后中间出现空白; ... -
java bean --table 查询
2013-02-21 17:01 707动态TABLE查询 -
ie6 和ie7版本带来的一个奇怪的中文乱码问题(长度为奇数时最后一个字符会出现乱码)(转)
2012-09-17 12:13 1144ie6 和ie7版本带来的一个奇怪的中文乱码问题(长度为奇数时 ... -
WindowBuilder
2012-06-03 10:52 0WindowBuilder 博客分类: Ja ... -
subversion 1.7 整合apache 2.2
2012-05-09 14:20 890博客分类: java 1、apache官 ... -
apache ,tomcat负载均衡和集群配置
2012-04-24 11:32 827基于apache的tomcat负载均衡和集群配置 1】 下载 ... -
eclipse/MyEclipse 插件
2012-04-19 11:24 25381.Aptana Studio 描述:javascript, ... -
ubuntu 11.10 java 环境
2012-03-10 17:16 1262ubuntu 11.10 java 安装 1,安装JDK( ... -
java 素 数
2012-02-14 11:13 803static final int SUSHU = 200; ... -
lodop 打印相关资料
2011-12-28 17:31 1136http://mtsoftware.v053.gokao.ne ... -
HttpClient]HTTPClient PostMethod 中文乱码问题解决方案(2种)
2011-12-11 11:48 5653HTTPClient PostMethod 中文乱码问题解决方 ...
相关推荐
"Java反射 JavaBean 对象自动生成插入、更新、删除、查询sql语句操作" Java反射JavaBean对象自动生成插入、更新、删除、查询sql语句操作是指通过Java反射机制,依据提供的表名、POJO类型、数据对象自动生成sql语句...
Java反射 JavaBean 对象自动生成插入、更新、删除、查询 SQL 语句操作 Java 反射是 Java 语言中一个强大的功能,它允许开发者在运行时检查和修改类、方法、字段的行为。Java 反射机制可以动态地创建对象、调用方法...
# 本项目主要介绍 1. itextpdf(CreatePdf) 不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类...复杂word动态生成上功能很强大
首先,Java反射机制允许我们在运行时检查类、接口、字段和方法的信息,甚至可以动态调用方法和修改字段值。在数据库操作中,反射可以帮助我们根据字符串形式的SQL语句来动态执行相应的方法,无需预先编写大量硬编码...
1. **性能优势**:相比于使用Java反射机制,CGLib生成的代理对象在性能上更优,因为它避免了反射带来的开销。 2. **无需接口**:CGLib可以对没有实现接口的类进行代理,这是Java动态代理(JDK Proxy)无法做到的。 3...
类似的,MyBatis的Mapper框架也允许开发者自定义XML或注解来生成SQL查询和对应的Java方法。 4. **注解处理器**: Java的注解处理器(Annotation Processor)可以在编译时读取自定义注解并生成源代码。比如,...
动态修改查询属性值是反射的另一个关键应用。我们可以使用`getDeclaredField()`或`getField()`方法获取类的字段,然后调用`setAccessible(true)`允许访问私有字段,最后通过`set()`方法设置字段的值。同样,`get()`...
本文将深入探讨如何使用反射机制来操作SQLite数据库,包括插入数据和查询数据,以实现更加灵活和高效的数据库操作。 首先,我们要了解反射的概念。在Java中,反射是一种强大的工具,它允许我们在运行时检查类、接口...
5. **代码生成集成**:与IDE(集成开发环境)集成,可以在编写Java代码时无缝插入生成的SQL,简化开发流程。 6. **性能优化**:分析查询性能,提供优化建议,如添加索引、避免全表扫描等。 7. **安全防护**:防止...
动态代码生成常用于实现AOP框架,如Spring AOP,它能在运行时插入切面逻辑。 6. **性能优化**:在某些情况下,动态代码生成能用于提高程序性能。例如,JIT(Just-In-Time)编译器会分析运行时的热点代码,并将其...
这个库可能使用了反射、注解或其他高级技术来动态生成API接口和实现。 总之,这个项目利用Java的灵活性和强大的库生态系统,实现了从数据库到RESTful API的快速映射,大大提升了开发效率,尤其适合那些需要快速搭建...
总的来说,仿照Hibernate动态生成SQL保存对象是一个涉及反射、注解解析、SQL构造等多个技术领域的综合实践。通过这样的方式,你可以创建一个更加灵活且适应性强的ORM框架,满足特定项目的需求。然而,需要注意的是,...
2. **使用Java反射API**:Java反射API允许我们在运行时动态地获取类的信息并操作类的对象。我们可以根据需求构建一个基础的JavaBean类,然后通过反射动态地添加属性并生成getter和setter方法。 3. **使用ASM、Byte...
这种技术极大地提高了代码的灵活性和可维护性,尤其是在处理动态查询或复杂业务逻辑时。 首先,我们来看"反射"的概念。反射是Java、Python、C#等面向对象编程语言中的一个特性,它允许程序在运行时检查自身的结构,...
Java反射机制是Java语言的一个重要特性,它使得Java在运行时具有了动态性,能够获取和操作类的信息,包括类的修饰符、超类、实现的接口、字段和方法等。这种机制允许程序在运行时动态加载未知名称的类,进行字段的...
在Java编程中,反射和动态代理是两个非常重要的高级特性,它们为程序提供了更大的灵活性和扩展性。这篇学习笔记主要关注动态代理部分,虽然没有提供具体的压缩包文件内容,但根据标题和描述,我们可以深入探讨这两个...
这个过程展示了如何使用Java结合反射来动态构建XML,适用于数据库查询结果转换为XML格式的场景。需要注意的是,这种方式在处理大量数据时可能效率较低,因为它涉及到多次字符串连接操作,可能会造成内存开销。在生产...
Java中的CGLib与反射是两种常用的动态代理技术,它们在实现面向切面编程(AOP)时发挥着重要作用。本文将深入探讨这两种技术,并通过一个简单的AOP demo来阐述它们的使用方法。 首先,让我们了解什么是CGLib。CGLib...
2. **反射机制的应用**:利用Java反射API获取Java Bean的所有字段及其值,动态生成SQL语句。 3. **查询条件封装**:通过`ConditionHolder`类封装查询条件,便于传递和管理。 4. **查询结果的处理**:查询方法返回的...