设置初始值,然后把代码改为等于初始值的时候跳过就行了,比如设置int类型的初始值为-1,代码把=0 continue改为 =-1的时候continue ,这个是要根据在实际应用中进行调整,课程是死的,你要理解的是编程思想及方法的使用,而不是去钻牛角尖。
是的,最后拼接sql那里老师笔误。应该是列名columnName而不是字段名fieldName。
sb.append(" and ").append(filedName).append("=").append(fieldValue);
应该改为:
sb.append(" and ").append(columnName).append("=").append(fieldValue);
可以自己去查询
把sb.append(" and '").append(fieldName); 改成sb.append(" and '").append(columnName);
即可,老师这里可能是不小心写错了,毕竟他写的属性名和注解上的value是一样的
不是,是和hibernate原理类似,mybatis开发者还要在xml里手写SQL,而hibernate和视频里讲的就是要开发者不需要接触SQL语句,只用调用方法,框架会自动给你生成SQL,所以和hibernate类似
按下 ctrl 键,然后鼠标拖动你将要复制的Filter1类文件到一个目录下,输入你的类名Filter2,这样就创建了.
在循环中遇到continue关键字,会结束当前循环,并返回到循环定义的开始位置,重新判断循环条件,并执行
还有个问题如果使用者不加注解使用默认的字段名就不行了
你输出了吗
//将字符数值加上 单引号 if(fieldValue instanceof String) { //instanceof 判断fieldValue是否是String类型。 fieldValue = "\'" + fieldValue + "\'"; } stringBuilder.append(" and ").append(filedName).append("=").append(fieldValue);
你试一试这样加引号。 因为if判断 fieldValue 是否是String 类型,当是的时候才执行if里面的操作,那么Id不是String 类型,所以就没有执行if里面的操作。
可以优化一下 @Column 当不指定列名时,按照默认的规整,将字段的驼峰命名规则转换成数据库的大写+下划线命名规则进行映射。当指定命名规则时,使用传入的列名进行映射。事实上Hibernate就是类似的处理方式。
的确,最后拼装sql的时候应该用columnName而不是fieldName.
为false , 说明c class 里面没有使用table 声明的注解
可能没导入java.lang.reflect.Field,可能哪个符号用中文了,你看下提示信息是什么呗
Field[] fArray = c.getDeclaredFields();
问题是怎么解决sql注入问题,哈哈 正文又问到还可以解决什么问题
先回答第一个问题:
就想像老师教程中提到的一样,注意在拼接字符串的问题,比如where 1=1 不过好像这种已经通过类来封装值,应该不是那么容易进行SQL注入,毕竟不是直接拼接字符串,对吧?
第二个问题:
我也刚学注解,我就简单谈下自己的看法,我觉得就是灵活运用注解提供的功能,老师教程里就仅仅演示了类注解和字段注解,还有很多呀比如方法注解什么的。
针对你业务场景下的不同,提供不同注解,选择不同执行方式什么的。这个就需要进行设计了。
还有一种就是注解就像约束好的规则一样,在开发是按照你最初设计的注解功能,进行相应的流程操作,简化开发复杂程度。
这个思路可以的,用Integer,默认是也是null了。
不涉及,止于sql拼装