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

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

时间:2023-08-11 20:33:16浏览次数:38  
标签:INSERT java String insert value userTable SQL public

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

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

java高级之泛型

java高级之映射

java高级之反射

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

现在直接手搓框架开始叭!

1.2准备工作:

创建注解

后面会有用

这里演示:

@TableFiele

@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TableFiele {
    String value();
}

@TableId

@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface TableId {
    String value() default "id";
}

@TableName

@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface TableName {
    String value();
}

目前只创建这三个,后面可能还会创建其他的注解

1.3现在创建一个dao文件:

public class CurrencyDao<T> {
    
    }
    //手搓简单框架
    //通用的添加方法,针对所有的表都通用
    public int insert(T t) throws Exception {
        //以下所有都是针对sql语句 insert  拼接
        StringBuffer insertInto = new StringBuffer("insert into ");
        //获取实体类的反射类
        Class<?> aClass = t.getClass();
        //通过反射获取表名
        String simpleName = aClass.getSimpleName();
        //但是前提是,表名要与数据库名称一致,这里需要用到注解,预防类名与表名不一致的情况
        //拿到注解
        TableName annotation = aClass.getAnnotation(TableName.class);
        //判断如果这个注解不等于null说明类名与表名确实不一样
        if (annotation != null){
            simpleName = annotation.value();
        }
        insertInto.append(simpleName);

        //这里继续拼接所需的列名和属性值
        ArrayList<String> key = new ArrayList<>(); //存放所有的列名
        ArrayList<Object> valuess = new ArrayList<>();//存放所有的列值

        //通过反射获取所有的属性对象
        Field[] declaredFields = aClass.getDeclaredFields();
        for (Field declaredField : declaredFields) {
            declaredField.setAccessible(true);
            //获取属性名
            String name = declaredField.getName();
            //获取属性对象上的注解,预防属性类名与列名不一致的情况
            TableFiele annotation1 = declaredField.getAnnotation(TableFiele.class);
            //同理判断
            if(annotation1 != null){
                name = annotation1.value();
            }
            //每循环一次将列名放进keyList集合内
            key.add(name);
            Object v = declaredField.get(t);//获取对象t中指定的属性值
            valuess.add("'"+v+"'");//每循环一次将列值放进valuessList集合内
        }
        //将list的[]替换成()
        String keypalss = key.toString().replace("[", "(").replace("]", ")");
        String valuepalss = valuess.toString().replace("[", "(").replace("]", ")");

        //继续拼接
        insertInto.append(keypalss + " values " + valuepalss);

        System.out.println(insertInto);
//        调用jdbc数据库运行sql语句
        Connection connection = DButils.getConnection();
        PreparedStatement preparedStatement = connection.prepareStatement(insertInto.toString());
        int i = preparedStatement.executeUpdate();
        return i;
    }

1.4随后进行测试:

 这里创建一个测试类:

public class Test {
    public static void main(String[] args) throws Exception {
        UserTable userTable = new UserTable();
        userTable.setUser("九极致之术");
        userTable.setPass("123456");
        userTable.setMoney(99.9);
        UserDao userDao = new UserDao();
        int insert = userDao.insert(userTable);
        System.out.println(insert);
    }
}

 1.5 运行结果如下:

 

 数据库:

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

 

 

 

 

 

 

 

标签:INSERT,java,String,insert,value,userTable,SQL,public
From: https://www.cnblogs.com/9--1/p/17623868.html

相关文章

  • MySQL运行错误:‘mysql‘不是内部或外部命令,也不是可运行程序,Windows添加环境变量
    1、Windows电脑安装MySQL5.7,打开cmd出现“'mysql'不是内部或外部命令,也不是可运行的程序或批处理文件。”2、出现以上情况基本断定为没有安装mysql或者是安装了mysql没有配置环境变量,下面进行配置环境变量找到mysql的安装目录,可以windows+r然后输入:services.msc3、找到my......
  • 绝了!学编程的还有不知道的吗?这个Java开发工具免费了!
    智能开发正在迅速走红!随着ChatGPT的广泛应用,智能开发越来越受到关注。然而,实际上,在数年前开始尝试智能开发的探索。自从2014年ForresterResearch提出"低代码"的概念以来,低代码平台的发展非常迅速。除了OutSystems和Mendix等低代码厂商之外,微软、谷歌等大型公司也纷纷开始着手低代......
  • JavaWeb之Servlet入门版教务系统(三)
    本次要分享的内容是之前教务系统中系统管理模块下的权限列表功能,包括对权限信息进行增删改查以及对不同的角色身份进行的不同权限分配(重点讲解)。首先还是需要使用mysql数据库准备一张权限表,建表语句如下:DROPTABLEIFEXISTS`sys_permission`;CREATETABLE`sys_permission`(......
  • ATM系统-Java
    Account.javapackageATMSystem;publicclassAccount{privateStringuserName;privateStringcardId;privatecharsex;privateStringpassWord;privatedoublemoney;privatedoublelimit;publicAccount(StringuserName,Str......
  • java使用hutool把服务器图片链接转为base64编码
    需求是把服务器的图片链接或者网上的图片链接地址转为base64位编码方便前端操作建议使用方法一base64编码转为图片在线网址https://imgtobase64.d777.com/方法一:使用hutool的HttpResponse方法1.1引入依赖<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artif......
  • MySQL全文索引的分词机制介绍
    什么是全文查询的“分词机制”?分词机制,也常称为“分词”或“词条化”(Tokenization),是将一段连续的文本切分成若干独立的词汇或词条的过程。在很多文本处理和信息检索的任务中,分词是首要且关键的步骤。分词机制的重要性主要体现在以下几个方面:信息检索:搜索引擎......
  • Java 集合
    Java集合也叫作容器,就是专门用来存放对象的;也就是说,没有办法存放基础数据类型int,必须要存放包装类Integer。Java集合主要是由两大接口派生而来:一个是Collecton接口,主要用于存放单一元素;另一个是Map接口,主要用于存放键值对。对于Collection接口,下面又有三个主要的子接......
  • MySQL全文索引的自然语言搜索使用介绍
    接上篇《MySQL全文索引的布尔搜索使用介绍》自然语言搜索是全文搜索技术中的一种模式,它允许用户使用普通话语或句子来查询,而不需要使用特定的查询语言或格式。这种搜索方式的目的是使查询更加直观和人性化,从而为非技术用户提供更好的搜索体验。以下是关于MySQL中自然语言搜索的......
  • JSON for java入门总结
    一、JSON介绍JSON(JavaScriptObjectNotation),类似于XML,是一种数据交换格式,比如JAVA产生了一个数据想要给JavaScript,则除了利用XML外,还可以利用JSON;JSON相比XML的优势是表达起来很简单;官网:http://www.json.org/JSON是AJAX中的X(就是可以取代XML);     ------出自JSON创......
  • 数据查询新助手——Supabase AI SQL Editor服务介绍
    在数据处理和数据库查询中,SQL语言是一种重要的工具,但对于不熟悉SQL语法的人来说,编写查询可能会是一项挑战。现在,有了SupabaseAISQLEditor服务,编写SQL查询将变得更加轻松。SupabaseAISQLEditor是一款革命性的人工智能SQL编辑器,通过直观的方式理解用户的查询意图,并为数据库提供......