• 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="添加" />&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>
  • 相关阅读:
    我的QT5学习之路(二)——第一个程序
    我的QT5学习之路(目录)
    我的QT5学习之路(一)——浅谈QT的安装和配置
    memcpy、memmove、memset、memchr、memcmp、strstr详解
    UDP 单播、广播和多播
    C++重载操作符operator
    testNG官方文档翻译-4 运行TestNG
    testNG官方文档翻译-3 testng.xml
    testNG官方文档翻译-2 注解
    testNG官方文档翻译-1 简介
  • 原文地址:https://www.cnblogs.com/guoyansi19900907/p/4405013.html
Copyright © 2020-2023  润新知