假设们使用一张简单的表,结构如下:



定义注解:

表注解:

package com.xzlf.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; /**
* 对象对应表名注解
* @author xzlf
*
*/
@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface StudentTable {
String value();
}
字段注解:
package com.xzlf.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; /**
* 对象属性对应表字段注解
* @author xzlf
*
*/
@Target(value = {ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface StudentField {
String columnName();
String type();
int length();
}

写个对象类并使用自动以注解:

package com.xzlf.annotation;

@StudentTable(value="tb_student")
public class Student { @StudentField(columnName = "id", type = "int", length = 10)
private int id;
@StudentField(columnName = "sname", type = "varchar", length = 10)
private String sname;
@StudentField(columnName = "age", type = "int", length = 3)
private int age; public Student() {
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} }

使用反射读取注解并生成SQL语句:

package com.xzlf.annotation;

import java.lang.reflect.Field;

/**
* 使用反射读取注解的信息,模拟框架生成SQL语句
*
* @author xzlf
*
*/
public class AnnotationApp {
public static void main(String[] args) {
// 需要拼接的SQL语句
StringBuilder sb = new StringBuilder("create table ");
try {
Class<Student> clz = (Class<Student>) Class.forName("com.xzlf.annotation.Student");
// 获取类的指定信息
StudentTable stable = clz.getAnnotation(StudentTable.class);
String tableName = stable.value();
sb.append(tableName);
// 获取类属性注解
Field[] declaredFields = clz.getDeclaredFields();
sb.append("(");
for (Field field : declaredFields) {
// 获取类属性注解
StudentField annotation = field.getAnnotation(StudentField.class);
String fieldSQLStr = annotation.columnName() + " "
+ annotation.type() + "("+annotation.length()+"),";
//System.out.println(fieldSQLStr);
sb.append(fieldSQLStr);
}
sb.setCharAt(sb.length() - 1, ')'); System.out.println(sb); } catch (Exception e) {
e.printStackTrace();
}
}
}

运行测试:



SQL语句生成了。

Java 自定义注解及注解读取解析--模拟框架生成SQL语句的更多相关文章

  1. python读取excel表格生成sql语句 第一版

    由于单位设计数据库表·,都用sql.不知道什么原因不用 powerdesign或者ermaster工具,建表很痛苦  作为程序猿当然要想办法解决,用Python写一个程序解决 需要用到 xlrd li ...

  2. atitit. java jsoup html table的读取解析 总结

    atitit. java jsoup html table的读取解析 总结 1. 两个大的parser ,,,jsoup 跟个   htmlparser 1 2. 资料比较 1 3. jsoup越佳. ...

  3. Python 一键拉取Git分支源码自动解析并执行SQL语句

    基于Python实现自动拉取Git分支源码自动解析并执行SQL语句 by:授客 QQ:1033553122 1.代码用途 开发过程中,研发人员会提交SQL更新脚本到Git源码库,然后测试负责去拉取这些 ...

  4. Java自定义数据验证注解Annotation

    本文转载自:https://www.jianshu.com/p/616924cd07e6 Java注解Annotation用起来很方便,也越来越流行,由于其简单.简练且易于使用等特点,很多开发工具都提 ...

  5. 4、注解反射生成SQL语句

    .任务说明         ①有一张用户表,字段包括:用户ID.用户名.昵称.年龄.性别.所在城市.邮箱.手机号:         ②使用java注解来对用户表的每个字段或字段的组合条件进行动态生成S ...

  6. mybatis使用注解替代xml配置,动态生成Sql

    mybatis使用注解替代xml配置时,遇到判断条件是否为null或者为空时,@Select很难搞定,不知道怎么办? mybatis3中增加了使用注解来配置Mapper的新特性,使用 SelectPr ...

  7. 使用mybatis的动态sql解析能力生成sql

    需求: 计算平台,有很多表,打算提供一个基于sql的服务接口, sql不能完全在配置页面写死, 要能根据参数不同执行不同的语义,防止sql个数爆炸 把mybatis原码down下来, 改造一下测试用例 ...

  8. 读取excel数据生成sql脚本

    package com.interact.util; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.b ...

  9. Java代码实体类生成SQL语句(Java实体类转数据库)

    有的时候把数据库删了,如果照着实体类重新创建数据库的话比较麻烦,可以使用这个工具,把代码复制到项目里面设置一下即可把Java代码中的实体类转换为SQL语句输出为一个文件,打开执行命令即可. 下载:ht ...

随机推荐

  1. Python python对象 deque

    # deque对象 ''' class collections.deque([ iterable [,maxlen ] ] ) 返回一个从左到右(使用append())初始化的新deque对象,其中包 ...

  2. HashMap中使用自定义类作为Key时,为何要重写HashCode和Equals方法

    之前一直不是很理解为什么要重写HashCode和Equals方法,才只能作为键值存储在HashMap中.通过下文,可以一探究竟. 首先,如果我们直接用以下的Person类作为键,存入HashMap中, ...

  3. mybatis 入门基础

    一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果.MyBatis ...

  4. LVS 负载均衡 三种工作模式 十种调度算法

    原文链接:https://blog.csdn.net/weixin_40470303/article/details/80541639 一.LVS简介 LVS(Linux Virtual Server ...

  5. Python数据库之数据操作

    一 介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...

  6. 玩转redis-简单消息队列

    使用go语言基于redis写了一个简单的消息队列 源码地址 使用demo redis的 list 非常的灵活,可以从左边或者右边添加元素,当然也以从任意一头读取数据 添加数据和获取数据的操作也是非常简 ...

  7. ajax前端传递对象给后端

    前端操作如下即可:

  8. 搭建脚手架cli2.x环境

    Vue脚手2.x架环境搭建 一.环境搭建 1.安装node 去官网下载node安装包 傻瓜式安装 万一安装后终端没有node环境,要进行node环境变量的配置 可以通过node提供的npm包管理器安装 ...

  9. Spring 中使用 ActiveMQ 笔记

    首先需要在 pom.xml 中添加如下两个 jar 包:spring-jms 与 activemq-core,其依赖的 jar 包会自动下载 接着进行相关配置 @Configuration publi ...

  10. Linux基础:Day01

    Linux操作系统的知识体系: 1.初级  2.中级  3.高级  4.*额外知识*  1.初级  1.1.OS操作系统的原理  1.2.开始了解常用的命令(系统管理的基础命令)   开机关机   时 ...