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

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

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

java高级之泛型

java高级之映射

java高级之反射

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

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

1.2准备工作:

1.2.1创建注解

后面会有用

这里演示:

@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.2.2 创建一个与你的数据库表一样的实体类

1.3现在创建一个dao文件:

public class CurrencyDao<T> {
    
    }

创建一个userdao,这个只需要去继承上面的dao

public class UserDao extends CurrencyDao {

}

现在回到CurrencyDao里手搓框架:

    //手搓简单框架
    //通用的添加方法,针对所有的表都通用
    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语句添加,如有漏缺请在下方留言告知,我会及时补充

 

 

 

 

 

 

 

posted @ 2023-08-11 20:22  九极致之术  阅读(50)  评论(0编辑  收藏  举报