`
buzhucele
  • 浏览: 333829 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java Annotation 拼装SQL语句

    博客分类:
  • java
阅读更多
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;

@Target(ElementType.FIELD)  
@Retention(RetentionPolicy.RUNTIME) 
@interface FiledRef
{
    String fieldName();
}

@Target(ElementType.TYPE)  
@Retention(RetentionPolicy.RUNTIME)
@interface TableRef
{
    String tableName();
}

@TableRef(tableName = "MobDevice")
public class ReflectTest
{
    @FiledRef(fieldName = "ID")
    private Long id;

    @FiledRef(fieldName = "DEVICE_NAME")
    private String name;

    @FiledRef(fieldName = "DEVICE_CODE")
    private String code;

    public ReflectTest(Long id, String name, String code)
    {
        this.id = id;
        this.name = name;
        this.code = code;
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getCode()
    {
        return code;
    }

    public void setCode(String code)
    {
        this.code = code;
    }

    /**
     * @description
     * @author zhangml
     * @date May 17, 2010 4:39:30 PM
     * @param args
     */
    public static void main(String[] args)
    {
        ReflectTest rt = new ReflectTest(new Long(1), "2", "3");
        StringBuffer sql = new StringBuffer("");
        buildSql(rt, sql);
        System.err.println(sql);
    }

    public static void buildSql(Object obj, StringBuffer sb)
    {
        Class<? extends Object> clazz = obj.getClass();
        Field[] fields = clazz.getDeclaredFields();
        if (clazz.isAnnotationPresent(TableRef.class))
        {
            TableRef tr = (TableRef) clazz.getAnnotation(TableRef.class);
            sb.append("SELECT * FROM ");
            sb.append(tr.tableName());
        }
        if (fields != null && fields.length > 0)
        {
            sb.append(" WHERE ");
            for (Field field : fields)
            {
                try
                {
                    Object value = field.get(obj);
                    if (value != null && field.isAnnotationPresent(FiledRef.class))
                    {
                        FiledRef fr = field.getAnnotation(FiledRef.class);
                        sb.append(fr.fieldName() + "=" + value);
                        sb.append(" AND ");
                    }
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
            int length = sb.length();
            sb.delete(length-5, length);
        }
    }

}

执行结果:SELECT * FROM MobDevice WHERE ID=1 AND DEVICE_NAME=2 AND DEVICE_CODE=3
分享到:
评论

相关推荐

    Java 使用注解拼接SQL语句

    "Java使用注解拼接SQL语句"是一个常见的实践,它使得动态构建SQL查询变得更为简洁和可维护。这种技术通常与ORM(对象关系映射)框架如MyBatis或Hibernate结合使用,但也可以通过自定义处理逻辑实现。 1. **自定义...

    Java Annotation

    ### Java Annotation 概述与应用 #### 一、Java Annotation 的定义及作用 Java Annotation(注解)是自 Java 5.0 开始引入的一种语言元素,它为开发者提供了在代码中添加元数据的能力。简单来说,注解就像是对代码...

    注解反射生成SQL语句

    在Java编程语言中,注解(Annotation)和反射(Reflection)是两个强大的工具,它们能够帮助开发者实现高级功能,如元编程和动态行为控制。在本篇中,我们将深入探讨如何利用注解和反射来生成SQL语句,这对于构建...

    JDK5.0 Java Annotation 介绍(ppt)

    Java Annotation 是 JDK5.0 引入的一种元数据机制,它允许程序员在代码中嵌入额外的信息,这些信息可以被编译器、构建工具或运行时系统用来执行特定的任务。Annotation 提供了一种安全、灵活的方式来描述代码的属性...

    使用Annotation和反射实现Bean转SQL语句Demo

    在Java开发中,Bean对象常用于封装业务数据,而SQL语句则是数据库操作的核心。将Bean对象转换为SQL语句可以简化数据操作,提高代码的可读性和可维护性。本示例通过Annotation和反射技术来实现这一目标,旨在帮助...

    model自动生成对应crud sql语句

    2. 自动化生成SQL:一些ORM(对象关系映射)库,如Hibernate(Java)、SQLAlchemy(Python)、Entity Framework(C#)等,可以基于模型类自动构建SQL语句。它们会根据模型的属性生成INSERT、SELECT、UPDATE、DELETE...

    java annotation demo

    Java 注解(Annotation)是Java语言提供的一种元编程机制,它允许程序员在源代码的各个元素(如类、方法、变量等)上添加信息。这些信息可以被编译器或运行时系统用来验证代码、执行特定操作或者提供额外的运行时...

    Java Annotation手册

    《Java Annotation手册》 在Java编程语言中,注解(Annotation)是一种元数据,它提供了在编译时或运行时处理代码的一种方式。通过注解,开发者可以向编译器或JVM提供有关代码的附加信息,而这些信息通常不直接影响...

    Java annotation (JDK5)

    Java的`javax.annotation.processing.Processor`接口定义了注解处理器的规范。 5. 使用注解 注解可以应用于类、方法、字段、参数、构造函数、包等不同级别。例如: ```java @MyAnnotation("Hello, World!") ...

    JAVA Annotation学习

    Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是关于数据的数据,可以提供额外的信息,这些信息虽然不是程序运行所必需的,但能够帮助编译器、JVM(Java虚拟机)或工具更好...

    Java Annotation注解技术

    4. **代码生成**:一些工具(如Hibernate)会根据注解生成数据库映射或SQL语句。 5. **测试**:JUnit框架中的`@Test`注解标识测试方法。 ### 自定义注解 自定义注解需要定义一个新的注解类型,并可以包含自定义的...

    mybatis自动sql生成插件源码

    MyBatis是一款流行的Java持久层框架,用于简化数据库操作,其特点是将SQL语句与Java代码分离,使得SQL和业务逻辑更加清晰。本项目提供的"mybatis自动sql生成插件源码"则进一步提升了开发效率,通过拦截器...

    Java Annotation注解.doc

    Java Annotation,也称为注解,是Java编程语言中的一种元数据机制,用于向编译器、JVM或工具提供有关代码的附加信息。这些信息不直接影响代码的执行,但可以被编译器或运行时环境用来执行特定的操作,如代码分析、...

    Java Annotation(Java 注解)

    如果你想知道java annotation是什么?你可以看看

    Java Annotation详解

    Java 注解(Annotation)是 Java 语言的一种元数据机制,它允许程序员在源代码中嵌入额外的信息。这些信息可以被编译器、IDE、JVM 或其他工具使用,以增强代码的功能,简化开发,提高可维护性。注解并不直接影响代码...

    JAVA 标注annotation

    Java annotation 什么是java annotation?annotation 的7种标注类型。nnotation提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、...

    java之Annotation及其应用

    Java注解(Annotation)是Java语言的一个重要特性,它为元数据提供了强大的支持。元数据是一种描述数据的数据,可以提供有关代码的附加信息,而这些信息并不直接影响代码的执行。在Java中,注解用于向编译器、JVM或...

    JavaAnnotation手册.pdf

    【Java Annotation手册】 Java Annotation是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元数据,这些元数据不直接影响程序的运行,但可以被编译器、工具或运行时环境用来验证代码、生成文档、实现依赖...

    noear微型ORM框架(支持:java sql,xml sql,annotation sql;事务;缓存;监控;等...)

    1. **Java SQL**:在代码中直接编写SQL语句,灵活且直观,适用于对SQL有高度控制需求的情况。 2. **XML SQL**:通过XML文件配置SQL,将业务逻辑和数据访问层分离,有利于代码维护和团队协作。 3. **Annotation SQL**...

    Java Annotation的讲解和例子

    Java 注解(Annotation)是Java语言的一个重要特性,它为代码提供元数据,即关于代码的信息,但这些信息不直接影响程序的运行。注解在Java中主要用于编译器检查、运行时处理、框架生成元数据等场景。本篇将深入探讨...

Global site tag (gtag.js) - Google Analytics