反射

来源:互联网 发布:温岭淘宝培训 编辑:程序博客网 时间:2024/04/29 18:15

1.什么是反射?
2.反射的常用方法?
3.反射的应用场景?
4.注解?何为注解,注解的常用规范?
5.注解的实例。
6.反射+注解实现sql语句的生成?


package com.luntan.test;


建立一个Person的类
public class Person {
private String name;
private int age;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

public Person(){

}

private Job job;


public Job getJob() {
return job;
}
public void setJob(Job job) {
this.job = job;
}

}

2.建立一个util工具包

package com.luntan.util;


import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


public class BeanUtil {

public static String getSelectSQL(Object obj) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Class<? extends Object> classzz = obj.getClass();
String tableName = classzz.getSimpleName();//获取类名  
StringBuffer sbsql = new StringBuffer();
sbsql.append(" Select * from "+tableName+" ");
sbsql.append(" where 1= 1 ");
Field[] fields = classzz.getDeclaredFields();//获取所定义的字段
for(Field f :fields){
String methodName = "get"+f.getName().substring(0,1).toUpperCase()+f.getName().substring(1);
Method m = classzz.getDeclaredMethod(methodName);//获取某个方法
Object o = m.invoke(obj);
if(o!=null){
if(o instanceof String){
sbsql.append(" And "+f.getName()+"='"+o+"' ");
}else{
sbsql.append(" And "+f.getName()+"="+o);
}
}
}
return sbsql.toString();
}

public static String getUpdate(Object obj) throws IllegalArgumentException, IllegalAccessException{
Class<? extends Object> classzz = obj.getClass();
String sql = "Update"+classzz.getSimpleName()+"set";
String sql2 = "";
String sql3 = "where";
Field[] fields = classzz.getDeclaredFields();
for(Field f : fields){
f.setAccessible(true);//可以访问private值
Object value = f.get(obj);
if(f.isAnnotationPresent(PrimaryKey.class)){
if(value instanceof String){
sql3 = sql3 + f.getName()+"='"+value+"'";
}else{
sql3 = sql3 + f.getName()+"="+value+"";
}
}else if(!f.isAnnotationPresent(NonField.class)){
if(value instanceof String){
sql2 = sql2 + f.getName()+"='"+value+"',";
}else{
sql2 = sql2 + f.getName()+"="+value+"";
}
}
}
sql2 = sql2.substring(0,sql2.length()-1);
sql = sql + sql2 + sql3;
return sql;
}
}

3.UI界面

package com.luntan.test;


import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;


import com.luntan.model.UserInfo;
import com.luntan.util.BeanUtil;


public class TestUI {


public static void main(String[] args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
// TODO Auto-generated method stub
//通过反射去获取相应的类的一些定义
Class<Person> classzz = Person.class;

//另外一种获取class对象的方法
/*Person p = new Person();
Class classzz2 = p.getClass();*/

//第三种获取class对象的方法
/*try {
Class classzz3 = Class.forName("com.luntan.test.Person");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/

System.out.println("类的名字:"+classzz.getSimpleName());
Field[] fields = classzz.getDeclaredFields();
for(Field f : fields){
Class<?> c = f.getType();
if(c.getPackage()!=null){
if(c.getPackage().getName().equals("com.luntan.test")){
System.out.println(c.getPackage().getName());
System.out.println("该字段的类型:"+c.getName());
System.out.println("该字段的名字:"+f.getName());
}
}
}
UserInfo u = new UserInfo();
u.setUserName("张三");
u.setUserEmail("11@11.com");
u.setUserId(123);
String userinfoSQL = BeanUtil.getSelectSQL(u);
System.out.println(userinfoSQL);
}
}


4.UI界面运行结果


5.建立一个model层   建一个userinfo类

package com.luntan.model;


/**
 * 用户信息表,对应数据库的实体对象userinfo
 * @author Administrator
 *
 */
public class UserInfo {

private Integer userId;//用户编号
private String userName;//用户昵称
private String userPwd;//用户密码
private String userEmail;//用户邮箱

public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getUserEmail() {
return userEmail;
}
public void setUserEmail(String userEmail) {
this.userEmail = userEmail;
}
}

0 0