当前位置: 代码迷 >> SQL >> 透过java反射实现对javabean生成各种sql语句
  详细解决方案

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

热度:93   发布时间:2016-05-05 12:28:52.0
通过java反射实现对javabean生成各种sql语句

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

Java代码:  
  1. package com.pdt.util;  
  2.   
  3. import java.lang.reflect.Field;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7.   
  8. public class BeanUtil {  
  9.    /** 原文地址:http://www.software8.co/wzjs/java/2875.html
  10.      * @param args 
  11.      */  
  12.     public static void main(String[] args) {  
  13.           
  14.         System.out.println(getBeanFilesList("com.pdt.bean.Dictionary"));  
  15.         System.out.println(genCreateTableSql("com.pdt.bean.Dictionary"));   
  16.         System.out.println(genInsertSql("com.pdt.bean.Dictionary"));  
  17.     }  
  18.       
  19.     public static String getBeanName(String bean){  
  20.         try {  
  21.             Class clz = Class.forName(bean);  
  22.             String clzStr = clz.toString();  
  23.             //得到类名  
  24.             String beanName = clzStr.substring(clzStr.lastIndexOf(".")+1).toLowerCase();  
  25.             return beanName;  
  26.         } catch (ClassNotFoundException e) {  
  27.             e.printStackTrace();  
  28.             return "";  
  29.         }  
  30.     }  
  31.       
  32.     public static List<String> getBeanPropertyList(String bean){  
  33.         try {  
  34.             Class clz = Class.forName(bean);  
  35.             Field[] strs = clz.getDeclaredFields();  
  36.             List<String> propertyList = new ArrayList<String>();  
  37.             for (int i = 0; i < strs.length; i++) {  
  38.                 String protype = strs[i].getType().toString();  
  39.                 propertyList.add(protype.substring(protype.lastIndexOf(".")+1)+"`"+strs[i].getName());  
  40.             }  
  41.             return propertyList;  
  42.         } catch (ClassNotFoundException e) {  
  43.             e.printStackTrace();  
  44.             return null;  
  45.         }  
  46.     }  
  47.       
  48.     public static String getBeanFilesList(String bean){  
  49.         try {  
  50.             Class clz = Class.forName(bean);  
  51.             Field[] strs = clz.getDeclaredFields();  
  52.             StringBuffer sb = new StringBuffer();  
  53.             for (int i = 0; i < strs.length; i++) {  
  54.                 String protype = strs[i].getType().toString();  
  55.                 if (!strs[i].getName().equals("tableName")&&!strs[i].getType().equals("List")) {  
  56.                    sb.append(strs[i].getName()+",");  
  57.                 }  
  58.             }  
  59.             sb.deleteCharAt(sb.toString().lastIndexOf(","));  
  60.             return sb.toString();  
  61.         } catch (ClassNotFoundException e) {  
  62.             e.printStackTrace();  
  63.             return null;  
  64.         }  
  65.     }  
  66.       
  67.     /** 
  68.      * 生成建表語句 
  69.      * @param bean 
  70.      * @return 
  71.      */  
  72.     public static String genCreateTableSql(String bean){  
  73.         List<String> beanPropertyList =  getBeanPropertyList(bean);  
  74.         StringBuffer sb = new StringBuffer("create table wnk_pdt_"+getBeanName(bean)+"(\n");  
  75.         for (String string : beanPropertyList) {  
  76.             String[] propertys = string.split("`");  
  77.             if (!propertys[1].equals("tableName")&&!propertys[1].equals("param")&&!propertys[0].equals("List")) {  
  78.                 if (propertys[1].equals("id")) {  
  79.                     sb.append("   id bigint primary key auto_increment,\n");  
  80.                 } else {  
  81.                     if (propertys[0].equals("int")) {  
  82.                         sb.append("   " + propertys[1] + " int default 0 comment '',\n");  
  83.                     } else if (propertys[0].equals("String")) {  
  84.                         sb.append("   " + propertys[1] + " varchar(2000) default '' comment '',\n");  
  85.                     } else if (propertys[0].equals("double")) {  
  86.                         sb.append("   " + propertys[1] + " double(10,2) default 0.0 comment '',\n");  
  87.                     } else if (propertys[0].equals("Date")) {  
  88.                         sb.append("   " + propertys[1] + " datetime comment '',\n");  
  89.                     }  
  90.                 }  
  91.             }  
  92.         }  
  93.         sb.append(")");  
  94.         sb.deleteCharAt(sb.lastIndexOf(","));  
  95.         return sb.toString();  
  96.     }  
  97.       
  98.     /** 
  99.      * 生成查询语句 
  100.      * @param bean 
  101.      * @return 
  102.      */  
  103.     public static String genSelectAllSql(String bean){  
  104.         String filesList =  getBeanFilesList(bean);  
  105.         return "select \n "+filesList+" \n from \n wnk_pdt_"+getBeanName(bean)+"";  
  106.     }  
  107.       
  108.     /** 
  109.      * 生成插入语句 
  110.      * @param bean 
  111.      * @return 
  112.      */  
  113.     public static String genInsertSql(String bean){  
  114.         String filesList =  getBeanFilesList(bean);  
  115.         int fl = DataUtil.getCountSonStr(filesList,",")+1;  
  116.         String wenhao = "";  
  117.         for (int i = 0; i < fl; i++) {  
  118.             if(i==fl-1){  
  119.                 wenhao = wenhao+"?";  
  120.             }else{  
  121.                 wenhao = wenhao+"?,";  
  122.             }  
  123.         }  
  124.         return "insert into wnk_pdt_"+getBeanName(bean)+"("+filesList+") values("+wenhao+")";  
  125.     }  
  126. }  
  相关解决方案