首页 > 代码库 > 泛型的使用
泛型的使用
目前这个项目使用的jsp+servlet+javabean,没有使用其它的框架。在处理数据库的时候,多张表就对应多个dao,而每个dao都有增删改查的方法,显得很冗余。于是写了一个CommonDao,其中包含了其他dao里面共有的一些方法。然后让其他的dao类继承CommonDao,servlet中直接使用CommonDao中的相应方法。那么这个时候遇到了一个问题,怎样判断需要对哪张表执行相应的操作。这时可以从servlet向dao类传入相应的sql,同时也需要判断传入的JavaBean对象,因为需要向sql中赋值。那么这个时候就需要使用泛型达到这一目的。
使用泛型时:
1 public class CommonDao<T> { 2 private ExecuteStatement executeStatement = new ExecuteStatement(); 3 private ReturnList returnList = new ReturnList(); 4 private T t; 5 6 //添加数据到数据库 7 public void add(T t, String sql) { 8 Connection conn = null; 9 PreparedStatement stmt = null;10 try {11 conn = DataBaseUtil.getConnection();12 stmt = conn.prepareStatement(sql);13 if(t instanceof Customer) { //判断泛型t的类型14 Customer customer = (Customer) t;15 stmt = executeStatement.setStatement(customer,stmt);16 }17 else if(t instanceof Person) {18 Person person = (Person) t;19 stmt = executeStatement.setStatement(person,stmt);20 }21 else if(t instanceof Department) {22 Department department = (Department) t;23 stmt = executeStatement.setStatement(department,stmt);24 }25 stmt.executeUpdate();26 } catch (SQLException e) {27 e.printStackTrace();28 } finally {29 DataBaseUtil.close(stmt, conn);30 }31 }
对应的其他dao:
1 public class CustomerDao<T> extends CommonDao<T>{ 2 3 public CustomerDao() { 4 5 } 6 7 public void add(Customer customer) { 8 Connection conn = null; 9 PreparedStatement stmt = null;10 String sql = "insert into SYSCUSTOMER(cuscode,cusname,cusdepcode,cuspercode,devdate,busdate,exitdate," +11 "cellphone,email,address,tenid,ufts) values(?,?,?,?,?,?,?,?,?,?,?,?)";12 try {13 conn = DataBaseUtil.getConnection();14 stmt = conn.prepareStatement(sql);15 stmt.setString(1, customer.getCusCode());16 stmt.setString(2, customer.getCusName());17 stmt.setString(3, customer.getCusDepCode());18 stmt.setString(4, customer.getCusPerCode());19 stmt.setString(5, customer.getDevDate());20 stmt.setString(6, customer.getBusDate());21 stmt.setString(7, customer.getExitDate());22 stmt.setString(8, customer.getCellphone());23 stmt.setString(9, customer.getEmail());24 stmt.setString(10, customer.getAddress());25 stmt.setString(11, customer.getTenId());26 long currentTime = System.currentTimeMillis(); //获取当前时间,毫秒级别,距离1970年27 Timestamp deptIsEnd = new Timestamp(currentTime); //获取时间戳28 stmt.setTimestamp(12, deptIsEnd);29 stmt.executeUpdate();30 } catch (SQLException e) {31 e.printStackTrace();32 } finally {33 if(stmt != null) {34 DataBaseUtil.closeStatement(stmt);35 }36 if(conn != null) {37 DataBaseUtil.closeConnection(conn);38 }39 }40 }
executeStatement.setStatement(customer,stmt)代码:
1 //为customer表执行PreparedStatement方法 2 public PreparedStatement setStatement(Customer customer, PreparedStatement stmt) { 3 try { 4 stmt.setString(1, customer.getCusCode()); 5 stmt.setString(2, customer.getCusName()); 6 stmt.setString(3, customer.getCusDepCode()); 7 stmt.setString(4, customer.getCusPerCode()); 8 stmt.setString(5, customer.getDevDate()); 9 stmt.setString(6, customer.getBusDate());10 stmt.setString(7, customer.getExitDate());11 stmt.setString(8, customer.getCellphone());12 stmt.setString(9, customer.getEmail());13 stmt.setString(10, customer.getAddress());14 stmt.setString(11, customer.getTenId());15 long currentTime = System.currentTimeMillis(); //获取当前时间,毫秒级别,距离1970年16 Timestamp deptIsEnd = new Timestamp(currentTime); //获取时间戳17 stmt.setTimestamp(12, deptIsEnd);18 } catch (SQLException e) {19 e.printStackTrace();20 }21 return stmt;22 }
CustomerServlet的add方法:
1 /* 2 * 功能:添加数据并返回到customer.jsp页面 3 */ 4 @SuppressWarnings("unchecked") 5 public void add(HttpServletRequest request, HttpServletResponse response) 6 throws ServletException, IOException { 7 String cusCode = request.getParameter("cuscode"); 8 String cusName = null; 9 try {10 cusName = new String(request.getParameter("cusname").getBytes("ISO-8859-1"),"utf-8");11 } catch (UnsupportedEncodingException e1) {12 e1.printStackTrace();13 }14 String cusDepCode = request.getParameter("cusdepcode");15 String cusPerCode = request.getParameter("cuspercode");16 String devDate = request.getParameter("devdate");17 String busDate = request.getParameter("busdate");18 String exitDate = request.getParameter("exitdate");19 Customer customer = new Customer();20 customer.setCusCode(cusCode);21 customer.setCusName(cusName);22 customer.setCusDepCode(cusDepCode);23 customer.setCusPerCode(cusPerCode);24 customer.setDevDate(devDate);25 customer.setBusDate(busDate);26 customer.setExitDate(exitDate);27 String sql = "insert into SYSCUSTOMER(cuscode,cusname,cusdepcode,cuspercode,devdate,busdate,exitdate," +28 "cellphone,email,address,tenid,ufts) values(?,?,?,?,?,?,?,?,?,?,?,?)";29 //customerDao.add(customer);30 customerDao.add(customer, sql);31 select(request, response);32 try {33 response.sendRedirect("common/customer.jsp");34 } catch (IOException e) {35 e.printStackTrace();36 }37 }
这样就很好的解决了代码冗余的问题,当然后面还可以再优化。
泛型的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。