java中的DAO设计模式

来源:互联网 发布:python 扑克 编辑:程序博客网 时间:2024/06/02 05:53

source: http://www.cnblogs.com/guoyansi19900907/p/4405013.html

【感觉值得借鉴】

java中的DAO设计模式

Posted on 2015-04-08 23:10 思思博士 阅读(849) 评论(0) 编辑 收藏

创建数据库和表

sql语句:

1
2
3
4
5
6
7
8
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>
复制代码

 


0 0
原创粉丝点击