使用Java反射(Reflect)、自定义注解(Customer Annotation)生成简单SQL语句

  • 时间:
  • 浏览:2
  • 来源:5分3D_5分排列5

//1、获取类

 * @since JDK1.7

}

public void setAge(int age) {

/**

sb.deleteCharAt(sb.length() - 1);

 * 自定义注解:列

 * ClassName:Table.java

for(Field f : fields){

}

this.age = age;

}

 * ClassName:Test.java

 *  1.根据id查询

System.out.println(sql2);

/**

e.printStackTrace();

   Documented是2个 标识注解,没人 成员。

}

sb.append(s).append("'").append(",");

//3.1、处置每个字段对应的sql

 * ClassName:package-info.java

sb.append(" and ").append(columnName);

 * @author xg.qiu

 * 测试:使用自定义注解完成数据库的查询返回sql搞笑的话

boolean isFExist = f.isAnnotationPresent(Column.class);

@Table("TABLE_USER")

}

public static void main(String[] args) {

@Target( ElementType.FIELD)//作用于属性

try {

String sql2 = executeQuery(user2);

    6.ElementType.PARAMETER:用于描述参数

 * ClassName:User.java

user3.setUserName("xiaoqiu");

return userName;

 */

import java.lang.annotation.RetentionPolicy;

import com.demo.ann.anns.Column;

/**

public class Test {

 */

sb.append(")");

 * @author xg.qiu

/**

}

//3.4、.拿到字段值

 * @author xg.qiu

}

String value();

    4.ElementType.METHOD:用于描述法律法律依据

public int getUserId() {

private int age;

Table table = (Table) c.getAnnotation(Table.class);

}else{

}

}

}

}

                        // 获取列注解 

 */

e.printStackTrace();

 * 用法:

}

                // 获取Table注解 

public void setUserId(int userId) {

String sql3 = executeQuery(user3);

} catch (AnnException e) {

private String userName;

this.userName = userName;

 * 

 * @since JDK1.7 Aug 3, 2015

}

public int getAge() {

import java.lang.annotation.Retention;

 *  @Column("userId")

 * Aug 3, 2015

if(!isFExist){

values = getMethod.invoke(user);

User user2 = new User();

continue;

@Target( ElementType.TYPE)// 作用域 类或接口

public String getPassWord() {

 * ClassName:Column.java

User user1 = new User();

boolean isExist = c.isAnnotationPresent(Table.class);

 * Aug 3, 2015

return userId;

import com.demo.ann.exception.AnnException;

}

@Retention( RetentionPolicy.RUNTIME)//有效期为运行时

/**

import java.lang.annotation.ElementType;

if( values == null || ( values instanceof Integer && (Integer) values == 0) ){

@Column("PASS_WORD")

if(values instanceof Integer){

String fieldName = f.getName();

通常大伙使用自定义注解一般使用4中元注解即:

String columnName = column.value();

String value();

String sql4 = executeQuery(user4);

for(String s : valuesIn){

throw new AnnException("the "+ c.getClass().getName() +" class is not used annotation");

package com.demo.ann;

 */

  @Documented:用于描述其它类型的annotation应该被作为被标注的应用守护进程成员的公共API,

try {

                                // 自定义异常

public @interface Table {

package com.demo.ann.anns;

import java.lang.annotation.Target;

 */

e.printStackTrace();

Class<? extends User> c = user.getClass();

package com.demo.ann;

  取值(RetentionPoicy)有:

import com.demo.ann.anns.Table;

 */

    1.ElementType.CONSTRUCTOR:用于描述构造器

sb.append("='").append(values).append("'");

this.passWord = passWord;

String sql1 = executeQuery(user1);

}

                // 返回拼装好的sql搞笑的话 

   [只有是extend class 而全是implements interface]

  @Inherited :元注解是2个 标记注解,@Inherited阐述了某个被标注的类型是被继承的

import java.lang.annotation.RetentionPolicy;

 *  3.根据用户名、密码组合查询

 * Aug 3, 2015

user1.setUserId(1);//根据Id查询

 */

private static String executeQuery(User user) {

return sb.toString();

String [] valuesIn = ((String) values).split(",");

sb.append("=").append(values);

    3.RetentionPolicy.RUNTIME:在运行时有效(即运行时保留)

Method getMethod = c.getDeclaredMethod(getFieldMethodName);

  @Retention :@Retention定义了该Annotation被保留的时间长短

sb.append(" in('");

this.userId = userId;

StringBuffer sb = new StringBuffer("select * from ");

          * @param user 用户对象

          *@return String 返回的是拼装好的sql搞笑的话

    1.RetentionPolicy.SOURCE:在源文件含有效(即源文件保留)

System.out.println(sql1);

 *  private int userId;

return age;

private int userId;

 * @Target :用于描述注解的使用范围(即:被描述的注解还只有用在那些地方)

 * Aug 3, 2015

import java.lang.annotation.ElementType;

}

if(!isExist){

//2、查找类有无被注解

}else if(values instanceof String){

//3、查找属性有无被注解

@Column("USER_NAME")

/**

    解析注解并返回执行的sql搞笑的话 

}

@Retention( RetentionPolicy.RUNTIME)// 有效期为运行时

//3.2、拿到字段值

import java.lang.annotation.Retention;

 * 

/**

User user3 = new User();

if( ((String) values).contains(",")){

//3.5.拼装sql

try {

User user4 = new User();

//3.2、获取字段

 *  public class User

String getFieldMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);

    5.ElementType.PACKAGE:用于描述包

    2.RetentionPolicy.CLASS:在class文件含有效(即class保留)

}

         /**

import com.demo.ann.anns.Table;

 * 

 * @since JDK1.7

@Column("USER_ID")

 * 使用自定义注解:

Column column = f.getAnnotation(Column.class);

public void setUserName(String userName) {

return passWord;

    3.ElementType.LOCAL_VARIABLE:用于描述局部变量

import com.demo.ann.anns.Column;

} catch (Exception e) {

                                 // 打印堆栈信息 

   而且还只有被类式javadoc此类的工具文档化。

          */

user4.setUserName("xiaoqiu,zasang,lisi");

Field[] fields = c.getDeclaredFields();

 * @since JDK1.7

 *  2.根据用户名查询

user2.setUserName("xiaoqiu");// 根据用户名查询

 * 

/**

}

 * 自定义注解:表

}

}

}

package com.demo.ann;

} catch (AnnException e) {

 */

private String passWord;

user3.setPassWord("123456");// 根据用户名、密码组合查询

 */

@Column("AGE")

 * @since JDK1.7

 * @author xg.qiu

throw new AnnException("the " + f.getName()  +" field is not used annotation");

 * 用法:

import java.lang.reflect.Field;

 * 

import java.lang.reflect.Method;

Object values = null;

public void setPassWord(String passWord) {

 * 取值(ElementType)有:

package com.demo.ann.anns;

 * 

    7.ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明

 * @author xg.qiu

    2.ElementType.FIELD:用于描述域

System.out.println(sql4);

 */

public class User {

}

/**

System.out.println(sql3);

import java.lang.annotation.Target;

public @interface Column {

public String getUserName() {

sb.append( table.value() +" where 1= 1");

 *  @Table("user")

/**