反射概念
简单来就在程序运行过程中得到对象的,class,field,method,这玩意到底有啥用?
用处Demo
通常在Dao框架中,save方法都是泛型参数
save(T t)
save(People people)
save(User user)
为什么我们不管放什么对象都能保存到数据库呢
实现原理
其实说白了这个问题,最后肯定还是这样插入
insert into tablename values(1,'a','b')
问题的关键就是如何生成这个SQL,这不就是反射的场景嘛
随便写了个Demo,这不就拿到了嘛,看到这也能明白注解是什么用的了,注解其实就是class中的一些元数据信息,比如类的元数据信息,字段的元数据信息,这样在反射的时候可以拿到类到底对应的数据库中的哪个字段,哪个表名,这样才能生成正确的SQL
public class TestRe {
public static void main(String[] args) {
People peopel = new People();
peopel.setAge(1);
Field[] fields = peopel.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
try {
System.out.println(fields[i].getInt(peopel));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
class People {
int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
注解示例
import javax.persistence.*;
@Entity(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "name")
private String name;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}