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 * 查询全部的Product 18 * @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="添加" /> 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>