采用适配器进行封装jdbc


代码地址:https://gitee.com/jkangle/test.git

具体的思路

  1. 将所有要实现的功能全部封装在一个工具类里面
  2. 建一个需要查询的对象的类
  3. 建一个适配器的接口,用来负责把Resultset对象转化为所需

工具类代码

package com.kfm;

import java.sql.*;
import java.util.List;


public class DButils <T>{
    private String url = "jdbc:mysql://localhost:3306/h";
    private String user = "root";
    private String pass = "";
    private Connection connection = null;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }
    public DButils(){}
    public DButils(String url,String user,String pass){
        this.url = url;
        this.user = user;
        this.pass = pass;
    }

    public Connection getConnection() throws ClassNotFoundException, SQLException {
        if(connection == null || connection.isClosed()){
            Class.forName("com.mysql.cj.jdbc.Driver");
            connection = DriverManager.getConnection(url,user,pass);
        }
        return connection;
    }

    public List<T> executeQuery(String sql, Recover<T> recover, Object... values) throws SQLException, ClassNotFoundException {
        getConnection();
        PreparedStatement statement = connection.prepareStatement(sql);
        setObject(statement,values);
        return recover.recover(statement.executeQuery());
    }
    public void close() throws SQLException {
        if(connection !=null && !connection.isClosed()){
            connection.close();
            connection = null;
        }
    }
    private void setObject(PreparedStatement Statement,Object... values) throws SQLException {
        if(values==null){
            return;
        }
        for (int i = 0; i < values.length; i++) {
            Statement.setObject(i+1,values[i]);
        }
    }
}

适配器接口

package com.kfm;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 * @author jkk
 */
public interface Recover <T>{
    public List<T> recover(ResultSet resultSet) throws SQLException;
}

查询对象

在这里插入图片描述

package model;

import com.kfm.Recover;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author jkk
 */
public class Goods {
    private String goodno;
    private String goodsname;
    private double cost;
    private double price;
    private int count;
    private int catagory;

    public String getGoodno() {
        return goodno;
    }

    public void setGoodno(String goodno) {
        this.goodno = goodno;
    }

    public String getGoodsname() {
        return goodsname;
    }

    public void setGoodsname(String goodsname) {
        this.goodsname = goodsname;
    }

    public double getCost() {
        return cost;
    }

    public void setCost(double cost) {
        this.cost = cost;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getCatagory() {
        return catagory;
    }

    public void setCatagory(int catagory) {
        this.catagory = catagory;
    }

    @Override
    public String toString() {
        return "Goods{" +
                "goodno='" + goodno + '\'' +
                ", goodsname='" + goodsname + '\'' +
                ", cost=" + cost +
                ", price=" + price +
                ", count=" + count +
                ", catagory=" + catagory +
                '}';
    }
    public static class GoodsRecover implements Recover<Goods>{

        @Override
        public List<Goods> recover(ResultSet resultSet) throws SQLException{
            List<Goods> goodsList = new ArrayList<>();
            while (resultSet.next()){
                Goods goods = new Goods();
                goods.setGoodno(resultSet.getString("goodno"));
                goods.setGoodsname(resultSet.getString("goodsname"));
                goods.setCost(resultSet.getDouble("cost"));
                goods.setPrice(resultSet.getDouble("price"));
                goods.setCount(resultSet.getInt("count"));
                goods.setCatagory(resultSet.getInt("catagory"));
                goodsList.add(goods);
            }
            return goodsList;
        }
    }
}

【注意】上面的代码中实现了适配器的Recover接口

测试代码

package com.kfm;

import model.Goods;

import java.sql.SQLException;
import java.util.List;

/**
 * @author jkk
 */
public class Test {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        DButils<Goods> dButils = new DButils<>();
        dButils.getConnection();
        String sql = "Select * from  goods";
        List<Goods> goodsList =  dButils.executeQuery(sql, new Goods.GoodsRecover());
        for (Goods good :
                goodsList) {
            System.out.println(good);
        }
    }
}


总结:

体现了适配器的好处:可以根据需要可以得到不同的结果,只需要实现一个接口即可,而不需要每次进行写大量的代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值