java泛型类的使用
来源:互联网 发布:pt6.0设置trunk端口 编辑:程序博客网 时间:2024/06/09 13:49
泛型类的使用
我们都知道泛型的使用可以提高使用集合框架的效率和安全性和易用性 例如:List<Account> list = newArrayList<Account>();他标注只能传入Account类型的数据,在进行迭代和使用时可以直接取出不用强制类型转换
For(Account account:list){ System.out.println(account.getName());}
泛型类就是在类的头上加上泛型标志 public class DBHelp<T>{ }
T是一个占位符,代表可以传入所有类型,泛型类主要用于对类的公有化,提高类的内聚能力并降低其他类与该类的耦合程度和方便使用
例如:
DBHelp类的查询部分实例
public class DBHelp<T> { privatefinal String DRIVER = "com.mysql.jdbc.Driver"; privatefinal String URL = "jdbc:mysql:///mydb"; privatefinal String USERNAME = "root"; privatefinal String PASSWORD = "root"; /** * 获取数据库连接对象 * @return */ publicConnection getConnection() { try{ Class.forName(DRIVER); Connectionconn = DriverManager.getConnection(URL,USERNAME,PASSWORD); returnconn; }catch (ClassNotFoundException e) { e.printStackTrace(); }catch (SQLException e) { e.printStackTrace(); } returnnull; } public TexecuteQueryForObject(String sql,RowMapper<T> rowMapper,Object... args) { Connectionconn = null; PreparedStatementstat = null; ResultSetrs = null; Tobj = null; try{ conn= getConnection(); stat= conn.prepareStatement(sql); for(int i = 0; i < args.length; i++) { stat.setObject(i+1,args[i]); } rs= stat.executeQuery(); if(rs.next()){ obj= rowMapper.mapperRow(rs); } }catch (SQLException e) { e.printStackTrace(); }finally { close(rs,stat, conn); } returnobj; } publicList<T> executeQueryForList(String sql,RowMapper<T>rowMapper,Object... args) { Connectionconn = null; PreparedStatementstat = null; ResultSetrs = null; List<T>list = new ArrayList<T>(); try{ conn= getConnection(); stat= conn.prepareStatement(sql); for(int i = 0; i < args.length; i++) { stat.setObject(i+1,args[i]); } rs= stat.executeQuery(); while(rs.next()){ list.add(rowMapper.mapperRow(rs)); } }catch (SQLException e) { e.printStackTrace(); }finally { close(rs,stat, conn); } returnlist; }}
RowMapper 接口
public interface RowMapper<T> { public TmapperRow(ResultSet rs) throws SQLException;}
我们可以创建一个DBHelp泛型类来专门处理数据库连接查询和修改数据,增删改都很好实现,但查询要返回数据,如果只操纵一个表还好些,如果操纵很多表因为不知道某一时间到底是用那个表,就要重写所有表的查询方法很不方便,使用泛型类不需知道传入的是哪个类,所以使用T表示未知类有T的地方都代表传入的某个类,我们都执行sql语句当返回一个ResultSet对象,我们建立一个RoeMapper接口用来映射行数据,在表的处理类中实现该接口,实现一行数据映射到一个表对应的Bean中,我们传入RowMapper接口将ResultSet实例传入RowMapper中有接口指向实现类知道,是由某个实现类实现了数据的封装和返回,在DBHelp中只需查询传入和返回数据,所以我们不需知道传入的是哪个类,只要它实现类RowMapper接口就可以查询数据。泛型类就是使用一个占位符来代替实际类。
UserDao实现
public class UserDao { privateDBHelp<User> db = new DBHelp<User>(); publicvoid del(int id) { Stringsql = "delete from t_user where id = ?"; db.executeSQL(sql,id); } publicList<User> findAll() { Stringsql = "select id,username,password from t_user"; returndb.executeQueryForList(sql, new RowMapper<User>()); } publicUser findById(int id) { Stringsql = "select id,username,password from t_user where id = ?"; returndb.executeQueryForObject(sql, new UserRowMapper(), id); } //内部类 privateclass UserRowMapper implements RowMapper<User>{ @Override publicUser mapperRow(ResultSet rs) throws SQLException { Useruser = new User(); user.setId(rs.getInt("id")); user.setUserName(rs.getString("username")); user.setPassWord(rs.getString("passWord")); returnuser; } } }
- java泛型类的使用
- java泛型类的使用
- Java 自定义泛型类的使用
- 【Java】Java栈的使用
- [Java] Java反射的使用
- Java泛型类,方法使用,Java继承的歪解
- Java Servlet的使用
- 使用Java的配置文件
- java DateFormat的使用
- JAVA JXL的使用
- 使用JAVA的Properties
- java 接口的使用
- java的ArrayList使用
- java vector的使用
- Java UUID的使用
- java定时器的使用
- java HashSet的使用
- 使用Java的反思
- 十道海量数据处理面试题与十个方法大总结
- Linux服务器维护 统计连接数查看外部IP
- 根据参数,输出产品个数
- 线程池中线程的控制
- 深入浅出--UNIX多进程编程之fork()函数
- java泛型类的使用
- poj 1733 parity game
- 虚拟存储器的分类介绍
- WCF的流程
- C# API 如何保证使用托管对象的平台调用成功
- StretchDIBits函数(来自MSDN:StretchDIBits Function)
- html5 小游戏
- css样式兼容性问题的处理办法
- java webservice调用c#接口并传多个参数