Hibernateを模したセッション機能


J 2 EEに触れたばかりの頃に最初に学んだいくつかのフレームワークが一番分かりにくいと思ったのはHibernateです
Hibernateの核心思想-ormapping、javaeyeの達人は雲のように私がここで説教した.
最近馬さんが話しているhibernateを見ます.2彼の考えに従ってhibernateの中のsessionの机能を模仿する小さいプログラムを书いて、さっき走ったコードはまだ来ていないで整理します....
まず、クラスカプセル化されたデータベース接続を構築します.JDBC接続データベースに方法を追加することができます.
  


	/**
	 * insert
	 * @param value
	 * @param sql
	 * mv map   key         
	 * @return
	 * @throws UnsupportedEncodingException
	 */
	public int constructionSql(Map<Object, String> value, String sql)
			throws UnsupportedEncodingException {
		try {
			pstmt = conn.prepareStatement(sql);
			int i = 0;
			for (Object s : value.keySet()) {
				String mv = (String) value.get(s);
				System.out.println(s);
				if (mv.equals("string")) {
					pstmt.setString(i + 1, (String) s);
				}
				if (mv.equals("int")) {
					pstmt.setInt(i + 1, (Integer) s);
				}
				i++;
			}
			count = pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("constructionSql error");
		}
		return count;
	}
   

次にクラスというクラスを作成するのは主にsessionを実現する機能のほんの一部を模倣することである.
  

package com.test.db;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class SessionImitateHibernate<K> {
	/**       Hibernate                            */
	private String tableName="lyvee";     
	/**          */
	private String columnStr=""; 
	/**       value*/
	private String valuesStr="";  
	 /**key     column   value    property*/	
	/**Map               、        )*/
	private Map<String,String> cmp = new HashMap<String,String>();
	/**       sql  */
	private String insertSql="insert into"; 
	/**   */
	public String[] methodName;                      	
	private Map value = new HashMap();
	private DataBase db;
	/**          */
	public SessionImitateHibernate(){ 	               
		cmp.put("lname", "name");
		cmp.put("lpwd", "pwd");
		cmp.put("lsex", "sex");
		methodName = new String[cmp.size()];
	}
	/**
	 *   sql  
	 * @param tableName
	 * @return
	 * @throws Exception
	 */
	//   tableName                        =tableName
	public String createInsertSql(String tableName,Bean1 bean)throws Exception{
	/**    */
	int index=0;						
	for(String s :cmp.keySet()){
		String v = cmp.get(s);
		v ="get"+Character.toUpperCase(v.charAt(0))+v.substring(1);
		methodName[index]=v;
		/**SQL      */
		columnStr=s+","+columnStr;
		/**SQL    values */
		valuesStr+="?,";				
		index++;
	}
	/**  value string*/
	valuesStr=valuesStr.substring(0,valuesStr.length()-1);
	/**  key string*/
	columnStr=columnStr.substring(0,columnStr.length()-1);  
	/**   isnert sql  */
	insertSql=insertSql+" "+tableName+"("+columnStr+")"+"values("+valuesStr+")"; 	
		System.out.println("methodName    "+methodName.length);
		System.out.println("sql   key       "+columnStr);
		System.out.println("sql   value       "+methodName.length);
		System.out.println("  sql   ");
	for(int i=0;i<methodName.length;i++){
		 /**               */
		Method method = bean.getClass().getMethod(methodName[i]);      
		//          :       pstmt.setXXXX    
		//     setInt   setString       String  Int
		/**          */
		Class c = method.getReturnType();								
		if(c.getName()==("java.lang.String")){
			/**                */
			String returnStringValue=(String) method.invoke(bean);
			/**                map  */
			//     string       String
			value.put(returnStringValue,"string");						
		}if(c.getName()=="int"){				
			Integer returnIntValue =  (Integer) method.invoke(bean);	
			value.put(returnIntValue, "int");
		}
	}
	System.out.println(insertSql);
	System.out.println(value);
	return insertSql;	
	}
	public void save() throws Exception{
		Bean1 bean = new Bean1();
		bean.setSex(" ");
		bean.setPwd("lyvee");
		bean.setName("  ");
		
		createInsertSql("lyvee",bean);
		db = new DataBase();
		db.constructionSql(value, insertSql);
	}
	public static void main(String[] args) throws Exception {
		SessionImitateHibernate h = new SessionImitateHibernate();
		h.save();
	}

}