最近老师叫做期末作业,给了二十道题目,每道题都是一个小网站,比如试卷系统,课堂系统什么的,每道题只能被两个同学用。。。
而且,,,,不能用框架!!!!
我十分高兴,因为我不会任何框架。(23333)
我建完数据库,发现有十张表,每张表的字段都不少,要一个个把sql语句敲过去嘛?(惨绝人寰)
比如有一个用户表,组织表,题目表,,,我们还要在java里面创建一个用户类,组织类,题目类。
类名和表名不是一样吗?
用户表里面,还有字段:用户名,密码,性别;
而用户类里面,也有用户名,密码,性别
既然名字一样,为什么不直接统一处理呢?
比如查询数据,查到数据以后,如果查的是用户,那我们就遍历用户类的所有字段名,从resultset里面取出它们来。
增删改查都是如此。
为了统一,我们实现一个Table类,所有的实体类:用户类,组织类,题目类……都继承它。
怎么取一个对象的字段?
Field fields[] = user.getClass().getFields();
这里的user是一个对象
getClass()就能拿到它的类
我们想修改user的第一个字段,改成"sb":
fileds[0].set(user,"sb")
据说一个字段设为“可行”以后,访问速度会大幅度加快
=
for(Field i : fields){
i.setAccessible(true);
}
上面这条,就是设为可行,就不多说了。
等等~我们是想从resultset里面取出数据啊,前提要知道每个字段的名字才行:
fields[0].getName()
这是第一条字段的名字
我就不说怎么连数据库了,那玩意我不熟,而且说了也没啥用
在把resultset转换成实体前,先要创建对象。根据传入的类,我们要创建对象:
user.getDeclaredConstructor().newInstance();
user是一个类,我们用newInstance创建它的对象
for(Field d : fields){
d.set(res,set.getObject(d.getName()));
}
res是要一个user对象,我们遍历它的字段,把resultset里的值设进去
还可以实现一下对象转数据,就是把对象转成where后面的条件,或者转成insert的插入等。。。但是重点就上面那些,接下来我直接把整个DAO类的代码扔上来好了。
顺便说一下,读写数据的时候,还要注意一下数据类型,下面也都有了
晓啸原创(转载请注明)
package cn.edu.mju.project1.persiste;
import cn.edu.mju.project1.entity.Table;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.HashSet;
import java.util.Set;
public class DAO {
public static final int show_name = 0;
public static final int show_val = 1;
public static final int show_all = 2;
static Set<Class> access = new HashSet<>();
public static void insert(Table []entity) throws Exception {
if(entity == null || entity.length == 0){
return;
}
Connection conn = ConnPool.getConnection();
for(Table en : entity){
StringBuilder sql = new StringBuilder("INSERT INTO ");
sql.append(entity[0].getClass().getSimpleName());
sql.append(" (");
sql.append(toCondition(en,show_name,","));
sql.append(") VALUES(");
sql.append(toCondition(en,show_val,","));
sql.append(")");
Statement sta = conn.createStatement();
sta.executeUpdate(new String(sql));
sta.close();
}
}
public static void delete(Class table,String condition) throws Exception {
if(condition == null){
condition =