反射---第十九天

来源:互联网 发布:2017seo新手教程 编辑:程序博客网 时间:2024/04/28 16:46

泛型:ArrayList<数据类型> arr=new ...

泛型标志:T E K V

package com.test1;

 

import java.util.ArrayList;

 

public class Base<T1,T2> {

private T1 obj1;

 

private T2 obj2;

 

public Base(T1 obj1, T2 obj2) {

super();

this.obj1 = obj1;

this.obj2 = obj2;

}

 

public Base() {

super();

}

 

public T1 getObj1() {

return obj1;

}

 

public void setObj1(T1 obj1) {

this.obj1 = obj1;

}

 

public T2 getObj2() {

return obj2;

}

 

public void setObj2(T2 obj2) {

this.obj2 = obj2;

}

public static void main(String[] args) {

Base<String, Integer> base=new Base<String, Integer>("熊爱明",12);

Base<Integer, Integer> base2=new Base<Integer, Integer>(133,12);

System.out.println(base.getObj1()+"--"+base.getObj2());

System.out.println(base2.getObj1()+"--"+base2.getObj2());

}

}

反射:根据所需字符串将字符串转为类的对象及其属性和方法,并且可以进行操作

 

下面是DBhelper连接助手

package common;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


public class DBHelper {
public Connection conn;//连接对象
public PreparedStatement pst;//操作对象
String url="jdbc:sqlserver://127.0.0.1:1433;databasename=dogDB";
String user="sa";
String password="123";
//加载驱动
public DBHelper(){
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
} catch (Exception e) {
e.printStackTrace();
}
}
//连接对象
public void getConnection(){
try {
conn=DriverManager.getConnection(url, user, password);
} catch (Exception e) {
e.printStackTrace();
}
}
//增删改
public int execUpdate (String sql,Object...params){//该数组用于装?所代表的参数值
System.out.println(sql);
try {
//获取连接对象
getConnection();
//获取操作对象
pst=conn.prepareStatement(sql);
if(params!=null){
//遍历数组
for(int i=0;i<params.length;i++){
pst.setObject(i+1, params[i]);
}
}
//执行
return pst.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
return 0;

}



//查
public ResultSet execQuery (String sql,Object...params){//该数组用于装?所代表的参数值
System.out.println(sql);
try {
//获取连接对象
getConnection();
//获取操作对象
pst=conn.prepareStatement(sql);
if(params!=null){
//遍历数组
for(int i=0;i<params.length;i++){
pst.setObject(i+1, params[i]);
}
}
//执行
return pst.executeQuery();
} catch (Exception e) {
e.printStackTrace();
}
return null;

}

//关闭连接
public void closeResource(ResultSet rs,PreparedStatement pst,Connection conn){
try {
if(rs!=null){
rs.close();
}
if(pst!=null){
pst.close();
}
if(conn!=null){
conn.close();
}

} catch (Exception e) {
// TODO: handle exception
}
}


}



下面是反射的增删改查

package com.dao;


import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.util.ArrayList;


import common.DBHelper;


//类名=表名   属性=列
public class BaseDao<T> {
DBHelper helper=new DBHelper();

//添加
public int add(T t,String className,String pk){
int n=0;
try {
String classPath="com.beans."+className;
//通过字符串产生类型 clazz
Class clazz=Class.forName(classPath);
//得到属性数组
Field[] fields=clazz.getDeclaredFields();
//得到方法数组
Method[]methods=clazz.getDeclaredMethods();
//insert into 表(列1,列2..) values (值1,值2..)
//insert into dog(name,age) values (?,?)
//构造sql
String wh="";
String sql="insert into "+className+" (";
for(Field f:fields){
//排除点主键
if(!f.getName().equals(pk)){
sql+=f.getName()+",";
wh+="?,";
}
}
//截取最后一个逗号
sql=sql.substring(0, sql.length()-1);
wh=wh.substring(0, wh.length()-1); 
sql+=") values ("+wh+")";
System.out.println(sql);

//构建 值params
Object[]params=new Object[fields.length-1];
int index=0;
for(Field f:fields){ 
//排除点主键
if(!f.getName().equals(pk)){  // name age
for(Method m:methods){ //set getXXX
//得到所有的get方法
if(m.getName().substring(0, 3).equals("get")&&m.getName().substring(3).equalsIgnoreCase(f.getName())){ //getName getAge getId
//找到了和属性对象的getXXX方法了
//执行该方法
params[index]= m.invoke(t, null); 
index++;
break;
}
}
}
}
//遍历数组params
// for(Object o:params){
// System.out.println(o);
// }


n=helper.execUpdate(sql, params);

} catch (Exception e) {
e.printStackTrace();
}finally{
helper.closeResource(null, helper.pst, helper.conn);
}
return n;
}

//删除
public int del(String className,String pk,int id){
//delete from 表 where id=? 
//构建sql
String sql="delete from "+className+" where "+pk+"=?";
int n=helper.execUpdate(sql, id);
helper.closeResource(null, helper.pst, helper.conn);
return n;
}

//修改
public int upd(String className,T t,String pk){
int n=0;
try {
//update 表 set 列1=?,.... where id=?
String classPath="com.beans."+className;
Class clazz=Class.forName(classPath);
//得到属性数组
Field[] fields=clazz.getDeclaredFields();
//得到方法数组
Method[]methods=clazz.getDeclaredMethods();
//构建sql
String sql="update "+className+" set ";
for(Field f:fields){
if(!f.getName().equals(pk)){
sql+=f.getName()+"=?,";
}
}
//截取最后一个逗号
sql=sql.substring(0, sql.length()-1);
sql+=" where "+pk+"=?";

//构建 值params
Object[]params=new Object[fields.length];
int index=0;
for(Field f:fields){ 
//排除点主键
if(!f.getName().equals(pk)){  // name age
for(Method m:methods){ //set getXXX
//得到所有的get方法
if(m.getName().substring(0, 3).equals("get")&&m.getName().substring(3).equalsIgnoreCase(f.getName())){ //getName getAge getId
//找到了和属性对象的getXXX方法了
//执行该方法
params[index]= m.invoke(t, null); 
index++;
break;
}
}
}
}
//params最后装入主键值
for(Method m:methods){
//找到主键    getId
if(m.getName().substring(0, 3).equals("get")&&m.getName().substring(3).toLowerCase().equals(pk)){
params[index]=m.invoke(t, null);
break;
}
}
n=helper.execUpdate(sql, params);
} catch (Exception e) {
// TODO: handle exception
}finally{
helper.closeResource(null, helper.pst, helper.conn);
}
return n;
}

public T getById(String className,String pk,int id){

ResultSet rs=null;
try {
String classPath="com.beans."+className;
Class clazz=Class.forName(classPath);
//select * from 表 where id=?
//构建sql
String sql="select * from "+className+" where "+pk+"=?";

rs=helper.execQuery(sql, id);
if(rs.next()){
//创建新对象
Object obj= clazz.newInstance();
Method[]methods=clazz.getDeclaredMethods();
for(Method m:methods){
//找到所有的set方法 setName setAge
if(m.getName().substring(0, 3).equals("set")){
m.invoke(obj, rs.getObject(m.getName().substring(3).toLowerCase()));
}
}
return (T)obj;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
helper.closeResource(rs, helper.pst, helper.conn);
}
return null;
}

public ArrayList<T> getByWhere(String where,String className){
ResultSet rs=null;
ArrayList<T> arr=new ArrayList<T>();
try {
String classPath="com.beans."+className;
Class clazz=Class.forName(classPath);
//select * from 表 where id=?
//构建sql
String sql="select * from "+className+" "+where;

rs=helper.execQuery(sql, null);
while(rs.next()){
//创建新对象
Object obj= clazz.newInstance();
Method[]methods=clazz.getDeclaredMethods();
for(Method m:methods){
//找到所有的set方法 setName setAge
if(m.getName().substring(0, 3).equals("set")){
m.invoke(obj, rs.getObject(m.getName().substring(3).toLowerCase()));
}
}
arr.add((T)obj);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
helper.closeResource(rs, helper.pst, helper.conn);
}
return arr;
}








}


原创粉丝点击