首页 > 数据库 >java之手搓简单ORM框架--SQL的UPDATA

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

时间:2023-08-12 09:13:03浏览次数:47  
标签:java String UPDATA userTable updata declaredField SQL where

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语句更改,如有漏缺请在下方留言告知,我会及时补充

 

标签:java,String,UPDATA,userTable,updata,declaredField,SQL,where
From: https://www.cnblogs.com/9--1/p/17624333.html

相关文章

  • Javascript 面向对象编程
    avascript是一个类C的语言,他的面向对象的东西相对于C++/Java比较奇怪,但是其的确相当的强大,在 Todd同学的“对象的消息模型”一文中我们已经可以看到一些端倪了。这两天有个前同事总在问我Javascript面向对象的东西,所以,索性写篇文章让他看去吧,这里这篇文章主要想从一个整体的角度......
  • Java 观察者模式的浅析
    简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新。 观察者模式的结构 观察者(Observer)模式是对象的行为型模式,又叫做发表-订阅(P......
  • MySQL 设置 IP 白名单
    1.登录MySQLmysql-uroot-p2.新增用户并授予权限MySQL8之前:grantallon*.*to'username'@'ip'identifiedby'password'withgrantoption;MySQL8开始:createuser'username'@'ip'identifiedwithmysql_native_pa......
  • MySQL数据库笔记(二)
    聚集函数聚集函数:SQL提供的方法统计函数count(字段):统计表中记录的个数.语法: selectcount(*)from表名; 练习: --统计exam中有多少个学生: selectcount(name)fromtb_exam; selectcount(id)fromtb_exam; selectcount(*)fromtb_exam;--根据任意字段进行统计......
  • 认识Javascript数组
    1.认识数组 数组就是某类数据的集合,数据类型可以是整型、字符串、甚至是对象Javascript不支持多维数组,但是因为数组里面可以包含对象(数组也是一个对象),所以数组可以通过相互嵌套实现类似多维数组的功能 1.1定义数组声明有10个元素的数组vara=newArray(10此时为a已经......
  • Java入门02
    Java开发环境搭建JDK下载,在系统属性中查看系统位数,下载对应位数的JDK,同意协议卸载JDK,右键我的电脑选属性,在高级系统设计里边找到环境变量打开,找到Java_HOME,根据路径删除整包,然后删除Java_HOME,再找到PATH,在PATH里删除和Java_HOME相关的,点击确定,最后打开命令窗口输入Java-vers......
  • SQL--函数
    SQL--函数函数是什么?函数是指一段可以直接被另一段程序调用的程序或代码。字符串函数selectconcat('hello','mysql');selectlower('Hello');selectupper('Hello');selectlpad('01',5,'-');selectrpad('01',5,'-');......
  • SQL去重,更新时间小的,保留最新时间的。
    UPDATEMANU_EXECUTIONSETIsDeleted=1,UpdateBy='ZJJ',IsOffline='1'WHEREIdin(SELECTME.IdFROMMANU_EXECUTIONMEJOIN(SELECTSFC,MIN(CreateOn)ASMaxCreateOnFROMMANU_EXECUTIONWHERECreateOn>'2023-07-01'......
  • 开源数据库Mysql_DBA运维实战 (DML/DQL语句)
    DML/DQLDMLINSERT  实现数据的 插入        实例:DELETE  实现数据的 删除        实例:UPDATE  实现数据的 更新         实例1:         实例2:     实例3:DQL DML/DQL编辑 DML语句数据库操纵语言: 插入数据INSERT、删......
  • 【源码解析】postgresql having clause 是如何实现的 (2)
    在上一篇中,主要探究了postgresql源码层面是怎么实现聚合函数的。本篇将探究havingclause是如何实现的。setupcreatetablefoo(aint,bint);insertintofooselectrandom()*i/2,random()*ifromgenerate_series(10,20)g(i);selecta,count(b)fromfoogrou......