通用的查询方法 API

package jdbc.cn;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.HashMap;
import java.util.Map;


import org.junit.Test;


public class testMetoData {


@Test
public void sqlStudetn() throws Exception{

String sql="SELECT id id,type type,studentName studentName" +
",location location,grade grade FROM student WHERE id =?";
Student student = get(Student.class,sql,6);
System.out.println(student);
}
public <T> T get(Class<T> clazz,String sql,Object ... args) throws Exception{
T entity = null;
Connection connection =null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
testJDBC t=new testJDBC();
//1.得到ResultSet结果集
connection=t.test1();
preparedStatement=connection.prepareStatement(sql);
for(int i=0;i<args.length;i++){
preparedStatement.setObject(i+1, args[i]);
}
resultSet=preparedStatement.executeQuery();
//2.得到ResultSetMetaData对象
ResultSetMetaData me=resultSet.getMetaData();
//3.创建一个Map<String,Object>对象,键:SQL查询的列的别名,值:列的值
Map<String, Object> map =new HashMap<>();
//4.处理结果集,利用ResultSetMetaDate填充3对应的Map对象
while(resultSet.next()){
for(int i =0;i<me.getColumnCount();i++){
String column=me.getColumnLabel(i+1);
Object values=resultSet.getObject(i+1);
map.put(column, values);
}
}
//5.若Map不为空集,利用反射创建clazz对应的对象
if(map.size()>0){
entity=clazz.newInstance();
}
//6.遍历Map对象,利用反射为Class对象对应的属性赋值
for(Map.Entry<String, Object> entry: map.entrySet()){
String FieldName = entry.getKey();
Object values =entry.getValue();
ReflectionUtils.setFieldValue(entity, FieldName, values);

}

return entity;

}

}

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


package CRUD_cn;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;


import org.junit.Test;




public class read_List { 


Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet =null;
JDBC J=new JDBC();


@Test//测试
public void test() throws Exception{
String sql = "SELECT * FROM student ";
List<Student> student =this.readAll(Student.class, sql);
System.out.print("");
System.out.println(student);
}


//查询多条记录,返回对应的对象集合
public  <T> List<T>   readAll(Class<T> clazz,String sql,Object ... args) throws Exception{
List<T> list=new ArrayList<>();
//1.得到一个resultSet结果集
connection =J.getSQL();
preparedStatement=connection.prepareStatement(sql);
for(int i=0;i<args.length;i++){
preparedStatement.setObject(i+1, args[i]);
}
resultSet=preparedStatement.executeQuery();
//2.把每个map对象放到list集合中
List<Map<String, Object>> values = new ArrayList();
//3.获取数据元 metadata ,得到一个ResultSetMetaDate  对象
ResultSetMetaData data=resultSet.getMetaData();
//4.创建一个map,处理resultSet集合,  用循环把每一个列名遍历出来
Map<String, Object> map =null;
while(resultSet.next()){
map= new HashMap<>();
for(int j=0;j<data.getColumnCount();j++){
String column=data.getColumnLabel(j+1);
Object val=resultSet.getObject(j+1);
map.put(column, val);
}
//把map对象放进list中
values.add(map);
}
//5.判断list集合是否为空,否遍历list集合,得到一个个map对象,
//再把map对象转为class参数对应的Object对象
T bean =null;
if(values.size()>0){
for(Map<String, Object> m: values){
bean=clazz.newInstance();
for(Entry<String, Object> entry:m.entrySet()){
String fieldName=entry.getKey();
Object value=entry.getValue();
ReflectionUtils.setFieldValue(bean, fieldName, value);
}
list.add(bean);
}
}
return list;
}


}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值