代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
实现注解拼接SQL+字段进行排序
作者:
乔一
/ 发布于
2018/4/24
/
887
package com.example.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 DataBaseTable { public String tableName(); } package com.example.annotation; @DataBaseTable(tableName = "CustomTable") public class CustomModel { @ColumnsName(fieldName = "userId",number = 1) public String mImUserId; @ColumnsName(fieldName = "UserCustomList",number = 3) public byte[] mUserCustomList; @ColumnsName(fieldName = "datatype",number = 2) public int mType; } package com.example.annotation; import java.lang.annotation.Documented; 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) @Documented public @interface ColumnsName { String fieldName() default ""; int number() default 0; } package com.example.annotation; import java.util.Comparator; public class ColumnsComparator implements Comparator<ColumnsName>{ @Override public int compare(ColumnsName c1, ColumnsName c2) { if(c1.number() > c2.number()){ return 1; } if(c1.number() <= c2.number()){ return -1; } return 0; } } package com.example.annotation; import java.lang.reflect.Field; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class AnnotationTest { /** * 运行注解,拼出sql * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Field[] fields = CustomModel.class.getFields(); DataBaseTable tableModel = (DataBaseTable) CustomModel.class .getAnnotation(DataBaseTable.class); String tableName = tableModel.tableName(); List<ColumnsName> list = new ArrayList<ColumnsName>(fields.length); String sql = "CREATE TABLE IF NOT EXISTS " + tableName + "("; for (int i = 0; i < fields.length; i++) { ColumnsName tabFeild = fields[i].getAnnotation(ColumnsName.class); list.add(tabFeild); if (tabFeild != null) { if (i == 0) { sql = sql + tabFeild.fieldName() + " " + getColumnType(fields[i].getType()); } else { sql = sql + " ," + tabFeild.fieldName() + " " + getColumnType(fields[i].getType()); } } } sql = sql + ");"; System.out.println(sql); //对反射进行排序 Collections.sort(list, new ColumnsComparator()); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i).number() + "\t" + list.get(i).fieldName() ); } } /** * 得到type * * @param type * @return */ public static String getColumnType(Type type) { String colums = "TEXT"; if (type == Long.class || (type == Long.TYPE)) { } else if (Integer.class == type || (type == Integer.TYPE)) { colums = "INTEGER"; } else if (type == String.class) { } else if (type == byte[].class) { colums = "BLOB"; } return colums; } }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
乔一
贡献的其它代码
(
29
)
.
JavaScript 获取按键,并屏蔽系统 Window 事件
.
实现注解拼接SQL+字段进行排序
.
移除全部缓存
.
微信企业号 userid转换成openid接口
.
ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名
.
查看mysql中连接的进程信息
.
MySQL 导出重复的数据
.
写HDFS
.
shell脚本实现每秒执行一次任务
.
纯CSS样式实现圆角边框
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3