自己实现简单对象关系库之Database的实现

前文已经讲了对象关系库如何实现缓存提高性能
接下来讲的就是如何实现对象关系库了
对象关系库的功能就是把Java对象插入数据库中,又或者从数据库中查询数据转化成对象。
现在我们的SQLClass已经缓存了过程所有的SQL语句,现在只需要把查询出来的数据转化成Java对象就可以了

前面我们讲解Template模式的时候谈到,复杂的流程可以拆分将部分流程作为参数传进去
例如Template模式中我们讲解到的查询数据中我们最关注的核心是对ResultSet的遍历,所以核心函数在于dbHelper.mapResultSet(String sql,Object[] params,SQLConsumer<ResultSet> consumer)
而现在我们既然能将数据库里面的数据已经看成了一个一个对象,我们一行一行遍历ResultSet的是否可以抽象成一个个遍历存储在数据库中的对象mapBeans(Class<T> clazz,SQLConsumer<T> consumer)

public class Database{
    private DbHelper dbHelper;
    private SQLCache sqlCache;
    //遍历数据库下所有T类的对象
    public <T> int mapBeans(Class<T> clazz,SQLConsumer<T> consumer)throws SQLException{
        SQLClass<T> sqlClass=sqlCache.getSQLClass(class);
        String sql=sqlClass.selectSQL();
        return dbHelper.mapResultSet(sql,new Object[]{},
                    resultSet->{
                        T t=sqlClass.toBean(resultSet);
                        consumer.accept(t);
                    });
    }

    //查询数据库下所有T类的对象,返回链表集合
    public <T> List<T> queryList(Class<T> clazz)throws SQLException{
        List<T> list=new LinkedList<>();
        mapBeans(class,list::add);
        return list;
    }
    public <T> int insert(T bean,boolean hasPrimary)throws SQLException{
        SQLClass<T> sqlClass=sqlCache.getSQLClass(bean.getClass());
        String sql=sqlClass.inertSQL(hasPrimary);
        Object[] params=sqlClass.insertParams(bean,hasPrimary);
        return dbHelper.execute(sql,params);
    }
    //上面已经实现了如何对象从数据库中提取出来和如何插入数据库,其他的操作由于篇幅已经省略
}

现在我们实现的对象关系库实际上是一个非常简单的对象关系库
如果想要能够正式运用在项目中还需要一些思考和深入优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值