java之手搓简单ORM框架--SQL的UPDATA

发布时间 2023-08-12 09:01:15作者: 九极致之术

1.手搓简单SQL增删改查框架-更改

1.1创建简单类,并使用泛型类,这里可能使用到之间写的三篇知识的内容,如果不了解的小伙伴可以去

java高级之泛型

java高级之映射

java高级之反射

当然,前提是必须要把数据库相关连接弄好,这里会专门出一篇 java之jdbc

现在咱们继续手搓框架开始叭!

由于上一篇的【手搓简单SQL增删改查框架-插入】准备工作已经完成,自定义的三个注解已经可以满足我们的需求,所有这里前期不在准备,现在直接开始实现完成一个

通用的 更改sql语句 ,是针对所有数据库表都通用。

1.2 创建单独的dao

当然,你也可以续用上一篇声明的dao

public class CurrencyDao<T> {  }

那么这里为省方便就直接继续使用上一篇文章定义好的dao。

也会继续续用上一篇的userdao、以及实体类、以及测试类

1.3 手搓!!

//通用的更改方法,针对所有的表都有用
public int Updata(T t) throws Exception{
    //依然是一个拼凑语句的过程 updata 表名 set 列名=列值,列名=列值,... where id=?
    StringBuffer updata = new StringBuffer("update ");
    //通过反射获取类对象
    Class<?> aClass = t.getClass();
    String simpleName = aClass.getSimpleName();
    //依然要判断类名与表名是否一致
    TableName annotation = aClass.getAnnotation(TableName.class);
    //拿到已获取到的注解value值判断
    if(annotation != null){
        simpleName = annotation.value();
    }
    //拼接表名+set
    updata.append(simpleName + " set ");

    String where = " where ";
    //获取列名
    Field[] declaredFields = aClass.getDeclaredFields();
    for (Field declaredField : declaredFields) {
        declaredField.setAccessible(true);
        //获取属性类名
        String name = declaredField.getName();
        //这里通过注解获取主键id,为拼接where后条件做准备
        TableId annotation2 = declaredField.getAnnotation(TableId.class);
        if(annotation2 != null){
            String id = annotation2.value();
            //继续获取属性
            Object v = declaredField.get(t);//表层理解,拿到与id对象的列值
            where = where+id+"="+v;//随后拼接在where 后面
            continue;
        }
        //依然利用注解判断属性类名是否与列名一致
        TableFiele annotation1 = declaredField.getAnnotation(TableFiele.class);
        if(annotation1 != null){
            name = annotation1.value();
        }
        Object v = declaredField.get(t);
        //拼接set后的列名与列值
        updata.append(name + "=" + "'" + v + "'" + ",");
    }
    //截取字符串,这里从0索引处,截取到最后的逗号(当然,不包含逗号)
    String substring = updata.toString().substring(0, updata.lastIndexOf(","));
    substring = substring + where;
    //        调用jdbc数据库运行sql语句
    Connection connection = DButils.getConnection();
    PreparedStatement preparedStatement = connection.prepareStatement(substring.toString());
    int i = preparedStatement.executeUpdate();
    return i;
}

 

1.4 现在进行测试

public static void main(String[] args) throws Exception {
    UserTable userTable = new UserTable();
    userTable.setUser("究极·致之术");
    userTable.setPass("666666");
    userTable.setMoney(99.9);
    userTable.setId(90);
    UserDao userDao = new UserDao();
    int insert = userDao.Updata(userTable);
    System.out.println(insert);
}

运行结果:

success!!!

运行前:

运行后:

 

 以上便是ORM框架中的SQL语句更改,如有漏缺请在下方留言告知,我会及时补充