自己动手实现简单对象关系库
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对象转化成数据库里面的数据