posts - 165, comments - 198, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

下面 ( alt+shift+T ) 中都可以找到
1.改名 :  ( alt+shift+R )
2.类移动:( alt+shift+V )
3.方法上移父类,下移子类 (alt+shift+T) + U/D
4.方法接口化  (alt+shift+T) +T
5.部分代码提升为方法 alt+shift+M
6.局部变量提升为类变量 alt+shift+F

.............

***************************************************************

Ctrl+M:   工作区最大化/最小化  
  Alt+/:     智能提示  
  F3:           察看声明  
  Crtl+1:   修正错误  
   
  Shift+Alt+T:   重构  
  Shift+Alt+M:   提取函数  
  Shift+Alt+R:   重命名  
  Shift+Alt+C:   更改函数标记  
   
  Ctrl+Shitf+F:   格式化代码  

posted @ 2007-10-15 10:21 G_G 阅读(240) | 评论 (0)编辑 收藏

在WEB开发中
测试 在 C/S  而 实际运行 B/S 造成配置文件 在硬编码时总是改 。
但看 hibernate 的配置文件 确可以很好工作 ,没办法读源码
在框架中 发现 ConfigHelper类起到了作用 。
结合自己开发需求,写出了自己的 带查询文件功能类
扩展的主要部分在 findFile方法 这用了一下 简单的数据结构有兴趣的可以看看

 
测试:
文件skynet.xml
<?xml version="1.0" encoding="UTF-8"?>
<xml-body>
    
<man id='1'>
        
<name>刘凯毅</name>
        
<avg>24</avg>
    
</man>
    
<man id='2'>
        
<name>heha</name>
        
<avg>25</avg>
    
</man>
</xml-body>

测试类
package test.config;

import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.XMLDocumentContainer;

import junit.framework.TestCase;

public class SkynetConfigTest extends TestCase {

    
protected void setUp() throws Exception {
        
super.setUp();
    }
    
    
public void testConfigFile(){
        System.out.println(
                
//find file in System user.dir -> skynet.xml  
                SkynetConfig.getResourceAsFile(System.getProperty("user.dir") , 
                        
"skynet.xml").getPath()
        );
        System.out.println(
                
//find file in System java.class.path -> skynet.xml 
            SkynetConfig.getResourceAsFile(System.getProperty("java.class.path") , 
                    
"skynet.xml").getPath() 
        );
    }
    
public void testConfigURL(){
            JXPathContext jx 
= JXPathContext.newContext(new XMLDocumentContainer( 
                    
// in System user.dir,java.class.path find  url:skynet
                    SkynetConfig.getResourceAsURL("skynet.xml")   
                ));
            System.out.println( jx.getValue(
"//man[avg='24']/@id") );
            System.out.println( jx.getValue(
"//man[avg='24']/name") );
    }
    
    
public void testConfigStream(){
        System.out.println( SkynetConfig.getResourceAsStream(
"skynet.xml") );
    }
}


结果:
E:\src3\rlzy15\lmisWeb\WEB-INF\classes\test\config\skynet.xml
E:\src3\rlzy15\lmisWeb\WEB-INF\classes\test\config\skynet.xml
1
刘凯毅
java.io.FileInputStream@1551d7f


SkynetConfig 类
package test.config;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import java.net.URL;

import org.apache.commons.jxpath.JXPathContext;
import org.apache.commons.jxpath.XMLDocumentContainer;
import org.hibernate.util.ConfigHelper;

public class SkynetConfig {
    
    
public static final URL getResourceAsURL(final String path) {
        URL url 
= null;

        
// First, try to locate this resource through the current
        
// context classloader.
        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
        
if (contextClassLoader!=null) {
            url 
= contextClassLoader.getResource(path);
        }
        
if (url != null)
            
return url;

        
// Next, try to locate this resource through this class's classloader
        url = ConfigHelper.class.getClassLoader().getResource(path);
        
if (url != null)
            
return url;
        
        
// Next, try to locate this resource through the system classloader
        url = ClassLoader.getSystemClassLoader().getResource(path);
        
if(url !=null)
            
return url;
        
        File ff 
= getResourceAsFile(System.getProperty("user.dir") ,path);
        
if(ff==null)
            ff 
= getResourceAsFile(System.getProperty("java.class.path") , path);
        
try {
            url 
= new URL("file:/"+ff.getPath());
        } 
catch (Exception e) {e.printStackTrace();}
        
        
return url;
    }
    
    
public static InputStream getResourceAsStream(final String resource) {
        String stripped 
= resource.startsWith("/"? 
                resource.substring(
1) : resource;
        InputStream stream 
= null
        ClassLoader classLoader 
= Thread.currentThread().getContextClassLoader();
        
if (classLoader!=null) {
            stream 
= classLoader.getResourceAsStream( stripped );
        }
        
if ( stream == null ) {
            SkynetConfig.
class.getResourceAsStream( resource );
        }
        
if ( stream == null ) {
            stream 
= SkynetConfig.class.getClassLoader().getResourceAsStream( stripped );
        }
        
if ( stream == null ) {
            File ff 
= getResourceAsFile(System.getProperty("user.dir") ,resource);
            
if(ff==null)
                ff 
= getResourceAsFile(System.getProperty("java.class.path") , resource);
            
try {
                stream 
= new FileInputStream(ff);
                
if(stream==null)
                    
throw new Exception( resource + " not found" );
            } 
catch (Exception e) {e.printStackTrace();}
        }
        
return stream;
    }
    
    
public static File getResourceAsFile(String str,String findff){
        String[] sfd 
= str.split(";");
        
for(int i=0;i<sfd.length;i++){
            File file 
= new File(sfd[i]);
            
if( file.isDirectory()){
                File[] cfs 
= file.listFiles();
                
for(int j=0;j<cfs.length;j++){
                    File ff 
= findFile(cfs[j],findff);
                    
if(ff==null)continue;
                    
else return ff;
                    
                }
            }
        }
        
return null ;
    }
    
    
private static File findFile(File file,String findff){
        
if(file.isFile() && file.exists() && isFileEqu(file,findff)  ) return file ;
        
else if( file.isDirectory() ){
            File[] cfs 
= file.listFiles();
            
for(int i=0;i<cfs.length;i++){
                File ff 
= findFile(cfs[i],findff);
                
if(ff==null)continue;
                
if( isFileEqu(ff,findff) ){
                    
return ff;
                }
            }
        }
        
return null ;
    }
    
    
private static boolean isFileEqu(File ff,String findff){
        String path 
= ff.getPath().trim() ;
        String findfft 
= findff.trim() ;
        
        
if( path.lastIndexOf( findfft )>0)return true;
        
        
return false;
    }

}



posted @ 2007-10-10 14:50 G_G 阅读(1587) | 评论 (1)编辑 收藏

为我准备学习和理解spring
特留下代码笔记:
参考:
http://dev.csdn.net/author/labile/e70c97cb7f504d35b7b5350e7810cc5a.html
代码感想:
    没个方法都或多或少需要环境参数(如: jdbc的conn ,hbn的session...等等 ),方法结束后又要关闭。
何不用proxy代理并用配置文件的方法来 关,开session 等
如:以下是我的想法并不是实际可用
   
配置:
<
class name="HelloWorldImpl">
 
<function name="set*" />

  <function name="getName">
    <proxyBegin artt="name" value="liukaiyi"/>
        //使用Proxy来赋值 name那在实现代码中就可以不用去关注象 session 等属性的开关了
        //proxy中配置下 , 在实现类中 就使用 就可以了

    <proxyBegin ref="HelloWorldHandler.doBefter" args="null"/>
    <proxyEnd ref="HelloWorldHandler.doAfter" args="null"/>
  </function>

  <function = name="sayHelloWorld">
    <proxyEnd ref="HelloWorldHandler.doAfter" args="null"/>
  </function>
</class>

代码:
HelloWorld hw = (HelloWorld)Factory.getBean("HelloWorldImpl");
hw.getName();

结果是:
before method invoke!
刘凯毅
after method invoke!
在此 我只是想象,spring 还没有看,但我认为spring 这个著名的框架应该在这方面有很好的实现。

实际代码:希望spring可以向我上面的方法配置好用来取代下面的实际代码 ^_^
package test.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import junit.framework.TestCase;

public class TestProxy extends TestCase {
    
    
protected void setUp() throws Exception {
        
super.setUp();
    }
    
    
public void testProxy(){
             HelloWorld hw 
= new HelloWorldImpl();           
                       InvocationHandler handler 
= new HelloWorldHandler(hw);          
                       HelloWorld proxy 
= (HelloWorld) Proxy.newProxyInstance(   
                                     hw.getClass().getClassLoader(),   
                                     hw.getClass().getInterfaces(),   
                                     handler);   
                       proxy.sayHelloWorld();
                       
                       System.out.println();
                       proxy.setName(
"liukaiyi");
                       proxy.getName();
    }
    
}

interface HelloWorld {   
    
void sayHelloWorld() ;   
    
void getName();
    
void setName(String name);
}

class HelloWorldImpl implements HelloWorld {   
    
private String name = "";
    
public void setName(String name) {
        
this.name = name;
    }

    
public void sayHelloWorld() {   
        System.out.println(
"Hello World!");              
    }

    
public void getName() {
        System.out.println(
this.name);
    }   
}

class HelloWorldHandler implements InvocationHandler {   
            
//要代理的原始对象   
            private Object objOriginal;   
            
/**  
             * 构造函数。  
             * 
@param obj 要代理的原始对象。  
             
*/  
            
public HelloWorldHandler(Object obj) {   
                   
this.objOriginal = obj ;   
            }   
            
public Object invoke(Object proxy, Method method, Object[] args)   
                          
throws Throwable {               
                   Object result 
= null ;              
                   String meName 
= method.getName();
                   
if(meName.indexOf("set")>-1 ){
                       
return method.invoke(this.objOriginal ,args);   
                   }
                   
if( meName.equals("getName") ){
                    
//方法调用之前   
                           doBefore(); //仿佛是AOP的影子,呵呵   
                   }
                     
//调用原始对象的方法   
                           result = method.invoke(this.objOriginal ,args);   
                     
//方法调用之后   
                           doAfter();       
                   
                   
return result ;   
            }   
            
private void doBefore() {   
                   System.out.println(
"before method invoke!");   
            }   
            
private void doAfter() {   
                   System.out.println(
"after method invoke!");   
            }   
     }   


结果:
Hello World!
after method invoke!

before method invoke!
刘凯毅
after method invoke!

posted @ 2007-10-09 11:13 G_G 阅读(1095) | 评论 (2)编辑 收藏

在 D2D 论坛中见
一文标题 《在java中利用动态编译实现eval》
http://dev2dev.bea.com.cn/bbsdoc/20060724298.html
虽然给出代码不能运行 但标题的意思已经达到
在此 我也不多说了
在此完善下原作者的代码 并使可运行来方便大家理解

企图说明:
代码的可用性是没有的,但代码向我们打开了一个使java动态编译的一向大门
有想法的程序员们。我们在此得到了什么?

代码说明:
    1.为了使用例子的方便 testJavac.java 是 Bean ( name , avg ) 也是 逻辑类 ( eval(string) )
    2.运行请在 classpath 加入 java\lib\tools.jar jar 包 (
com.sun.tools.javac.Main )
    3.还是方便运行本例对 自己在什么 path 并不在意 类中使用了 System.getProperty("user.dir")

import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.lang.reflect.Method;

import com.sun.tools.javac.Main;


public class testJavac{
        
public String getName(){
           
return "刘凯毅";
        }
        
public int getAvg(){
           
return 24;
        }
        
        
public Object eval(String str)throws Exception{
           
//生成java文件
        String s = "class Temp{";
            s 
+= "private testJavac tj = new testJavac();";
            s 
+= "public String rt(){";
            s 
+= " return  \"\"+tj."+str+"();"  ;
            s 
+= "}";
            s 
+="}";
            
           File f 
= new File(System.getProperty("user.dir")+"\\Temp.java");
           PrintWriter pw 
= new PrintWriter(new FileWriter(f));
           pw.println(s);
           pw.close();
           
//动态编译
           Main javac = new Main();
           String[] cpargs 
= new String[] {"-d", System.getProperty("user.dir") ,"Temp.java"};
           
int status = javac.compile(cpargs);
           
if(status!=0){
              System.out.println(
"没有成功编译源文件!");
              
return null;
           }
           
//调用Temp的rt方法返回结果:
           ClassLoader mc = this.getClass().getClassLoader();
           
           Class clasz 
= mc.loadClass("Temp");

           Method rt 
= clasz.getMethod("rt"new Class[]{});
           
return rt.invoke(clasz.newInstance(), new Object[] { });
           
//如果方法没有返回就直接调用
        }
        
        
    
public static void main(String[]args)throws Exception{
        testJavac jj 
= new testJavac();
        System.out.println( jj.eval(args[
0]) );
    }

}

运行结果
D:\javac>javac -classpath D:\java\lib\tools.jar;. testJavac.java

D:\javac>java -classpath D:\java\lib\tools.jar;. testJavac getName
刘凯毅
//此时在当前目录下你可以看到 多了一个 Temp.java 和 Temp.class 文件
//再使用 CalssLoader.loadClass方法
动态加载到运行环境中来
//创建 动态  加载 动态   (java 动起来了)
D:\javac>java -classpath D:\java\lib\tools.jar;. testJavac getAvg
24


posted @ 2007-10-09 09:26 G_G 阅读(1284) | 评论 (4)编辑 收藏

参照:
    http://json-lib.sourceforge.net/usage.html

先 json <-> object
package test.json;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.beanutils.PropertyUtils;

import com.jjm.viewBean.reportTableBean;

import net.sf.json.JSONArray;
import net.sf.json.JSONFunction;
import net.sf.json.JSONObject;

import junit.framework.TestCase;

public class JsonTest extends TestCase {

// object to json ************************************************************
    public void testList(){
        
boolean[] boolArray = new boolean[]{true,false,true};   
            JSONArray jsonArray1 
= JSONArray.fromObject( boolArray );   
            System.out.println( jsonArray1 );   
            
// prints [true,false,true]  
            
            List list 
= new ArrayList();   
            list.add( 
"first" );   
            list.add( 
"second" );   
            JSONArray jsonArray2 
= JSONArray.fromObject( list );   
            System.out.println( jsonArray2 );   
            
// prints ["first","second"]  

            JSONArray jsonArray3 
= JSONArray.fromObject( "['json','is','easy']" );   
            System.out.println( jsonArray3 );   
            
// prints ["json","is","easy"]   
    }
    
    
public void testMap(){
        Map map 
= new HashMap();   
         map.put( 
"name""json" );   
         map.put( 
"bool", Boolean.TRUE );   
         
         map.put( 
"int"new Integer(1) );   
         map.put( 
"arr"new String[]{"a","b"} );   
         map.put( 
"func""function(i){ return this.arr[i]; }" );   
         JSONObject json 
= JSONObject.fromObject( map );   
         System.out.println( json );   
         
//{"func":function(i){ return this.arr[i]; },"arr":["a","b"],"int":1,"name":"json","bool":true}
    }

    
/**
     * Bean.java 
        private String name = "json";   
        private int pojoId = 1;   
        private char[] options = new char[]{'a','f'};   
        private String func1 = "function(i){ return this.options[i]; }";   
        private JSONFunction func2 = new JSONFunction(new String[]{"i"},"return this.options[i];");
    
*/
     
public void testBean(){
         JSONObject jsonObject 
= JSONObject.fromObject( new JsonBean() );   
         System.out.println( jsonObject );   
         
//{"func1":function(i){ return this.options[i]; },"pojoId":1,"name":"json","options":["a","f"],"func2":function(i){ return this.options[i]; }}  
     }
     
     
/**
      * private int row ;
          private int col ;
          private String value ;
      *
      
*/
     
public void testBeans(){
         List list 
= new ArrayList();
         JsonBean2 jb1 
= new JsonBean2();
         jb1.setCol(
1);
         jb1.setRow(
1);
         jb1.setValue(
"xx");
         
         JsonBean2 jb2 
= new JsonBean2();
         jb2.setCol(
2);
         jb2.setRow(
2);
         jb2.setValue(
"");
         
         
         list.add(jb1);
         list.add(jb2);
         
         JSONArray ja 
= JSONArray.fromObject(list);
         System.out.println( ja.toString() );
         
//[{"value":"xx","row":1,"col":1},{"value":"","row":2,"col":2}]
     }
     
     

//    json  to object ************************************************************     
     
     
public void testJsonBeanUtil()throws Exception{
             String json 
= "{name=\"json\",bool:true,int:1,double:2.2,func:function(a){ return a; },array:[1,2]}";   
            JSONObject jsonObject 
= JSONObject.fromString(json);   
            Object bean 
= JSONObject.toBean( jsonObject );   
            assertEquals( jsonObject.get( 
"name" ), PropertyUtils.getProperty( bean, "name" ) );   
            assertEquals( jsonObject.get( 
"bool" ), PropertyUtils.getProperty( bean, "bool" ) );   
            assertEquals( jsonObject.get( 
"int" ), PropertyUtils.getProperty( bean, "int" ) );   
            assertEquals( jsonObject.get( 
"double" ), PropertyUtils.getProperty( bean, "double" ) );   
            assertEquals( jsonObject.get( 
"func" ), PropertyUtils.getProperty( bean, "func" ) );   
            List expected 
= JSONArray.toList( jsonObject.getJSONArray( "array" ) );   
            assertEquals( expected, (List) PropertyUtils.getProperty( bean, 
"array" ) );  
     }
     
     
public void testJsonBean(){
             String json 
= "{\"value\":\"xx\",\"row\":1,\"col\":1}";   
            JSONObject jsonObject 
= JSONObject.fromString(json);
            JsonBean2 bean 
= (JsonBean2) JSONObject.toBean( jsonObject, JsonBean2.class );   
            assertEquals( jsonObject.get( 
"col" ),new Integer( bean.getCol())  );   
            assertEquals( jsonObject.get( 
"row" ), new Integer( bean.getRow() ) );   
            assertEquals( jsonObject.get( 
"value" ), bean.getValue() );  
     }
}                                                                                                                                  


json <-> xml
JSON to XML
  1. JSONObject json = new JSONObject( true );  
  2. String xml = XMLSerializer.write( json );  
  1. <o class="object" null="true">  
  2.       
  1. JSONObject json = JSONObject.fromObject("{\"name\":\"json\",\"bool\":true,\"int\":1}");  
  2. String xml = XMLSerializer.write( json );  
  1. <o class="object">  
  2.    <name type="string">json</name>  
  3.    <bool type="boolean">true</bool>  
  4.    <int type="number">1</int>  
  5. </o>  
  1. JSONArray json = JSONArray.fromObject("[1,2,3]");  
  2. String xml = XMLSerializer.write( json );  
  1. <a class="array"<  
  2.    <e type="number">1</e>  
  3.    <e type="number">2</e>  
  4.    <e type="number">3</e>  
  5. </a>  
xml to json
  1. <a class="array">  
  2.   <e type="function" params="i,j">  
  3.       return matrix[i][j];  
  4.   </e>  
  5. </a>  
  1. JSONArray json = (JSONArray) XMLSerializer.read( xml );  
  2. System.out.println( json );  
  3. // prints [function(i,j){ return matrix[i][j]; }] 


posted @ 2007-10-08 15:08 G_G 阅读(1812) | 评论 (0)编辑 收藏

约定:
    bean.getXX.. 称为 gbean
    bean.setXX.. 称为 sbean
目的:
gbean 多属性 付值给 sbean 多属性(并值有一定修改后)等复杂

用 一句 *逻辑string* 就可以了
多属性不同类型 赋值了
说明:
1.sbean : testData 类有4个属性     personid ; workno ; hname ; dob ;
2.gbean 类我这用的是数据库动态类 ,有兴趣的可以看看我的另一遍blog 动态面向对象数据库操作
    数据库 表 z_jcyy_basepersonnel 多属性 但 personid,workno,hname 不可以为空
3.这里 get set 赋值 使用的工具 LGUtil
测试:
package myGGUtil.LGBeanUtil.test;

import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.jxpath.JXPathContext;
import myGGUtil.DBUtil.DyanDBUtils.DyanDBUtils;
import myGGUtil.LGBeanUtil.LGUtil;
import myGGUtil.LGBeanUtil.SpecialAttFun;
import junit.framework.TestCase;

public class test extends TestCase {
   

    //只有一条数据的 一对一
    
public void testONE_TO_ONE()throws Exception{

        //得到修改的 数据'0301003300
' dob 时间为当前 一条值
        DyanDBUtils dyd 
= new DyanDBUtils();
        List list 
= dyd.select("select t.* from z_jcyy_basepersonnel t where t.personid = '0301003300'");
        BeanUtils.setProperty( list.get(
0) ,"dob",new Date()); 
        dyd.updateOrInsert(list.get(
0));
        List listD 
= dyd.select("select t.* from z_jcyy_basepersonnel t where t.personid = '0301003300'");

        //这使用 LGutil 目的是 包, 把
数据'0301003300'的 personid,workno,hname,dob 值通过一定逻辑赋值
        LGUtil lb 
= new LGUtil();
        lb.setDataList(listD);   //数据加入  : 就是 gbean
        lb.setMapping(LGUtil.ONE_TO_ONE);   //定义是一对一 get -> set
        lb.setVbClass(testData.
class); // sbean 类
        lb.setAttrLg(Date.
class," ./${.+} ","action:date($this,'yy-MM-dd')");
        //把gbean数据为Date类型的付值给 sbean 的string类型 并以 'yy-MM-dd'时间字符格式
 

        lb.setAttrLg(String.
class,"./${.+}"); //String 普通付值
        
        lb.setFun(
new SpecialAttFun(){
            
public void action(JXPathContext temD, JXPathContext temV, int step, JXPathContext all) {
                temV.setValue(
"hname","heha" ); //在特殊值 hname 改为 heha (呵哈 我的口号哦^_^)
            }
        });
        
        testData oo 
= (testData)lb.getVBean().get(0) ;
        //sbean 的值输出 :
        System.out.println(oo.getPersonid()
+":"+oo.getHname()+":"+oo.getWorkno()+":"+ oo.getDob() );
       
        //测试结束 数据库 改回去 dob 为空
        BeanUtils.setProperty( list.get(
0) ,"dob",null); 
        dyd.updateOrInsert(list.get(
0));
    }
   
    //多条数据的
  :就是 gbean多 -> sbean
    public void testMANY_TO_ONE()throws Exception{
        DyanDBUtils dyd 
= new DyanDBUtils();
        List list 
= dyd.select("select t.* from z_jcyy_basepersonnel t where t.personid like '03010033%' ");
        // 得到多条数据

        LGUtil lb 
= new LGUtil();
        lb.setDataList(list);
        lb.setMapping(LGUtil.MANY_TO_ONE);
        lb.setVbClass(testData.
class);
        lb.setAttrLg(
"sum(./${workno})");  //把属性 workno 的全部值 向加 并 付值给 sbean.workno
        
        testData oo 
= (testData)lb.getVBean().get(0) ;
        System.out.println(oo.getWorkno()); //输出 workno
    }

    //多数据的一对一  gbean多 -> sbean多
    
public void testOne_to_one()throws Exception{
        DyanDBUtils dyd 
= new DyanDBUtils();
        List listd 
= dyd.select("select t.* from z_jcyy_basepersonnel t where t.personid = '0301003300'");
        BeanUtils.setProperty( listd.get(
0) ,"dob",new Date()); 
        dyd.updateOrInsert(listd.get(
0));
        List list 
= dyd.select("select t.* from z_jcyy_basepersonnel t where t.personid = '0301003300'");
       //这 030100330 数据改值 下面 展现需要 (有不同哦)
      
        LGUtil lb 
= new LGUtil();
        lb.setDataList(dyd.select(
"select t.dob, t.* from z_jcyy_basepersonnel t where t.personid like '03010033%'")) ;
        lb.setMapping(LGUtil.ONE_TO_ONE);
        lb.setVbClass(testData.
class);
        
        lb.setAttrLg(
"${.+}");//全付值 
        lb.setAttrLg(Date.class," ./${.+} ","action:date($this,'yy-MM-dd')"); //date 给格式

        
for(Iterator it=lb.getVBean().iterator();it.hasNext(); ){
            testData oo 
= (testData)it.next();
            System.out.println(oo.getPersonid()
+":"+oo.getHname()+":"+oo.getWorkno()+":"+ oo.getDob() );
        }
        
        BeanUtils.setProperty( list.get(
0) ,"dob",null); 
        dyd.updateOrInsert(list.get(
0));
    } 
}

结果:
//方法 testONE_TO_ONE(): dob为'yy-MM-dd'
0301003300:heha:3300:07-09-29

//方法testMANY_TO_ONE() workno 全加 就是方法3 的workno全加 (大家可以看看哦)
174005.0
//方法testOne_to_one() 全付值 (简单展示 也可以对没个属性修改付 如:dob 方法一样)
0301003300:张金栋:3300:07-09-29
0301003301:谷嘉奇:3301:78-09-21
0301003302:闫国春:3302:78-12-24
0301003304:解国强:3304:77-08-17
0301003305:任志勇:3305:71-10-20
0301003306:张宁:3306:74-10-13
0301003307:闫立文:3307:70-07-05
0301003308:邓志山:3308:74-02-28
0301003309:刘承谦:3309:67-12-30
0301003310:郭爱军:3310:75-11-21
0301003312:杨涛:3312:73-08-01
0301003313:乔迎松:3313:74-05-27
0301003314:徐志斌:3314:69-03-14
0301003323:黄向东:3323:72-07-30
0301003324:高国良:3324:73-11-17
0301003326:高杰:3326:74-02-10
0301003329:葛燕京:3329:74-10-29
0301003331:赵震:3331:75-01-07
0301003333:郝君平:3333:74-03-12
0301003339:孙雪峰:3339:73-03-28
0301003340:刘绍明:3340:74-12-23
0301003341:郭金江:3341:73-06-07
0301003342:赵福军:3342:74-01-17
0301003343:刘勇:3343:74-07-04
0301003349:郑岩:3349:73-11-29
0301003350:周勇:3350:75-06-03
0301003352:许东波:3352:73-11-30
0301003353:于华涛:3353:71-11-08
0301003354:陈建宏:3354:71-11-21
0301003355:王福禄:3355:70-11-16
0301003357:曹小军:3357:75-09-05
0301003358:耿龙:3358:76-04-09
0301003359:麻然松:3359:74-04-05
0301003361:侯亮:3361:77-11-01
0301003362:翁宝重:3362:73-10-06
0301003364:李结:3364:74-12-08
0301003367:张建杰:3367:70-01-03
0301003369:王琪:3369:76-03-23
0301003370:刘洪涛:3370:77-10-26
0301003371:张兆鹏:3371:76-06-21
0301003373:王飞虎:3373:74-12-06
0301003375:王爱军:3375:74-01-02
0301003376:李小发:3376:72-12-20
0301003377:杨京海:3377:78-08-12
0301003379:王羽:3379:77-10-27
0301003380:周凤昆:3380:74-02-16
0301003381:王建新:3381:76-05-11
0301003384:卢红峰:3384:77-11-03
0301003387:解瑞杰:3387:72-05-15
0301003390:李振盈:3390:76-10-03
0301003393:马强:3393:75-10-03
0301003397:齐永强:3397:77-04-06

有兴趣的可以看看我花了3 天写的代码(重构过一次应该还是可以看看的 )
下载:
myGGUtil.rar
包说明:
 本次 代码在 myGGUtil.LGBeanUtil.LGUtil 下 (^_^)大家提点意见哦 !
我希望这个好的想法 能成一个框架 哦~~~
 

posted @ 2007-09-29 09:51 G_G 阅读(1028) | 评论 (2)编辑 收藏

BUG修订 09-21 15:44
   时间类不能Update 问题 (如果在上面时间前下载那请从新下载)

 

在上一版本有大改动 自用小框架:DB工厂  
         1.  添加 jdbc  事物
         2.  结构更合理
         3.  速度加快

工具简单说明
      脱离 DB 影射包 java 数据类 ,动态在内存中生成 动态数据类 ( 使用BeanUtils的DyanBean类 )      .
      操作DB 面向对象操作(当然是动态^_^)
      为了更实用 我用了张 50多属性的大表进行测试.阅读起来可能有点困难,希望大家海涵. 
version 
   jdk 1.4

下载
      DyanDBUtils.rar


包文件说明 :
         Config   :  JDBC 需要的 驱动 密码等
         DBResources :   根据Config给出 Connection ,  PreparedStatement
         DynaClass :  根据元数据 和 table 给出 动态BasicDynaClass 
         SQLSpelling : 给出 sql 语句和 sql语句中 ?  的值 ,格式为 List : lise.get(0)为sql语句 后其他为值  
         DyanDBUtils.java : 为本Util主要入口点 也是运行点

数据库表  z_jcyy_basepersonnel
      有53个属性 (什么类型都有)
      4 个不为空属性 personid , workno , depotid ,  hname     

测试

package  DyanDBUtils.test;


import  java.util.Iterator;

import  org.apache.commons.beanutils.BeanUtils;

import  DyanDBUtils.DyanDBUtils;
import  junit.framework.TestCase;

public   class  testUtil  extends  TestCase {
    
static   private  DyanDBUtils dyd  =   DyanDBUtils.getDyanDBUtil() ;
    
static   private  Object obj  =   null  ;
    //SELECT
    
public   void  testSelete() throws  Exception{
        dyd.setIsShowSQL(
true );
        
for (Iterator it  =  dyd.select( " select t.*, t.rowid from z_jcyy_basepersonnel t where t.personid = '0301003719' " ).iterator();
                    it.hasNext();){
            Object obj 
=  it.next();
        }
    }
    //INSERT
    
public   void  testInsert() throws  Exception{
        obj 
=  dyd.getDyanDBBean( " z_jcyy_basepersonnel " );
            BeanUtils.setProperty(obj,
" personid " , " 1000 " );
            BeanUtils.setProperty(obj,
" workno " , " 2000 " );
            BeanUtils.setProperty(obj,
" depotid " , " 300 " );
            BeanUtils.setProperty(obj,
" hname " , " 刘凯毅 " );
        dyd.insert(obj);   //INSERT 

    }

   //UPDATE
    
public   void  testUpdate() throws  Exception{
        BeanUtils.setProperty(obj,
" hname " , " 思考.. " );
        dyd.updateOrInsert(obj); //UPDATE

    }
//DELECT
    
public   void  testDelete() throws  Exception{
        dyd.delete(obj);//DELECT

        System.out.println(
" ****************************************** " );
    }
    
    
public   void  testCommit() throws  Exception{
        dyd.openCommit() ;
        Object obj 
=  dyd.select( " select t.*, t.rowid from z_jcyy_basepersonnel t where t.personid ='0301003719'  " ).get( 0 );
        
        BeanUtils.setProperty(obj,
" hname " , " 刘凯毅 " );
        dyd.updateOrInsert(obj);

        BeanUtils.setProperty(obj,
" workno " , null );  // 不可为空
        dyd.updateOrInsert(obj);
        
        dyd.colseCommit();
        testSelete();
    }
    
}



测试测试结果 (注意: 开头的 李家佳 3719  和后面的 3719  没变 就是事物的结果)

李家佳  3719
insert   into  z_jcyy_basepersonnel( depotid,drivekm,hname,hundreds,personid,resbaseknowledge,rescheck,resctrl,resproknowledge,ressaferules,roomarea,safekm,status,workno)  values ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?)
//刘凯毅 2000   print insert
// 思考.. 
2000     print update
delete   from  z_jcyy_basepersonnel  where   1 = 1    and  personid = ?
******************************************
delete   from  z_jcyy_basepersonnel  where   1 = 1    and  personid = ?
insert   into  z_jcyy_basepersonnel( beginworktime,depotid,deptid,dob,drivekm,drivelocotype,dynamicinfo,dynamicinfo2,dynamicinfo3,eductionlevel,folk,hname,hundreds,marrystatus,minordriveno,nativeplace,personid,political,postid,promoteminordriverdate,resbaseknowledge,rescheck,resctrl,resproknowledge,ressaferules,roomarea,safebeginday,safekm,sex,status,techniclevel,workno)  values ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
delete   from  z_jcyy_basepersonnel  where   1 = 1    and  personid = ?
insert   into  z_jcyy_basepersonnel( beginworktime,depotid,deptid,dob,drivekm,drivelocotype,dynamicinfo,dynamicinfo2,dynamicinfo3,eductionlevel,folk,hname,hundreds,marrystatus,minordriveno,nativeplace,personid,political,postid,promoteminordriverdate,resbaseknowledge,rescheck,resctrl,resproknowledge,ressaferules,roomarea,safebeginday,safekm,sex,status,techniclevel)  values ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
java.sql.SQLException: ORA
- 01400 : 无法将  NULL  插入 ("JCYY"."Z_JCYY_BASEPERSONNEL"."WORKNO") //事物运行良好 哦

李家佳 3719

总结
事物 解决了 还有多表问题 大家多给点鼓励哦 ^_^ 

posted @ 2007-09-21 14:46 G_G 阅读(1806) | 评论 (6)编辑 收藏

BUG 修改 :
09-20   因为 Oracle  取元数据的字符串需要大写 至修改并下载更新
测试使用表
      ID                           SN   STATIONNAME          SPELL      DEPOTID 
      -------------- ---- -------------------- ---------- ------- ------------------
      08050000390689    3     永安                              ya                ....

版本升级
09-21 DyanDBUtils 动态面向对象数据库 操作

由于 hibernate 还要table影射成class 这好处和坏处只有我们程序员知道了
        只要修改数据库就大量影射附加工作要做 ,有时影射还有BUG弄的我们@#$%!.....(哈hibernate我是小鸟^_^),我----不要----影射 , 没有他们数据库就又回到jdbc.本人比较喜欢偷懒 哈哈 自己来个小框架吧( 就300来行的代码有兴趣的看看哦 )!!! 

用到技术
     BeanUtil , JDBC元数据(在这我可是好好看了下JDBC,其实他是很强的东西,大家应该好好用用^_^) 
下载DBFactory.rar
DBFactroy
数据是:
+----+-------+-------------+------------+
| id | title | description | buydate    |
+----+-------+-------------+------------+
|  6 | tt    | asdgwgw     | 1990-12-02 |
+----+-------+-------------+------------+


先看看测试吧

public class testNotKonw extends TestCase {

    
protected void setUp() throws Exception {
       //运行 sql 可见
        DBFactory.getTools().setIsShowSql(DBFactory.SHOW);
        
super.setUp();
    }
    
public void testDelete()throws Exception{
         // select 出来 就的 List 中 DynaBean : id , title .....  类型 , 和值都有了
        
for(Iterator it = DBFactory.getTools().select("select * from books").iterator();it.hasNext();){
            // 那就是delete : 目的是测试前 删除全部数据
            DBFactory.getTools().delete(it.next());
        }
    }
    
      
public void testInsert()throws Exception{
        // insert 要先new出来个 table->bean  再 添属性  
        Object obj 
= DBFactory.getTools().getDynaTableClass("books").newInstance();
        BeanUtils.setProperty(obj,
"id","6");
        BeanUtils.setProperty(obj,
"title","tt");
        BeanUtils.setProperty(obj,
"description","asdgwgw");
        BeanUtils.setProperty(obj,
"buydate",new Date());
       //这几是 insert 了 (简单吧)
        DBFactory.getTools().insert(obj);
    }
    
    
// update
    public void testUpdate()throws Exception{
        
for(Iterator it = DBFactory.getTools().select("select * from books").iterator();it.hasNext();){
            Object obj 
= it.next();
            BeanUtils.setProperty(obj,
"buydate",new Date(90,11,2));
            DBFactory.getTools().update(obj);
        }
    }
}


控制台输出
//testDelete
delete from books where 1=1  and id=6
//testInsert
insert into books(id,title,description,buydate) values( 6,'tt','asdgwgw','2007-09-19')
//testUpdate
delete from books where 1=1  and id=6
insert into books(id,title,description,buydate) values( 6,'tt','asdgwgw','1990-12-02')

代码关键说明:
关键在BeanUtil 的 DnayBean中 我通过元数据 得到了 这个Bean 属性.属性类型,还有表信息放在 getClass();的字符串中
   EG:    table=...;key=..,..,..;columns=...,..,; 后在insert , delet , update就是(先delete后insert^_^)  中 解析得到 动态写sql语句 
         更举 DnayBean中属性类型看看 Bean value 是否要加 ' value ' 还是直接 value 到sql 中

    public  BasicDynaClass getDynaTableClass(String table){
        Connection conn 
= getConn() ;
        List props 
= new ArrayList();
        DatabaseMetaData dm 
= null ;
        BasicDynaClass dynaClass 
= null ;
        
try {    
            dm 
= conn.getMetaData();
            ResultSet coulumns 
= dm.getColumns(null,null,table,null);
            
while(coulumns.next()){
               //元数据中得到 类型做 DynaBean 属性   coulumns.getInt("DATA_TYPE" 是  java.sql.Types.XXXXX
                props.add(
new DynaProperty( coulumns.getString("COLUMN_NAME"),getStrClass(coulumns.getInt("DATA_TYPE"))) );
            }
            
// all : table
            
//delete : column_name column_value
            
//insert : column_name
            StringBuffer sb = new StringBuffer();
            sb.append(
"table=").append(table).append(";");
            
            sb.append(
"keys=");
                ResultSet keys 
= dm.getPrimaryKeys(null,null,table);
                
while(keys.next()){
                    sb.append( keys.getString(
"column_name")).append(",");
                }
                sb.replace(sb.length()
-1,sb.length(),";");
            
            sb.append(
"columns=");    
                ResultSet couls 
= dm.getColumns(null,null,table,null);
                
while(couls.next()){
                    sb.append( couls.getString(
"column_name")).append(",");
                }
                sb.replace(sb.length()
-1,sb.length(),";");
                
            //为 Class name  <- sb.toString()
            dynaClass 
= new BasicDynaClass(sb.toString() , null
                    (DynaProperty[])props.toArray(
new DynaProperty[]{}) );
        } 
catch (Exception e) {e.printStackTrace();}
        
finally{
            
try {
                conn.close() ;
            } 
catch (SQLException e) {e.printStackTrace();}
        }
        
return dynaClass ;
    }

insert , delete 差不多 就来insert

    public boolean insert(Object obj){
        String sqlstrat 
= "insert into ";
        String sqldo 
= " values( ";
        String sqlend 
= ")";
        String sql 
= "";
        
boolean od = false ;
        
        Connection conn 
= getConn() ;
        Statement sta 
= null ;
        
try {
             //解析getDynaClass().getName()  得到 table
            sqlstrat 
+= getTableConfig(obj,"table")[0]+"(" ;
            
             //解析getDynaClass().getName()  得到 columns
            String[] cols 
= getTableConfig(obj,"columns");
            
for(int i=0;i<cols.length;i++){
                sqlstrat 
+= cols[i]  +",";
                sqldo 
+= getSqlAtt(obj,cols[i] )+",";
            }
            sql 
= sqlstrat.substring(0,sqlstrat.length()-1)+")"+sqldo.substring(0,sqldo.length()-1)+sqlend;
            sta 
= conn.createStatement();
            
if( sta.executeUpdate(sql)>0){od = true;};
        } 
catch (Exception e) {e.printStackTrace();}
        
finally{
            
try {
                
if( isShowSql==SHOW ) {System.out.println();System.out.println(sql);}
                conn.close();
            } 
catch (SQLException e) {e.printStackTrace();}
        }
        
return od ;
    }



小结:
当然表连和多表 是没问题的
但在多表 delete , update 就还没有完成 (蛮难的 5555  还有 没时间)
单表的 delete update ,select,insert 都完成了 我会努力的
大家要是认为还可以 帮忙顶贴 哦 我会都都完善哦

posted @ 2007-09-19 11:41 G_G 阅读(1482) | 评论 (6)编辑 收藏

本人特留使用 ( ^_^ 写html 不多 呵呵 )
    本页问题说明: 在第一次加载这3个页面的javascript可正常使用
                   后 ajax修改的( innerHTML= )页面 javascript就使用不了全页的document而是修改后的document
                   有人可以帮帮忙吗?
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
    
<base href="<%=basePath%>">
    
    
<title>My JSP 'Layout.jsp' starting page</title>
     
    
<meta http-equiv="pragma" content="no-cache">
    
<meta http-equiv="cache-control" content="no-cache">
    
<meta http-equiv="expires" content="0">
    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    
<meta http-equiv="description" content="This is my page">
    
<SCRIPT src="http://127.0.0.1:7000/jspLayout/js/ajax.js"></SCRIPT>
    
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    
-->
  
</head>
  
  
<body>
           
<%@include file="../html/top.jsp"%>
           
<table width="90%">
               
<tr>
                   
<td  valign="top" align="center" height="80%">
                       
<jsp:include flush="true"  page="../html/left.html"/>
                   
</td>
                   
<td id="cen" valign="middle" align="center" width="80%" height="80%">
                       
<jsp:include flush="true"  page="../html/center.html"/>
                   
</td>
               
</tr>
           
</table>
  
</body>
</html>

posted @ 2007-09-14 17:46 G_G 阅读(2220) | 评论 (3)编辑 收藏


使用后好处 
    java 和 javascript 使用同统一对象,语法 . 数据从 sever 到 v层 和 v层 到 sever  方便.
            简单说就是 JBean 不做修改拿到V层 当 JSBean (javascript 类) 中用

1.url 乱码问题参照 Ajax uri 乱码问题总结(IE,FF)
2.使用jar是 jxpath ; json  ......(与相关)
               jxpath 参照 jxpath 学习笔记 
               json 参照 使用json-lib

例题说明 数据 name,avg 在通过 ajax json 后 avg +1 再展现到页面
本页需要 json.js 下载到 http://www.json.org/json.js 

<% @ page pageEncoding = " GBK " %>
<% @ page contentType = " text/html; charset=GBK "   %>   
< html >
  
< head >
    
< title > json.html </ title >
    
    
< meta  http-equiv ="keywords"  content ="keyword1,keyword2,keyword3" >
    
< SCRIPT  src ="../js/json.js"   ></ SCRIPT >  
    
< script  language ="javascript"  type ="text/javascript" >
    
var  request  =   false ;
    
   // javascript  Ajax  没什么好说的 这可以用 prototype prototype.js 的理解  ,dojo dojo  等 ajax
  //本例 为方便直接写了 ^_^
 
    
function  getOpen(){      
       
try  {
         request 
=   new  XMLHttpRequest();
       } 
catch  (trymicrosoft) {
         
try  {
           request 
=   new  ActiveXObject( " Msxml2.XMLHTTP " );
         } 
catch  (othermicrosoft) {
           
try  {
             request 
=   new  ActiveXObject( " Microsoft.XMLHTTP " );
           } 
catch  (failed) {
             request 
=   false ;
           }  
         }
       }
    }   
       
       
      
function  getCustomerInfo() {
      getOpen();
       
if  ( ! request)
         alert(
" Error initializing XMLHttpRequest! " );
         
       //这通过 url 把数据传给 server 
       //数据来源 javascript 类 就下方 DBdata
     string: name:我名字^_^  ,  int: avg:年龄^_^
         
var  url  =   " /json/json?jsonStr= " +  ( new  DBdata()).toJSONString() ;
         request.open(
" GET " , url,  true );
         request.send(
null );
         request.onreadystatechange 
=  updatePage;
       }
       
       // ajax 处理 数据后返回的 结果 
      // 年龄 +1 并输入到 输入框中
       
function  updatePage(){
       
if  (request.readyState  ==   4
           
if  (request.status  ==   200 ){ 
            //得到 json str
             
var  jss  =  request.responseText;
            //加载到 javascript 类中 string -> jsBean
             
var  jsobj  =  eval('('  +  jss  +  ')');
             //使用和 java对象一样 ^_^
             document.getElementById('xx').value 
=  jsobj.name  + ':' +  jsobj.avg ;
            }
       }
    
//数据来源
     
function  DBdata(){
         
this .name  =  '刘凯毅';
         
this .avg = 23
         
this .init = function (){
             alert('呵呵');
         }
     }
</ script >
  
</ head >
  
< body  onload ="" >
      
< INPUT  id ='xx'  type ="text"   >
      
< INPUT  id ='x'  type ="button"  onclick ="getCustomerInfo()"  value ="go" >
  
</ body >
</ html >

为了方便明了我java方就使用了 server
package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.jxpath.JXPathContext;

import net.sf.json.JSONObject;


public class Json extends HttpServlet {
    
public void doGet(HttpServletRequest req,HttpServletResponse rpo)throws ServletException,IOException{
        rpo.setCharacterEncoding(
"GBK");
        req.setCharacterEncoding(
"GBK");
        rpo.setContentType(
"text/html; charset=GBK");
        
        PrintWriter out 
= rpo.getWriter() ;
       
        //得到 url 传入数据
        String str 
= req.getParameter("jsonStr") ;
        //java 方 string -> javaBean
        JSONObject jso 
= JSONObject.fromString(str);
        //javaBean 使用jxpathcontxt解读更方便 ^_^
        //其实jso中是以 map 形式存区的 有兴趣的可以自己动手写下哦

        JXPathContext jx 
= JXPathContext.newContext(jso);
        
try {
             //jxpath好处来了 avg + 1
            jx.setValue(
"./avg", jx.getValue("./avg + 1 ") );
        } 
catch (Exception e) {e.printStackTrace();}
       
       //以 jsonString 传出
        out.print(jso.toString());

    }
}

web.xml(好象有点多嘴了 哈哈 方便下入门人了)
    <servlet>
        
<servlet-name>json</servlet-name>
        
<servlet-class>servlet.Json</servlet-class>
    
</servlet>
    
<servlet-mapping>
        
<servlet-name>json</servlet-name>
        
<url-pattern>/json</url-pattern>
    
</servlet-mapping>



posted @ 2007-09-13 11:36 G_G 阅读(2890) | 评论 (2)编辑 收藏

仅列出标题
共16页: First 上一页 8 9 10 11 12 13 14 15 16 下一页