前文已经讲了对象关系库如何实现缓存提高性能 接下来讲的就是如何实现对象关系库了 对象关系库的功能就是把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); } //上面已经实现了如何对象从数据库中提取出来和如何插入数据库,其他的操作由于篇幅已经省略 }现在我们实现的对象关系库实际上是一个非常简单的对象关系库 如果想要能够正式运用在项目中还需要一些思考和深入优化
