java 公用的增刪改查
阿新 • • 發佈:2019-02-03
使用公共的增刪改查,可以節省時間,也可以減少程式碼量。
在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();