自己动手实现简单对象关系库之概述

自己动手实现简单对象关系库

1. 对象关系库的出现

假如存在用户user数据库表

键名描述
id用户唯一主键
name用户名称
password密码
height身高

存在User类与之对应

public class User{
    private int id;
    private String name;
    private String password;
    private float height;
    ...//省略了setter函数
}

则每次从数据库中查询所有user时会进行如下操作

List<User> list=new LinkedList<>();
Connection conn=...;//获取一个连接
Statement statement=conn.createStatement();
ResultSet rs=statement.executeQuery("select * from user");
while(rs.next())(
    User user=new User();
    user.setID(rs.getInt("id"));
    user.setName(rs.getString("name"));
    user.setPassword(rs.getString("password"));
    user.setHeight(rs.getFloat("height"));
    list.add(user);
}
... //Statement和ResultSet等资源的释放
conn.close();

大家会发现,我们需要从数据库查询的ResultSet中一个一个生成User,还要把ResultSet的值一个一个手动插入User实例中,而且int,String,float之类不同的类型ResultSet的调用方法还不一样,得自己一个一个写,这样子是不是很繁琐。有没有一种方法能够把数据库里面的数据自动生成Java的对象

Database database=...;
//我们把类的信息告诉database,它就能自动从数据库种读取数据并生成指定的对象集合返回给我们
List<User> list=database.queryList(User.class);
database.close();

上面代码描述的就是一个简单的对象关系库

2. 简单对象关系库的功能

对象关系库就是为了简化服务程序对数据库的操作,把对数据库的操作改变成对Java对象的操作。
我们实现的简单对象关系库应当具有以下功能

public interface IDatabase{
    //从数据库中查询出所有T对象,放到List中
    <T> List<T> queryList(Class<T> clazz);
    //从数据库中查询出所有T对象,放到Map中,主键为T对象的唯一主键
    <T> Map<?,T> queryMap(Class<T> clazz);
    //向数据库中插入T对象,并设定插入的时候是否带主键,返回插入数据后的主键
    <T> int insert(T bean,boolean hasPrimaryKey);
    //向数据库种插入T对象集合,并设定插入的时候是否带主键
    <T> int insert(Collection<T> collection,boolean hasPrimaryKey);
    //从数据库中刷新当前对象的属性
    <T> void refresh(T bean);
    //将对象的属性更新到数据库中
    <T> void update(T bean);
    //判定该对象是否在数据库中存在,判定依据为主键
    <T> boolean isExists(T bean);
    //判定该对象是否在数据库中存在,并且每个属性都相等
    <T> boolean isStrongExists(T bean);
    //为该类创建数据库表
    <T> boolean createTable(Class<T> clazz);
}

以上我们即将实现的功能就包含了对Java对象的基本增删改查
接下来讲到的是如何把Java对象转化成数据库里面的数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值