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

  • 时间:
  • 浏览:1

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

}

                // 获取Table注解 

  取值(RetentionPoicy)有:

 *  1.根据id查询

 *  2.根据用户名查询

import java.lang.annotation.RetentionPolicy;

 * ClassName:User.java

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

   否则可不时需被之类javadoc此类的工具文档化。

 * ClassName:Column.java

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

 * @since JDK1.7

         /**

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

/**

package com.demo.ann;

try {

import java.lang.annotation.Target;

}

for(Field f : fields){

 *  public class User

Object values = null;

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

}

}

import java.lang.annotation.Retention;

return age;

Field[] fields = c.getDeclaredFields();

@Column("USER_ID")

 */

String sql4 = executeQuery(user4);

@Column("USER_NAME")

 *  @Column("userId")

package com.demo.ann.anns;

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

String columnName = column.value();

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

 */

 * @author xg.qiu

return passWord;

 * ClassName:Table.java

 * 取值(ElementType)有:

 * Aug 3, 2015

System.out.println(sql1);

import com.demo.ann.exception.AnnException;

 */

package com.demo.ann;

import java.lang.reflect.Method;

import com.demo.ann.anns.Table;

 * 自定义注解:列

 * @author xg.qiu

public void setPassWord(String passWord) {

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

 * Aug 3, 2015

String sql3 = executeQuery(user3);

for(String s : valuesIn){

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

 * @Target :用于描述注解的使用范围(即:被描述的注解可不时需用在那些地方)

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

public @interface Table {

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

Method getMethod = c.getDeclaredMethod(getFieldMethodName);

}

String fieldName = f.getName();

//2、查找类与否被注解

//1、获取类

 * @author xg.qiu

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

 */

public int getAge() {

return userId;

System.out.println(sql2);

/**

    解析注解并返回执行的sql励志的话  

public String getUserName() {

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

}

                        // 获取列注解 

import java.lang.reflect.Field;

/**

import java.lang.annotation.RetentionPolicy;

 * 

//3、查找属性与否被注解

/**

private String passWord;

/**

   [时需是extend class 而与否implements interface]

 */

import java.lang.annotation.Retention;

}

 * @author xg.qiu

User user4 = new User();

@Column("AGE")

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

 */

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

 */

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

}

                // 返回拼装好的sql励志的话  

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

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

System.out.println(sql3);

package com.demo.ann.anns;

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

 * @since JDK1.7

 * 使用自定义注解:

    2.ElementType.FIELD:用于描述域

 * 

//3.4、.拿到字段值

}

 * 自定义注解:表

 * 

    4.ElementType.METHOD:用于描述法律方法

/**

public int getUserId() {

public @interface Column {

import com.demo.ann.anns.Column;

return userName;

}

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

}

//3.5.拼装sql

String value();

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

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

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

 * @since JDK1.7

} catch (AnnException e) {

          */

this.passWord = passWord;

@Table("TABLE_USER")

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

} catch (AnnException e) {

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

public void setUserName(String userName) {

}

 * 用法:

/**

String value();

 * Aug 3, 2015

String sql2 = executeQuery(user2);

/**

import java.lang.annotation.ElementType;

@Column("PASS_WORD")

package com.demo.ann;

e.printStackTrace();

try {

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

 * Aug 3, 2015

User user2 = new User();

private static String executeQuery(User user) {

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

 * @author xg.qiu

public void setAge(int age) {

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

try {

                                // 自定义异常

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

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

}else if(values instanceof String){

}

 *  @Table("user")

private int age;

    5.ElementType.PACKAGE:用于描述包

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

 * 用法:

continue;

public String getPassWord() {

}

}

User user1 = new User();

}

/**

}

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

private String userName;

private int userId;

 */

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

          * @param user 用户对象

          *@return String 返回的是拼装好的sql励志的话

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

if(!isExist){

if(values instanceof Integer){

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

import java.lang.annotation.ElementType;

}

 *  private int userId;

} catch (Exception e) {

                                 // 打印堆栈信息 

   Documented是另一个 标识注解,没得成员。

sb.append(")");

 * @since JDK1.7

System.out.println(sql4);

 */

}

public class Test {

}

import java.lang.annotation.Target;

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

import com.demo.ann.anns.Table;

//3.2、拿到字段值

}

public static void main(String[] args) {

values = getMethod.invoke(user);

String sql1 = executeQuery(user1);

User user3 = new User();

 * 

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

this.age = age;

e.printStackTrace();

 */

}

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

}

this.userId = userId;

 * @since JDK1.7 Aug 3, 2015

 * ClassName:Test.java

this.userName = userName;

public class User {

//3.2、获取字段

 * 

 * ClassName:package-info.java

/**

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

if(!isFExist){

 * 

}else{

e.printStackTrace();

import com.demo.ann.anns.Column;

public void setUserId(int userId) {

sb.append(" in('");

user3.setUserName("xiaoqiu");

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

return sb.toString();