`

通过java反射实现对javabean生成各种sql语句

阅读更多

通过java反射实现对javabean生成各种sql语句,有请大家评论,更改

package com.pdt.util;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;


public class BeanUtil {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		System.out.println(getBeanFilesList("com.pdt.bean.Dictionary"));
		
		System.out.println(genCreateTableSql("com.pdt.bean.Dictionary"));
		
		System.out.println(genInsertSql("com.pdt.bean.Dictionary"));
	}
	
	public static String getBeanName(String bean){
		try {
			Class clz = Class.forName(bean);
			String clzStr = clz.toString();
			//得到类名
			String beanName = clzStr.substring(clzStr.lastIndexOf(".")+1).toLowerCase();
			return beanName;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return "";
		}
	}
	
	public static List<String> getBeanPropertyList(String bean){
		try {
			Class clz = Class.forName(bean);
			Field[] strs = clz.getDeclaredFields();
			List<String> propertyList = new ArrayList<String>();
			for (int i = 0; i < strs.length; i++) {
				String protype = strs[i].getType().toString();
				propertyList.add(protype.substring(protype.lastIndexOf(".")+1)+"`"+strs[i].getName());
			}
			return propertyList;
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	public static String getBeanFilesList(String bean){
		try {
			Class clz = Class.forName(bean);
			Field[] strs = clz.getDeclaredFields();
			StringBuffer sb = new StringBuffer();
			for (int i = 0; i < strs.length; i++) {
				String protype = strs[i].getType().toString();
				if (!strs[i].getName().equals("tableName")&&!strs[i].getType().equals("List")) {
				   sb.append(strs[i].getName()+",");
				}
			}
			sb.deleteCharAt(sb.toString().lastIndexOf(","));
			return sb.toString();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 生成建表語句
	 * @param bean
	 * @return
	 */
	public static String genCreateTableSql(String bean){
		List<String> beanPropertyList =  getBeanPropertyList(bean);
		StringBuffer sb = new StringBuffer("create table wnk_pdt_"+getBeanName(bean)+"(\n");
		for (String string : beanPropertyList) {
			String[] propertys = string.split("`");
			if (!propertys[1].equals("tableName")&&!propertys[1].equals("param")&&!propertys[0].equals("List")) {
				if (propertys[1].equals("id")) {
					sb.append("   id bigint primary key auto_increment,\n");
				} else {
					if (propertys[0].equals("int")) {
						sb.append("   " + propertys[1] + " int default 0 comment '',\n");
					} else if (propertys[0].equals("String")) {
						sb.append("   " + propertys[1] + " varchar(2000) default '' comment '',\n");
					} else if (propertys[0].equals("double")) {
						sb.append("   " + propertys[1] + " double(10,2) default 0.0 comment '',\n");
					} else if (propertys[0].equals("Date")) {
						sb.append("   " + propertys[1] + " datetime comment '',\n");
					}
				}
			}
		}
		sb.append(")");
		sb.deleteCharAt(sb.lastIndexOf(","));
		return sb.toString();
	}
	
	/**
	 * 生成查询语句
	 * @param bean
	 * @return
	 */
	public static String genSelectAllSql(String bean){
		String filesList =  getBeanFilesList(bean);
		return "select \n "+filesList+" \n from \n wnk_pdt_"+getBeanName(bean)+"";
	}
	
	/**
	 * 生成插入语句
	 * @param bean
	 * @return
	 */
	public static String genInsertSql(String bean){
		String filesList =  getBeanFilesList(bean);
		int fl = DataUtil.getCountSonStr(filesList,",")+1;
		String wenhao = "";
		for (int i = 0; i < fl; i++) {
			if(i==fl-1){
				wenhao = wenhao+"?";
			}else{
				wenhao = wenhao+"?,";
			}
		}
		return "insert into wnk_pdt_"+getBeanName(bean)+"("+filesList+") values("+wenhao+")";
	}
}

 

 

0
0
分享到:
评论
2 楼 乱在长安 2016-10-11  
好像没有看到建索引的语句,主键的话,只能为id,扩展性不好。我也写了一个生成工具。稍后放出。
1 楼 LinApex 2016-05-01  
不错,兼容多数据库,再进一步优化就更好了

相关推荐

    Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作.docx

    Java反射JavaBean对象自动生成插入、更新、删除、查询sql语句操作是指通过Java反射机制,依据提供的表名、POJO类型、数据对象自动生成sql语句的技术。这种技术具有很好的参考价值,对开发者有很大的帮助。 Java...

    Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作

    Java反射 JavaBean 对象自动生成插入、更新、删除、查询 SQL 语句操作 Java 反射是 Java 语言中一个强大的功能,它允许开发者在运行时检查和修改类、方法、字段的行为。Java 反射机制可以动态地创建对象、调用方法...

    根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第12版)

    于是一怒之下,自己动手丰衣足食,就自己用Swing写了一个通过数据库的表生成JavaBean的工具,支持MySQL、Oracle、SQLServce、PostgreSQL,完美支持JPA注解,可以同时生成Entity和DTO,可以自动去除表前缀,并支持...

    基于Annotation数据结构自动生成的研究与实现.pdf

    5. 数据库物理结构的SQL表现语言:这是指在数据库设计中,表结构和关系等逻辑概念最终通过SQL(Structured Query Language)语句体现,这些SQL语句定义了数据库的物理存储结构。 6. 数据库开发效率:这是衡量数据库...

    笔试Java3.doc

    10. 使用 Java 实现连接 Oracle 数据库:可以使用 JDBC 驱动程序来连接 Oracle 数据库,并使用 PrepardStatement 对象来执行 SQL 语句。 Java 反射机制和 Javadoc 11. Java 反射机制:Java 反射机制是指在 Java 中...

    一个实用的javabean

    从给定的文件信息来看,我们正在探讨的是一个与JavaBean相关的类,专门用于处理数据库操作,这在J2SE(Java 2 Standard Edition)环境下非常常见。下面将详细解析这个JavaBean的关键知识点: ### JavaBean简介 ...

    Java基础学习43.pdf

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。在Java基础学习中,理解并掌握反射是非常关键的一步,因为这不仅可以帮助你深入理解Java的内在机制,还能提升你在...

    基于Jsp+Servlet+JavaBean的会议管理系统.zip

    开发者可能使用SQL语句来执行查询、插入、更新和删除等操作。 6. **安全考虑**: 在实际开发中,需确保用户的登录和会话管理安全,例如使用HTTPS协议传输敏感数据,密码加密存储,防止SQL注入攻击等。 7. **权限...

    新闻发布系统Jsp+JavaBean+Oracle+Eclipse

    SQL语句将被用来创建数据表、执行查询、插入和更新数据。 4. **Eclipse**:Eclipse是一款强大的开源集成开发环境,支持多种编程语言,包括Java。在开发这个新闻发布系统时,Eclipse提供了一个统一的工作台,用于...

    mybatis源码

    6. **参数绑定**: MyBatis通过ParameterHandler将Java方法的参数转换为SQL语句的参数,支持传入基本类型、JavaBean、Map等。 7. **TypeHandler**: 类型处理器负责Java类型与数据库类型的转换,确保数据的正确存取。...

    Java软件开发实战 Java基础与案例开发详解 9-5 java程序国际化的实现 共9页.pdf

    15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋...

    Java通用范例开发金典源代码

    《Java通用范例开发金典源代码》是一个包含大量Java编程示例的资源集合,旨在帮助开发者深入理解和掌握Java编程语言的各种特性和应用场景。这个压缩包文件中的源代码覆盖了Java语言的基础到高级各个方面,是Java学习...

    博客管理系统(JSP+servlet+JavaBean+Mysql)

    JavaBean可以被Servlet通过反射机制调用,实现了业务逻辑与表现层的分离,提高了代码的可维护性和复用性。 4. MySQL数据库: MySQL是一种关系型数据库管理系统,广泛应用于Web应用程序中。在这个博客系统中,MySQL...

    Java软件开发实战 Java基础与案例开发详解 17-3 代码实现 共19页.pdf

    15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋...

    JSP实现学生成绩管理系统

    3. JavaBean规范:了解如何编写符合JavaBean规范的类,并通过Java反射机制进行实例化和调用。 4. JDBC:使用Java Database Connectivity API连接SQLServer2000,执行SQL语句。 5. 数据库设计:理解ER模型,设计合理...

    java大神进阶之路.pdf

    文中特别强调了数据结构和算法的重要性,以及Java语言的跨平台、面向对象特性,并对Java技术生态中的各种工具和框架进行了介绍。此外,还包括了JVM内存模型、多线程编程、IO流处理、XML解析、网络编程、数据库设计与...

    Java软件开发实战 Java基础与案例开发详解 2-7 java上机练习 共5页.pdf

    15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋...

    java基础案例与开发详解案例源码全

    15.2 使用Java反射机制414 15.2.1 获取类型信息414 15.2.2 创建对象417 15.2.3 调用方法419 15.2.4 访问成员变量的值421 15.2.5 操作数组422 15.3 反射与动态代理424 15.3.1 静态代理424 15.3.2 动态代理426 15.4 本...

    Java软件开发实战 Java基础与案例开发详解 3-10 java基础知识章节练习 共4页.pdf

    15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋...

Global site tag (gtag.js) - Google Analytics