MVC:一个类搞定DAO层

最近老师叫做期末作业,给了二十道题目,每道题都是一个小网站,比如试卷系统,课堂系统什么的,每道题只能被两个同学用。。。
而且,,,,不能用框架!!!!
我十分高兴,因为我不会任何框架。(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 = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值