Web后台开发之CRUD操作的两种实现

本文详细介绍了CRUD操作方法,并通过dbutils.jar实现了部分操作的封装,简化了代码实现。同时,提供了使用dbutils进行数据查询、更新、删除和插入的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、常见的CRUD操作方法

public List<Commodity> getAllCommodity(Pagination pagination) {
        List<Commodity> commodities = new ArrayList<Commodity>();
        Connection conn = null;
        PreparedStatement psmt = null;
        ResultSet rs = null;

        try {
            conn=DBConnectionManager.getConnection();
            String sql = "select count(*) as counts from commodity";
            psmt = conn.prepareStatement(sql);
            rs = psmt.executeQuery();
            rs.next();
//            System.out.println(rs.getInt("counts"));
            pagination.setCountSize(rs.getInt("counts"));
            int start = (pagination.getCurrPage() - 1) * pagination.getPageSize() + 1;
            int perPage = pagination.getPageSize();
     //       System.out.println(start + " - " + perPage);
            sql="select   *   from   commodity   order by commodity.id limit ?,?" ;
//            System.out.println("\nExecuting query: " + sql);
            psmt = conn.prepareStatement(sql);
            psmt.setInt(1, start-1);
            psmt.setInt(2, perPage);
            rs = psmt.executeQuery();
            while (rs.next()) {
                Commodity commodity = new Commodity();
                commodity.setCommodityId(rs.getInt("id"));
                commodity.setCommodityName(rs.getString("name"));
                commodity.setAppendName(rs.getString("append_name"));
                commodity.setPrice(rs.getInt("price"));
                commodity.setUnit(rs.getString("unit"));
                commodity.setPeriod(rs.getInt("period"));
                commodity.setSales(rs.getInt("sales"));
                commodity.setType(rs.getInt("type"));
                commodity.setShopId(rs.getInt("shop_id"));
                commodity.setShopName(rs.getString("shop_name"));
                commodity.setCarriage(rs.getInt("carriage"));
                commodity.setThumbnail(rs.getString("thumbnail"));
                commodity.setImage(rs.getString("image"));
                commodity.setComments(rs.getString("comments"));
                commodities.add(commodity);
            }
            return commodities;
        } catch (SQLException e) {
            Logger.getLogger(CommodityDaoImpl.class.getName()).log(Level.SEVERE, null, e);
            return null;
        } finally {
            DBConnectionManager.release(rs, psmt, conn);
        }
    }

  @Override
    public boolean deleteCommodity(int commodityId) {
        Connection conn = null;
        PreparedStatement psmt = null;
        ResultSet rs = null;
        try {
            conn=DBConnectionManager.getConnection();
            String sql = "delete from commodity where id=?";
            psmt = conn.prepareStatement(sql);
            psmt.setInt(1, commodityId);
            psmt.executeUpdate();
            return true;
        } catch (SQLException e) {
            Logger.getLogger(UserDaoImpl.class.getName()).log(Level.SEVERE, null, e);
            return false;
        } finally {
            DBConnectionManager.release(rs, psmt, conn);
        }
    }

    @Override
    public boolean updateCommodity(Commodity commodity) {
        Connection conn = null;
        PreparedStatement psmt = null;
        try {
            conn =DBConnectionManager.getConnection();
            String sql = "update commodity set NAME=?,APPEND_NAME=?,PRICE=?,UNIT=?,PERIOD=?,SALES=?,TYPE=?,SHOP_ID=?,SHOP_NAME=?,CARRIAGE=?,COMMENTS=? where id=?";
            psmt = conn.prepareStatement(sql);                
            psmt.setString(1, commodity.getCommodityName());
            psmt.setString(2, commodity.getAppendName());
            psmt.setInt(3, commodity.getPrice());
            psmt.setString(4, commodity.getUnit());
            psmt.setInt(5, commodity.getPeriod());
            psmt.setInt(6, commodity.getSales());
            psmt.setInt(7, commodity.getType());
            psmt.setInt(8, commodity.getShopId());
            psmt.setString(9, commodity.getShopName());
            psmt.setInt(10, commodity.getCarriage());
            psmt.setString(11, commodity.getComments());
            psmt.setInt(12, commodity.getCommodityId());
            psmt.executeUpdate();
            return true;
        } catch (SQLException e) {

        } finally {
            DBConnectionManager.release(psmt, conn);
        }
        return false;
    }
    @Override
    public boolean insertCommodity(Commodity commodity) {
        Connection conn = null;
        PreparedStatement psmt = null;
        try {
            conn =DBConnectionManager.getConnection();

            String sql = "insert into commodity(id,name,append_name,price,unit,period,sales,type,shop_id,shop_name,carriage,thumbnail,image,comments) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
            psmt = conn.prepareStatement(sql);
            psmt.setInt(1, commodity.getCommodityId());
            psmt.setString(2, commodity.getCommodityName());
            psmt.setString(3, commodity.getAppendName());
            psmt.setInt(4, commodity.getPrice());
            psmt.setString(5, commodity.getUnit());
            psmt.setInt(6, commodity.getPeriod());
            psmt.setInt(7, commodity.getSales());
            psmt.setInt(8, commodity.getType());
            psmt.setInt(9, commodity.getShopId());
            psmt.setString(10, commodity.getShopName());
            psmt.setInt(11, commodity.getCarriage());
            psmt.setString(12, commodity.getThumbnail());
            psmt.setString(13, commodity.getImage());
            psmt.setString(14, commodity.getComments());
            psmt.executeUpdate();
            return true;
        } catch (SQLException e) {
            Logger.getLogger(CommodityDaoImpl.class.getName()).log(Level.SEVERE, null, e);
            return false;
        } finally {
            DBConnectionManager.release(psmt, conn);
        }
    }

二、通过commons-dbutils.jar 封装了部分操作的方法(代码变得更加简洁)

@Override
    public List<Shop> getAllShop(Pagination pagination) {
        String sql = "select count(*) as counts from shop";
        List<Shop> shops = new ArrayList<Shop>();
        Connection conn = DBConnectionManager.getConnection();  
        QueryRunner run = new QueryRunner();
        try {
            int count = Integer.parseInt(run.query(conn, sql, new ScalarHandler("counts")).toString());
            pagination.setCountSize(count);
            int start = (pagination.getCurrPage() - 1) * pagination.getPageSize() + 1;
            int perPage = pagination.getPageSize();
            sql="select id,name,shop_hours as shopHours,shop_address as shopAddress,shop_phone as shopPhone,delivery_notes as deliveryNotes,comments from   shop   limit ?,?";
            shops = run.query(conn, sql, new BeanListHandler<Shop>(Shop.class),start-1,perPage);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBConnectionManager.closeConnection(conn);
        }
        return shops; 
    }
@Override
    public Shop getShop(int shopId) {
        String sql = "select id,name,shop_hours as shopHours,shop_address as shopAddress,shop_phone as shopPhone,delivery_notes as deliveryNotes,comments from shop where id=?";
        Connection conn = DBConnectionManager.getConnection();
        QueryRunner run = new QueryRunner();
        Shop shop = new Shop();
        try {
            Object[] params={shopId};
            shop = run.query(conn, sql, new BeanHandler<Shop>(Shop.class),params);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBConnectionManager.closeConnection(conn);
        }
        return shop;
    }

    @Override
    public boolean deleteShop(int shopId) {
        String sql = "delete from shop where id=?";
        Connection conn = DBConnectionManager.getConnection();
        QueryRunner run = new QueryRunner();

        try {
            conn = DBConnectionManager.getConnection();
            run.update(conn, sql, shopId);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }finally {
            DBConnectionManager.closeConnection(conn);
        }
    }

    @Override
    public boolean updateShop(Shop shop) {
        String sql ="update shop set name=?,shop_hours=?,shop_address=?,shop_phone=?,delivery_notes=?,comments=? where id=?";
        Connection conn = DBConnectionManager.getConnection();
        QueryRunner run = new QueryRunner();
        try {
            conn = DBConnectionManager.getConnection();
            Object[] params={shop.getName(),shop.getShopHours(),shop.getShopAddress(),shop.getShopPhone(),shop.getDeliveryNotes(),shop.getComments(),shop.getId()};
            run.update(conn, sql, params);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }finally {
            DBConnectionManager.closeConnection(conn);
        }
    }

    @Override
    public boolean insertShop(Shop shop) {
        String sql = "insert into shop (id,name,shop_hours,shop_address,shop_phone,delivery_notes,comments)values(?,?,?,?,?,?,?)";
        Connection conn = DBConnectionManager.getConnection();
        QueryRunner run = new QueryRunner();
        try {
            conn = DBConnectionManager.getConnection();
            Object[] params={shop.getId(),shop.getName(),shop.getShopHours(),shop.getShopAddress(),shop.getShopPhone(),shop.getDeliveryNotes(),shop.getComments()};
            run.update(conn, sql, params);
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }finally {
            DBConnectionManager.closeConnection(conn);
        }
    }

采用这种方法,需要注意的地方有:
1. 查询的属性要和对象的属性一一对应,如果不同,则要用AS对应起来,as后面是shop对象的属性,前面是数据库中shop表的属性;

String sql = "select id,name,shop_hours as shopHours,shop_address as shopAddress,shop_phone as shopPhone,delivery_notes as deliveryNotes,comments from shop where id=?";

2 . 查询单个对象用BeanHandler

shop = run.query(conn, sql, new BeanHandler<Shop>(Shop.class),params);

查询对象列表用BeanListHandler

shops = run.query(conn, sql, new BeanListHandler<Shop>(Shop.class),params);

查询特定属性用ScalarHandler

String sql = "select count(*) as counts from shop";
int count = Integer.parseInt(run.query(conn, sql, new ScalarHandler("counts")).toString());

总结

两种方法殊途同归,本质上是一样的,只不过第二种方法把第一种方法的部分操作,例如赋值(setString/setInt等),给封装了起来。

另外,附上dbutils的下载地址commons-dbutils-1.6.jar

转载请注明出处:http://blog.youkuaiyun.com/csp277
作者:项昂之
时间:20151129

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值