您的位置:首页 > 编程语言 > Java开发

使用元组封装变量(java泛型的利用) 达到代码复用的目的

2017-03-28 22:36 337 查看
  背景:今天在学习JDBC时,为了降低对象之间耦合,需要重复写某些代码:

package wyh.service.impl;

import wyh.jdbc.dao.BaseDao;
import wyh.jdbc.dao.Dao;
import wyh.service.IDoLogin;

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

/**
* Created by wyh on 19/03/2017.
*/
public class DoLoginImpl implements IDoLogin {
private Dao dao;
public DoLoginImpl(){
dao=new Dao();
}
@Override
public boolean verify(String username, String password) throws SQLException {
String sql="SELECT 1 FROM s_user WHERE username=? AND userPwd =?";
Connection connection= BaseDao.getConnection();
PreparedStatement preparedStatement=connection.prepareStatement(sql);
ResultSet resultSet=dao.query(preparedStatement,sql,username,password);
boolean flag=resultSet.next();//if true means result has element
BaseDao.closeResource(resultSet,preparedStatement,connection);
return flag;
}


因为在Biz层根据实际业务不同需要对资源进行关闭操作,所以采用了未强封装方法Connection connection= BaseDao.getConnection();PreparedStatement preparedStatement=connection.prepareStatement(sql这两个对象需要重复使用,怎么办呢?

在一个类中定义一个方法返回Object数组么 
Object[] combo=new Object[]{getConnection(),getPreparedStatement()} 
然后通过下标connection=combo[0],preparedStatement[1]这样的方法么?是可以,但是可读性不强
或者利用泛型,可是不同类型只能用Object呀,也不太好
List<Object> list=new ArrayList<>();
于是在网上找,最后定下来元组.

-----------------------------------------------------------------------------
  解决:

  元组(tuple),元组也称为数据传送对象或信使。元组是将一组对象直接打包存储于其中的一个单一对象,这个容器对象允许读取其中元素,但是不允许向其中存放新的对象。


  通常,元组可以具有任意长度,同时元组中的对象可以是任意不同的类型。我们能够为每一个对象指明其类型,并且可以正确读取到数据,这就是元组可以提供的功能。我们要处理不同长度的问题,需要创建多个不同的元组。

package wyh.jdbc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
* Created by wyh on 28/03/2017.
*/
public class Tuple<C extends Connection,P extends PreparedStatement> {
public C connection;
public P preparedStatement;
@SuppressWarnings("unchecked")
public Tuple(String sql){
try {
connection=(C)BaseDao.getConnection();
preparedStatement=(P)connection.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args){
Tuple<?,?> combo=new Tuple<Connection, PreparedStatement>("test");
System.out.println(combo.connection);
System.out.println(combo.preparedStatement);

}
}


 元组另一个应用http://www.cnblogs.com/davidwang456/p/4514659.html

  使用他来保存数据. 

  和数据bean相比是没有set方法,只有get方法

  希望对大家有所启发
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: