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