Java 自定义注解及注解读取解析--模拟框架生成SQL语句
假设们使用一张简单的表,结构如下:

定义注解:
表注解:
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语句的更多相关文章
- python读取excel表格生成sql语句 第一版
由于单位设计数据库表·,都用sql.不知道什么原因不用 powerdesign或者ermaster工具,建表很痛苦 作为程序猿当然要想办法解决,用Python写一个程序解决 需要用到 xlrd li ...
- atitit. java jsoup html table的读取解析 总结
atitit. java jsoup html table的读取解析 总结 1. 两个大的parser ,,,jsoup 跟个 htmlparser 1 2. 资料比较 1 3. jsoup越佳. ...
- Python 一键拉取Git分支源码自动解析并执行SQL语句
基于Python实现自动拉取Git分支源码自动解析并执行SQL语句 by:授客 QQ:1033553122 1.代码用途 开发过程中,研发人员会提交SQL更新脚本到Git源码库,然后测试负责去拉取这些 ...
- Java自定义数据验证注解Annotation
本文转载自:https://www.jianshu.com/p/616924cd07e6 Java注解Annotation用起来很方便,也越来越流行,由于其简单.简练且易于使用等特点,很多开发工具都提 ...
- 4、注解反射生成SQL语句
.任务说明 ①有一张用户表,字段包括:用户ID.用户名.昵称.年龄.性别.所在城市.邮箱.手机号: ②使用java注解来对用户表的每个字段或字段的组合条件进行动态生成S ...
- mybatis使用注解替代xml配置,动态生成Sql
mybatis使用注解替代xml配置时,遇到判断条件是否为null或者为空时,@Select很难搞定,不知道怎么办? mybatis3中增加了使用注解来配置Mapper的新特性,使用 SelectPr ...
- 使用mybatis的动态sql解析能力生成sql
需求: 计算平台,有很多表,打算提供一个基于sql的服务接口, sql不能完全在配置页面写死, 要能根据参数不同执行不同的语义,防止sql个数爆炸 把mybatis原码down下来, 改造一下测试用例 ...
- 读取excel数据生成sql脚本
package com.interact.util; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.b ...
- Java代码实体类生成SQL语句(Java实体类转数据库)
有的时候把数据库删了,如果照着实体类重新创建数据库的话比较麻烦,可以使用这个工具,把代码复制到项目里面设置一下即可把Java代码中的实体类转换为SQL语句输出为一个文件,打开执行命令即可. 下载:ht ...
随机推荐
- CocoaPods 安装卸载
建议升级10.15的系统,什么都装好了 sudo gem install cocoapods pod setup搞定不能有search命令,可以pod init,下载用的是cdn,打开项目正常使用 问 ...
- python中的原地操作
什么是原地操作: 例子: 列表在append添加一个元素后,没有产生新副本,再次打印的时候多了一个值,这个appned就是原地操作 由此可见,原地操作有以下特点: 没有返回值(返回值为None) 改变 ...
- 学习 MyBatis 的一点小总结 —— 底层源码初步分析
目录 MyBatis 如何获取数据库源? MyBatis 如何获取 sql 语句? MyBatis 如何执行 sql 语句? MyBatis 如何实现不同类型数据之间的转换? 在过去程序员使用 JDB ...
- Bootstrap 的基本实现
bootstrap: UI插件 YUI, ElementUI Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. 响应式布局 ...
- .net core系统跨平台部署手册
前言 .net core跨平台版本基于.net core 3.1 SDK开发,剥离原来的基于MS Office进行文档转换功能的模块,使用基于开源跨平台的LibreOffice进行文档转换的模块.以此 ...
- mpvue 踩坑之src数据绑定出错
原文链接:https://blog.csdn.net/weixin_38984353/article/details/80847288 src实现数据绑定稍不留神就不成功.假定value.src是绑定 ...
- java中查询某个类已经创建了多少个对象了
这个代码主要是使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象? 主要是在构造函数中用到了静态数据,进行显示已经构造了多少个类对 ...
- 2017蓝桥杯日期问题(C++B组)
标题:日期问题小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月31日.令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的, ...
- SQL基础系列(4)-性能优化建议
10.1 连接查询表的顺序问题 SQLSERVER的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理,在FROM子句中包 ...
- web自动化测试中的PO模式(一)
1.PO模式的思想 原理: 将页面的元素定位和元素行为封装成一个page类 类的属性:元素的定位 类的行为:元素的操作 页面对象和测试用例分离 测试用例: 调用所需要页面对象中的行为,组成测试用例 测 ...