你的位置:首页 > Java教程

[Java教程]java中的DAO设计模式


创建数据库和表

sql语句:

DROP TABLE IF EXISTS product;CREATE TABLE product(    product_id varchar(20) NOT NULL,    product_name varchar(50) DEFAULT NULL,    price decimal(6,2) DEFAULT NULL,    info varchar(100) DEFAULT NULL,    PRIMARY KEY(product_id))ENGINE=InnoDB DEFAULT CHARSET=utf8;

 文件目录如下

Product.java

 1 package com.g.pojo; 2  3 public class Product { 4   private String product_id; 5   private String product_name; 6   private double price; 7   private String info; 8   public String getProduct_id() { 9     return product_id;10   }11   public void setProduct_id(String product_id) {12     this.product_id = product_id;13   }14   public String getProduct_name() {15     return product_name;16   }17   public void setProduct_name(String product_name) {18     this.product_name = product_name;19   }20   public double getPrice() {21     return price;22   }23   public void setPrice(double price) {24     this.price = price;25   }26   public String getInfo() {27     return info;28   }29   public void setInfo(String info) {30     this.info = info;31   }32   33   34   35 }

ProductDao.java代码

 1 package com.g.dao; 2  3 import java.util.List; 4  5 import com.g.pojo.Product; 6  7 public interface ProductDao { 8   /** 9    * 数据库 新增数据10    * @param product 要增加的数据对象11    * @return是否增加成功的标志12    * @throws Exception 如果有异常,将直接抛出13   */14   public boolean addProduct(Product product) throws Exception;15   16   /**17    * 查询全部的Product18    * @param product_name 产品名称19    * @return返回全部的查询结果,每一个product对象表示表的一行记录20    * @throws Exception 如果有异常,将直接抛出21   */22   public List<Product> findAll(String product_name)throws Exception;23   24   /**25    * 根据产品编号查询产品26    * @param product_id 产品编号27    * @return 产品对象28    * @throws Exception 如果有异常,将直接抛出29   */30   public Product findByProductId(String product_id)throws Exception;31   32 }

ProductService.java代码

 1 package com.g.service; 2  3 import java.util.List; 4  5 import com.g.dao.ProductDao; 6 import com.g.dao.ProductDaoImpl; 7 import com.g.db.DBConnection; 8 import com.g.pojo.Product; 9 10 /**11  * 操作数据库12  * @author 思思博士13  *14 */15 public class ProductService implements ProductDao{16   17   private DBConnection dbconn=null;18   private ProductDao dao=null;19   //在构造方法中实例化数据库连接,同时实例化dao对象20   public ProductService() throws Exception{21     this.dbconn=new DBConnection();22     //实例化ProductDao的实现类23     this.dao=new ProductDaoImpl(this.dbconn.getConnection());        24   }  25   public boolean addProduct(Product product) throws Exception {26     boolean flag=false;27     try{28       if(this.dao.findByProductId(product.getProduct_id())==null){29         //如果要插入的产品编号不存在30         flag=this.dao.addProduct(product);//新增一条产品信息31       }32     }33     catch (Exception e) {34       throw e;35     }finally{36       this.dbconn.close();37     }38     39     return flag;40   }41 42   public List<Product> findAll(String keyWord) throws Exception {43     List<Product> all=null; //定义产品返回的集合44     try {45       all=this.dao.findAll(keyWord);46     } catch (Exception e) {47       throw e;48     }finally{49       this.dbconn.close();50     }51     return all;52   }53 54   public Product findByProductId(String product_id) throws Exception {55     Product product=null;56     try {57       product=this.dao.findByProductId(product_id);58     } catch (Exception e) {59       throw e;60     }finally{61       this.dbconn.close();62     }63     return product;64   }65 }

 

DBConnection.java代码

 1 package com.g.db; 2  3 import java.sql.Connection; 4 import java.sql.DriverManager; 5  6 public class DBConnection { 7   private static final String Driver="com.mysql.jdbc.Driver"; 8   private static final String Url="jdbc:mysql://127.0.0.1:3306/testweb"; 9   private static final String User="root";10   private static final String Password="gys";11   private Connection conn=null;12   13   //进行数据库连接14   public DBConnection() throws Exception{15     try{16       //用反射加载数据库驱动17       Class.forName(Driver);18       this.conn=DriverManager.getConnection(Url,User,Password);19     }20     catch (Exception e) {21       throw e;22     }23   }24   //取得数据库的连接25   public Connection getConnection(){26     return this.conn;    27   }28   //关闭数据库29   public void close() throws Exception{30     if(this.conn!=null){31       try {32         this.conn.close();33         34       } catch (Exception e) {35         throw e;36       }37     }38   }39   40 }

 

 

ProductDaoImpI.java代码

 1 package com.g.dao; 2  3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.util.ArrayList; 7 import java.util.List; 8  9 import com.g.pojo.Product;10 11 /**12  * 实现DAO接口的类.但是不负责数据库的打开和关闭13  * @author 思思博士14  *15 */16 public class ProductDaoImpl implements ProductDao{17   private Connection conn=null;18   private PreparedStatement pstmt=null;19   //通过构造方法取得数据库连接20   public ProductDaoImpl(Connection conn){21     this.conn=conn;22   }23   public boolean addProduct(Product product) throws Exception {24     boolean flag=false;25     String sql="insert into product(product_id,product_name,price,info) values(?,?,?,?)";26     this.pstmt=this.conn.prepareStatement(sql);27     this.pstmt.setString(1,product.getProduct_id());28     this.pstmt.setString(2,product.getProduct_name());29     this.pstmt.setDouble(3,product.getPrice());30     this.pstmt.setString(4,product.getInfo());31     32     if(this.pstmt.executeUpdate()>0){33       flag=true;34     }35     this.pstmt.close();36     return flag;37   }38   39   public List<Product> findAll(String product_name) throws Exception {    40     List<Product> list=new ArrayList<Product>();41     String sql="select product_id,product_name,price,info from product";42     if(product_name!=null&&!"".equals(product_name)){43       sql="select product_id,product_name,price,info from product where product_name like ?";44       this.pstmt=this.conn.prepareStatement(sql);45       this.pstmt.setString(1,"%"+product_name+"%");46     }47     else {48       this.pstmt=this.conn.prepareStatement(sql);49     }50     ResultSet rs=this.pstmt.executeQuery();51     Product product=null;52     while(rs.next()){53       product=new Product();54       product.setProduct_id(rs.getString(1));55       product.setProduct_name(rs.getString(2));56       product.setPrice(rs.getDouble(3));57       product.setInfo(rs.getString(4));58       list.add(product);59     }60     this.pstmt.close();61     return list;62   }63   64   public Product findByProductId(String product_id) throws Exception {65     Product product=null;66     String sql="select product_id,product_name,price,info from product where product_id=?";67     this.pstmt=this.conn.prepareStatement(sql);68     this.pstmt.setString(1,product_id);69     ResultSet rs=this.pstmt.executeQuery();70     if(rs.next()){71       product=new Product();72       product.setProduct_id(rs.getString(1));73       product.setProduct_name(rs.getString(2));74       product.setPrice(rs.getDouble(3));75       product.setInfo(rs.getString(4));76     }77     this.pstmt.close();78     return product;79   }80   81   82 }

DAOFactory.java代码

 1 package com.g.factory; 2  3 import com.g.dao.ProductDao; 4 import com.g.service.ProductService; 5  6 public class DAOFactory { 7   public static ProductDao getIEmpDAOInstance() throws Exception{ 8     //取得业务操作类 9     return new ProductService();10   }11 }

TestInsertProduct.java代码

 1 package com.g.test; 2  3 import com.g.factory.DAOFactory; 4 import com.g.pojo.Product; 5  6 public class TestInsertProduct { 7   public static void main(String[] args) { 8     Product product=null; 9     try {10       for(int i=0;i<5;i++){11         product=new Product();12         product.setProduct_id("350115001010"+i);13         product.setProduct_name("水杯"+i);14         product.setPrice(100+i);15         product.setInfo("这是一个精美的杯子"+i);16         DAOFactory.getIEmpDAOInstance().addProduct(product);17       }18     } catch (Exception e) {19       e.printStackTrace();20     }21   }22 }

add.jsp代码

 1 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 %> 6  7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 8 <html> 9  <head>10   <base href="<%=basePath%>">11   12   <title>添加产品</title>13  </head>14  15  <body>16   <form action="insert.jsp" method="post">17     产品编号:<input name="product_id" /><br/>18     产品名称:<input name="product_name" /><br />19     产品价格:<input name="price" /><br/>20     产品信息:<textarea rows="5" cols="15" name="info"></textarea><br/>21     <input type="submit" value="添加" />&nbsp;&nbsp;22     <input type="reset" value="重置" />23   </form>24  </body>25 </html>

insert.jsp代码

 1 <%@page import="com.g.factory.DAOFactory"%> 2 <%@page import="com.g.pojo.Product"%> 3 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 7 %> 8  9 <%10 request.setCharacterEncoding("utf-8");11 %>12 13 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">14 <html>15  <head>16   <base href="<%=basePath%>">  17   <title>执行添加产品</title>18  </head>19  20  <body>21   <%22     Product product=new Product();23     product.setProduct_id(request.getParameter("product_id"));24     product.setProduct_name(request.getParameter("product_name"));25     product.setPrice(Double.parseDouble(request.getParameter("price")));26     product.setInfo(request.getParameter("info"));27     boolean flag=DAOFactory.getIEmpDAOInstance().addProduct(product);//执行添加操作28     if(flag){29     %>30     <h4>添加产品信息成功</h4>31     <%}else{%>32     <h4>添加产品信息失败.</h4>33     <%} %>34  </body>35 </html>

list.jsp代码

 1 <%@page import="com.g.factory.DAOFactory"%> 2 <%@page import="com.g.pojo.Product"%> 3 <%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> 4 <% 5 String path = request.getContextPath(); 6 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 7 %> 8 <%request.setCharacterEncoding("utf-8"); %> 9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">10 <html>11  <head>12   <base href="<%=basePath%>">  13   <title>查询产品列表</title>14  </head>15  16  <body>17  <%18    String product_name=request.getParameter("product_name");19    if(product_name==null)20       product_name="";21     List<Product> list=DAOFactory.getIEmpDAOInstance().findAll(product_name);22   %>23   <form action="list.jsp" method="post">24     请输入产品名称:<input name="product_name" value="<%=product_name %>"/>25     <input type="submit" value="提交" />26   </form>27   <table>28     <tr>29       <td>产品编号</td>30       <td>产品名称</td>31       <td>产品价格</td>32       <td>产品信息</td>33     </tr>34     <%35       for(int i=0;i<list.size();i++){36         Product p=list.get(i);//取出每一个产品37       %>38       <tr>39         <td><%=p.getProduct_id() %></td>40         <td><%=p.getProduct_name() %></td>41         <td><%=p.getPrice() %></td>42         <td><%=p.getInfo() %></td>43       </tr>44       <%}%>45     46     47   </table>48  </body>49 </html>