看尚学堂高琪老师的视频看到了注解 加反射这个 东西,之前 对注解和反射并不是很了解,通过老师的视频对注解和反射有了 大致的了解 。
js、python、ruby等都是动态脚本语言,是在编译的时候动态编译的,非常有代表性的代码 可以用js的一段代码简单的表示:
<script typr="text/javascript">
var a=4;b=5;
alert(" a =alert(a+b)")
</script>
虽然java没有 上述的那种特性,但是java的反射机制使java也具有了半动态性。
具体利用注解 和反射简单拼接SQL语句的代码 入下 :
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)//作用域在类
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
public String value() default "";
}
//用于确定用来 查找的数据表的字段名
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)//作用域只能是属性
@Retention(RetentionPolicy.RUNTIME)//运行时保留
public @interface Column {
String value() default "";
}
//自定义实体类
import javaAnnoation.Column;
import javaAnnoation.Table;
/**
* 根据这个实体来动态拼接SQL语句
* 学到的快捷键 ctrl+shift+O直接导入所有需要导入的包
* 右键+source+sets and gets直接创建 set get方法
* @author wky
*
*/
@Table("username")
public class sqlSet {
@Column("id")
private int id;
@Column("username")
private String name;
@Column("password")
private String pwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public sqlSet() {
super();
}
}
//测试类
import java.lang.reflect.Field;
import javaAnnoation.Column;
import javaAnnoation.Table;
import linkSqlEntity.sqlSet;
public class linkSql {
public static void main(String[] args) {
sqlSet sSet=new sqlSet();
sSet.setId(000001);
sSet.setName("wky");
sSet.setPwd("123");
String sql=query(sSet);
System.out.println("======="+sql+"========");
}
@SuppressWarnings("all")
/**
* 主要作用是为了进行字符串的拼接
* @param sSet 自定义的实体类参数
* @return String 返回拼接好的 字符串
*/
public static String query(sqlSet sSet){
String sql="select * from ";
try {
Class clazz=Class.forName("linkSqlEntity.sqlSet");
Table tName=(Table)clazz.getAnnotation(Table.class);
if(tName!=null){
sql+=tName.value()+" ";
Field fieldId=clazz.getDeclaredField("id");
Field fieldName=clazz.getDeclaredField("name");
Field fieldPwd=clazz.getDeclaredField("pwd");
if(fieldId!=null || fieldName!=null|| fieldPwd!=null){
String id=fieldId.getAnnotation(Column.class).value();
String name=fieldName.getAnnotation(Column.class).value();
String pwd=fieldPwd.getAnnotation(Column.class).value();
int idValue=sSet.getId();
String nameValue=sSet.getName();
String pwdValue=sSet.getPwd();
sql+="where "+id+"='"+idValue+"'"+" and "+name+"='"+nameValue+"'"+" and "+pwd+"='"+pwdValue+"'";
}else{
System.out.println("不能进行拼接,没有有效参数!!!");
}
}else{
sql+="";
}
} catch (Exception e) {
e.printStackTrace();
}
finally{
return sql;
}
}
}