1. 程式人生 > >java 公用的增刪改查

java 公用的增刪改查

  使用公共的增刪改查,可以節省時間,也可以減少程式碼量。

在BaseDao 介面中:

public interface BaseDao {
	/**
	 * 通用的增刪改方法
	 * @param sql
	 * @param param
	 * @return
	 */
public int excutesql(String sql,Object[]param);
/**
 * 通用的改方法
 * @param sql     需要查詢的sql語句
 * @param classt  需要返回的字符集
 * @param param   引數
 * @return
 */
public List excuteQuery(String sql, Class classt,Object...param);
}

在BaseDaoImpl中:
public class BaseDaoImpl implements BaseDao{
/**
 * 通用的增刪改的方法
 */
	public int exetesql(String sql, Object[] param) {
//獲取連線
		Connection connection = JDBCUtil.connection();
		try {

			PreparedStatement p = connection.prepareStatement(sql);
		//設定引數
			for(int i=0;i<param.length;i++){
				p.setObject(i+1, param[i]);
			}
			int i=p.executeUpdate();
			return i;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}
/**
 * 通用的查詢方法
 */
public List excuteQuery(String sql, Class classt, Object... param) {
	List list = new ArrayList();
 //1.獲取連結
	Connection connection = JDBCUtil.connection();
	try {
//2.批處理
		PreparedStatement p = connection.prepareStatement(sql);
//3.設定引數
		if(null!=param){
			for(int i=0;i<param.length;i++){
				p.setObject(i+1, param[i]);
				
			}
		}
	//4.獲取結果集
		ResultSet r= p.executeQuery();
	//5.獲取物件
	  Object obj;
	//6.獲取位元組碼物件裡面的屬性
     Field[] fields = classt.getFields();
    //7。得到結果集的欄位數,欄位名
     ResultSetMetaData metaData = r.getMetaData();
    // System.out.println("");
     //8.迴圈輸出
     int columnCount = metaData.getColumnCount();//9.獲取列的總數
     System.out.println(columnCount);
     while(r.next()){
    	obj = classt.newInstance();
    	//10.迴圈列
    	for(int i=1;i<= columnCount; i++){
              //11.獲取列
    		String columnLabel = metaData.getColumnLabel(i);//別名
    		String columnName = metaData.getColumnName(i);//列名
    		
    		System.out.println("columnLabel: "+columnLabel);
    		System.out.println("columnName: "+columnName);
    	//	12.根據屬性名稱獲取對應的屬性
    		if(null!=columnLabel){
    		Field df = classt.getDeclaredField(columnName);
    	
    		if(null!=df){
    			df.setAccessible(true);//13.將私有的開啟
    			df.set(obj, r.getObject(columnLabel));//14.設值,設列名
    		}
    		}
    	}
    	//15.新增到list裡面
    	list.add(obj);
     }
	} catch (SQLException e) {
		e.printStackTrace();
	} catch (InstantiationException e) {
		e.printStackTrace();
	} catch (IllegalAccessException e) {
		e.printStackTrace();
	} catch (SecurityException e) {
		e.printStackTrace();
	} catch (NoSuchFieldException e) {
		e.printStackTrace();
	}
	
	return list;
}

在JDBCUtil工具類:
public class JDBCUtil {
static String NAME="root";
static String PASS="root";
static String URL="jdbc:mysql://127.0.0.1:3306/mysql";
static String DRIVER="com.mysql.Driver";
static
{
	//1.讀取properties檔案
	InputStream resourceAsStream = JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
	//2.獲取一個properties物件
	Properties properties = new Properties();
	//3.判斷不為空
	if(resourceAsStream!=null)
	{
		try {
			properties.load(resourceAsStream);
			NAME=properties.getProperty("NAME");
			PASS=properties.getProperty("PASS");
			URL=properties.getProperty("URL");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
  public static Connection connection()
  {
	  Connection con=null;
	  try {
		Class.forName("DRIVER");
		con=DriverManager.getConnection(URL, NAME, PASS);
		
	} catch (ClassNotFoundException e) {
		e.printStackTrace();
	} catch (SQLException e) {
		e.printStackTrace();
	}
	  
	return con;
}

jdbc.properties配置檔案:
name=root
pass=root
url=jdbc:mysql://127.0.0.1:3306/mysql
driver=com.mysql.jdbc.Driver
如果我需要查詢資料庫的 Commodity表時:1.CommodityDao 介面先繼承BaseDao類,裡面可以什麼都不用寫
public interface CommodityDao extends BaseDao {
}
2.在CommodityDaoImpl 實現類中也繼承相應的介面
public class CommodityDaoImpl extends BaseDaoImpl implements CommodityDao{
}
3.在service層呼叫dao層
public interface CommodityService {
public List<CommodityEntity> getCommodityList();}
public class CommodityServiceImpl implements CommodityService {
	
	CommodityDao commodityDao=new CommodityDaoImpl();

	public List<CommodityEntity> getCommodityList(){
		String sql="select * from CommodityEntity";
		 List<CommodityEntity> list = commodityDao.excuteselect(sql, CommodityEntity.class, new Object[]{});
		return list;
	}
4.最後直接在action層掉用service層就可以了
// 呼叫service,呼叫對應的方法
	CommodityService commodityService = new CommodityServiceImpl();