try { List<Object> values = new ArrayList<Object>(); Field[] declaredFields = aClass.getDeclaredFields(); for (Field field : declaredFields) { field.setAccessible(true); Object v1 = field.get(t); values.add("'" + v1 + "'"); } String replace = values.toString().replace("[", "(").replace("]", ")"); sql.append(replace); connection = ConnectionFactory.getConnection(); ps = connection.prepareStatement(sql.toString()); int i = ps.executeUpdate(); return i; }catch (Exception e){ e.printStackTrace(); }finally { ConnectionFactory.close(null,ps,connection); } return 0; }
时间: 2024-02-15 19:27:53 浏览: 70
这段代码是用来将Java对象插入到数据库表中的,它首先通过反射获取对象的所有属性,然后获取属性的值,构造SQL语句,并将属性值插入到SQL语句中,最后执行SQL语句将对象插入到数据库中。如果插入成功,返回插入的行数,否则返回0。其中,getConnection()方法是用来获取数据库连接的,close()方法是用来关闭数据库连接和Statement的。
相关问题
public int insert(T t) throws Exception{ Connection connection=null; PreparedStatement ps=null; StringBuffer sql=new StringBuffer("insert into " ); //得到T的反射类 Class<?> aClass=t.getClass(); //获取类上注解 TableName tableName = aClass.getAnnotation(TableName.class); if (tableName==null){ throw new RuntimeException("未使用注解标记表名"); } //获取表名 String name = tableName.name(); sql.append(name+ " values"); try { List<Object> values = new ArrayList<Object>(); Field[] declaredFields = aClass.getDeclaredFields(); for (Field field : declaredFields) { field.setAccessible(true); Object v1 = field.get(t); values.add("'" + v1 + "'"); } String replace = values.toString().replace("[", "(").replace("]", ")"); sql.append(replace); connection = ConnectionFactory.getConnection(); ps = connection.prepareStatement(sql.toString()); int i = ps.executeUpdate(); return i; }catch (Exception e){ e.printStackTrace(); }finally { ConnectionFactory.close(null,ps,connection); } return 0; }
这段代码是用来实现数据库插入操作的,其中的T是一个泛型参数,可以代表任意一个Java类,而该类必须使用了@TableName注解标记了数据库表名。这个方法首先通过反射获取到T的Class对象,然后从该Class对象中获取@TableName注解并获取表名,接着通过反射获取到该类中所有的Field对象,遍历每个Field对象并获取其值,最后构造出一个SQL语句并执行数据库插入操作。需要注意的是,这段代码并没有对SQL注入进行防范,如果插入的数据中包含特殊字符,可能会导致SQL注入攻击。
public void dictionaryConvert(Object obj, HttpServletRequest request) { try { if (obj == null) return; //当前view和entity中的所有types的字段 List<String> fieldNameList = new ArrayList<>(); Class tempClass = obj.getClass(); while (tempClass !=null) { Field[] declaredFields = tempClass.getDeclaredFields(); for (Field f : declaredFields) { f.setAccessible(true); if (f.getType().getName().equals("java.lang.Integer") && f.getName().contains("Types")) { fieldNameList.add(f.getName()); } } tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己 }
这段代码的作用是将对象中所有类型为java.lang.Integer并且字段名中包含"Types"的属性名保存到一个List中。首先判断传入的对象是否为空,然后通过反射获取对象的Class对象,并通过while循环遍历该对象及其父类的所有 declaredFields 字段。对于每个字段,如果其类型为java.lang.Integer,并且字段名包含“Types”,则将该字段名添加到 fieldNameList 列表中。最后返回 fieldNameList 列表。
阅读全文