我们学习Java都听说过泛型,泛型可以很大程度上的简化代码。那么,首先让我们了解何谓泛型?Java 泛型是 JDK 5 中引入的一个新特性,–JDK5以后, Java引入了“参数化类型(parameterized type)”的概念, 该概念也称之为泛型(Generic)。所谓泛型就是允许在定义类、接口或方法时使用类型形参,该类型形参将在声明变量、创建对象或者调用方法时动态指定(即传入实际的类型参数,可称为类型实参),可以说泛型的出现简化了代码,提高了程序的健壮性。 泛型有泛型接口、泛型类、泛型方法。今天则讲一讲泛型在DBLink 中的应用。
首先看一看如下代码
public <E> E select(String sql,IRowMapper<E> rowMapper) {
Connection con = null;
Statement sta = null;
ResultSet rs = null;
try {
con = getconnection();
sta = con.createStatement();
rs = sta.executeQuery(sql);
return rowMapper.rowMapper(rs);
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(con,sta,rs);
}
return null;
}
这是DBLink中定义的一个查询泛型方法(泛型一般用E表示)、定义泛型方法的好处是我们可以任意觉得方法的返回值类型,如可以我们可以返回一个数组甚至是一个类。其中的IRowMapper是一个泛型接口。代码如下
public interface IRowMapper <E>{
E rowMapper(ResultSet rs);
}
那么如何调用这个泛型方法呢?我们以返回一个类为例
package test;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.xt.util.MD5util;
import com.xt.util.db.DBlink;
import com.xt.util.db.IRowMapper;
import vo.UserInfo;
public class Test1 {
public static void main(String[] args) {
String sql="select *from user_info where id=?";
List<UserInfo> userinfos= new DBlink().select(sql,new IRowMapper<List<UserInfo>>() {
List<UserInfo> userinfos=new ArrayList<>();
@Override
public List<UserInfo> rowMapper(ResultSet rs) {
try {
while(rs.next()) {
UserInfo userInfo=new UserInfo();
userInfo.setId(rs.getString("id"));
userinfos.add(userInfo);
}
} catch (SQLException e) {
e.printStackTrace();
}
return userinfos;
}
});
for (UserInfo userInfo : userinfos) {
System.out.println(userInfo.getId());
}
}
}
那么让我们分析一下代码是如何执行的,首先UserInfo是自己创建的一个类,其中有String类型的id属性。创建了List 集合 调用DBLink的select方法,传入了sql语句和IRowMapper 对象,然后进入DBLink中的select方法,在select连接数据库中的user_info表,继续往下运行直到return rowMapper.rowMapper(rs); 然后返回到Test类中 public List<UserInfo> rowMapper(ResultSet rs)重写了IRowMapper 接口中的 rowMapper(ResultSet rs)抽象方法 然后while循环遍历user_info表中的数据 rs.getString("id")获取到表中的id并保存到创建好的userinfo对象中,然后用userinfos.add(userInfo)添加到userinfos集合中。while循环执行完后userinfos集合也就添加完成了。最后用加强for循环遍历集合就可以输出我们想要获取的值。至此方法执行完毕