使用自定义注解和反射 ,自动生成查询语句

1.自定义表名注解

package com.lf.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//自定义表名注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface SetTable {

    String value();

}

2.自定义属性注解

package com.lf.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
//自定义属性注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SetProperty {
    String name();

    int length();
}

3.用户实体

package com.lf.entity;

import com.lf.annotation.SetProperty;
import com.lf.annotation.SetTable;

@SetTable("t_user")
public class UserEntity {
    @SetProperty(length = 30, name = "user_name")
    private String userName;
    @SetProperty(length = 3, name = "user_age")
    private int userAge;

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public int getUserAge() {
        return userAge;
    }
    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }

}

4.测试类

package com.lf.test;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;

import com.lf.annotation.SetProperty;
import com.lf.annotation.SetTable;

public class UserAnnotation {

    public static void main(String[] args) throws ClassNotFoundException {
        //反射获取用户实体类
        Class<?> forName = Class.forName("com.lf.entity.UserEntity");

        StringBuffer sb = new StringBuffer("select ");
        //获取用户实体类所有字段
        Field[] declaredFields = forName.getDeclaredFields();
        for (int i = 0; i < declaredFields.length; i++) {
            //获取字段上的属性注解,并得到注解的值
            SetProperty annotation = declaredFields[i].getAnnotation(SetProperty.class);
            sb.append(annotation.name());
            if(i==(declaredFields.length-1)){
                sb.append(" from ");
            }else{
                sb.append(" , ");
            }
        }
        //获取用户实体类的表名注解和注解的值
        SetTable setTable = forName.getAnnotation(SetTable.class);
        sb.append(setTable.value());
        System.out.println(sb.toString());
    }

}

5.打印

原文地址:https://www.cnblogs.com/leifei/p/8252688.html

时间: 2024-08-30 07:48:08

使用自定义注解和反射 ,自动生成查询语句的相关文章

XsdGen:通过自定义Attribute与反射自动生成XSD

前言 系统之间的数据交互往往需要事先定义一些契约,在WCF中我们需要先编写XSD文件,然后通过自动代码生成工具自动生成C#对象.对于刚刚接触契约的人来说,掌握XMLSpy之类的软件之后确实比手写XML效率要高,但还是有些学习成本的.此外XML的tag太多,如果设计的类型属性过多,手写XSD也不太现实,很难专注于设计. 于是我想能不能先用C#写好类型,然后自动生成标准格式的XSD呢.经过三天左右的设计和实现,目前实现了以下功能: 1. 支持Class和Enum类型的设计 2. 支持基元类型.自定义

[杂记]自定义注解以及反射的应用

序:对于注解的认知是从spring开始的,不管是aop还是ioc,对于其概念是比较清楚的,但真正的实现却没有一个比较好的认知,前段时间看了下<从零开始写web框架>,但当时看的比较仓促,再说因为时间的原因,并没有细揪很多东西,这两天研究了下公司一个系统的代码,突然间对于这块有了比较好的理解,故做潦草记录. 项目使用自定义注解和反射主要是为了在webSocket请求发过来的时候,通过请求中的参数定位到类和方法,然后去执行具体的业务逻辑,具体整个流程如下. 1.自定义注解 @Target(Elem

NO2:自动生成sql语句

SQL语句自动生成工具 大哉乾元 2016/2/26   作者原创转载请注明出处 前言 这个程序是几年前做成的,现在整理成文档和大家分享,当时参与的项目中大量使用的sql语句,所以SqL语句的代码输入占了较大的比例,为了提高sql语句的书写正确性和输入效率,做成了这个自动生成工具. 一:ADO.NET中执行sql文,对应的sql语句嵌入到vb.net的代码内,分析sql的语法格式个特点: 已检索语句为例分析: A:必须是已select开头 B:检索的字段名(一些系统函数:可选,例如max,sum

java自定义注解与反射

java注解与反射一.Java中提供了四种元注解,专门负责注解其他的注解,分别如下 1.@Retention元注解,表示需要在什么级别保存该注释信息(生命周期).可选的RetentionPoicy参数包括: RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉 RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认) RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注

谨慎使用MyBatis自动生成Where语句

最近监控到类似这样一个慢查询: select delete_flag,delete_time from D_OrderInfo WHERE ( OrderId is not null and OrderId = N'xxxx') D_OrderInfo表上有一个OrderId的索引,但OrderId字段是Varchar类型.由于开发框架MyBatis自动生成Where条件不会指定参数类型,字符串类型的参数到了SQLServer里就自动成了NVARCHAR(4000)类型了,坑人的是,不指定参数类

SQL的自动生成delete语句

当要清除数据库中表的数据时,自己写sql不好检查错误,也很麻烦. 可以使用下列语句自动生成语句,同时防止误操作,mysql 用 information_schema来存储数据库所有的信息 SELECT CONCAT('delete from ',table_name) FROM information_schema.tables WHERE table_schema='数据库名' AND table_type='base table'; 效果

打开powerDesigner时,创建table对应的自动生成sql语句没有注释

在创建pdm时由于需要在name列填写的是以后要在表中创建的注释信息,comment中则写的说明信息字数比较多.默认情况下在生成建表sql时不能将name生成注释信息,进行如下设置可以讲name生成注释信息. 1)选择database->edit current dbms-->Column-->ColumnComment将comment on column [%QUALIFIER%]%TABLE%.%COLUMN% is%.q:COMMENT% 改为comment on column [

根据DELTA自动生成SQL语句

上传客户端的CLIENTDATASET.delta到服务器的clientdataset.data,服务端解析clientdataset的数据生成相应的SQL语句. 相对于直接调用datasetprovider.applyupdates()方法提交数据而言,前者的可控性更强,对于某些要求灵活性很强的场合,前者可能是必须的提交方式. procedure TBaseService.ApplyUpdates(const Delta: OleVariant; TableName, KeyField: Wi

利用sql 存储过程把表中内容自动生成insert语句

选中所在数据库 执行创建存储过程的sql CREATE proc [dbo].[spGenInsertSQL] (@tablename nvarchar(256),@sqlwhere varchar(4000)) as begin declare @sql varchar(max) declare @sqlValues varchar(max) set @sql =' (' set @sqlValues = 'values (''+' select @sqlValues = @sqlValues