当前位置: 首页 > wzjs >正文

企业还做网站吗房产网签怎么查询

企业还做网站吗,房产网签怎么查询,万网创始人与慧聪网,造价师资格证编写程序扫描一个包下所有的类,凡是被 Table 注解标注的类都要生成一条建表语句,表名在 Table 注解中指定。被Table 标注的类中的属性被 Column 注解标注,在 Column注解中描述字段的名称和字段的数据类型。 // 包路径声明:Vip类位…

编写程序扫描一个包下所有的类,凡是被 @Table 注解标注的类都要生成一条建表语句,表名在 @Table 注解中指定。被@Table 标注的类中的属性被 @Column 注解标注,在 @Column注解中描述字段的名称和字段的数据类型。

// 包路径声明:Vip类位于a.b子包下,用于测试反射和注解处理
package com.xie.javase.reflect.test.a.b;// 导入自定义注解
import com.xie.javase.reflect.test.anotation.Column;
import com.xie.javase.reflect.test.anotation.Table;@Table("t_vip") // 类级别的Table注解,指定对应数据库表名
public class Vip {@Column(name="id")    // 字段注解,指定数据库列名(使用默认varchar类型)private String id;@Column(name="name")  // 字段注解,指定数据库列名private String name;@Column(name="grade")  // 字段注解,指定数据库列名private String grade;
}// Customer类位于c子包下,用于对比测试(没有使用任何注解)
package com.xie.javase.reflect.test.c;public class Customer {private String cid;    // 没有注解的字段private String name;private int age;private String address;
}// 主测试类位于根包下
package com.xie.javase.reflect.test;// 导入各种依赖
import com.xie.javase.reflect.test.anotation.Column;
import com.xie.javase.reflect.test.anotation.Table;
import java.io.File;
import java.lang.reflect.Field;
import java.net.URL;public class test {// 类路径根目录(编译后的class文件存放位置)private static String classpathRoot;// 用于拼接SQL语句的StringBuilderprivate static StringBuilder sb = new StringBuilder();public static void main(String[] args) {// 获取当前线程的类加载器,并获取类路径根目录classpathRoot = Thread.currentThread().getContextClassLoader().getResource(".").getPath();// 创建文件对象指向类路径根目录File file = new File(classpathRoot);// 开始递归处理目录/文件generateCreateStatement(file);// 输出最终生成的SQL语句System.out.println(sb);}/*** 递归生成建表SQL语句的核心方法* @param file 当前处理的文件/目录对象*/private static void generateCreateStatement(File file) {// 如果是文件(非目录)if (file.isFile()) {String classFileAbsolutePath = file.getAbsolutePath();// 检查是否是.class文件if (classFileAbsolutePath.endsWith(".class")) {/* 转换文件路径为完整类名:1. 截取从类路径根目录开始的部分(注意-1处理Windows路径问题)2. 移除.class后缀3. 将文件分隔符转换为包分隔符 */String className = classFileAbsolutePath.substring(classpathRoot.length() - 1, classFileAbsolutePath.length() - ".class".length()).replace("\\", ".");try {// 通过反射加载类Class<?> clazz = Class.forName(className);// 检查类是否包含Table注解if (clazz.isAnnotationPresent(Table.class)) {// 获取Table注解实例Table tableAnnotation = clazz.getAnnotation(Table.class);// 获取注解中定义的表名String tableName = tableAnnotation.value();// 开始拼接建表语句sb.append("create table ");sb.append(tableName);sb.append(" (");// 获取类的所有声明字段(包括私有字段)Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {// 检查字段是否包含Column注解if (field.isAnnotationPresent(Column.class)) {Column columnAnnotation = field.getAnnotation(Column.class);// 获取列名和类型(默认varchar)String columnName = columnAnnotation.name();String columnType = columnAnnotation.type();// 拼接列定义sb.append(columnName).append(" ").append(columnType).append(",");}}// 移除最后一个逗号并闭合语句sb.deleteCharAt(sb.length()-1);sb.append(");\n");}} catch (ClassNotFoundException e) {e.printStackTrace();}}return; // 文件处理完成返回}// 如果是目录,递归处理子文件File[] files = file.listFiles();for (File f : files) {generateCreateStatement(f);}}
}// Table注解定义(包路径:com.xie.javase.reflect.test.anotation)
package com.xie.javase.reflect.test.anotation;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 Table {String value(); // 必填属性,用于指定表名
}// Column注解定义
package com.xie.javase.reflect.test.anotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) // 限定注解只能用于字段
public @interface Column {String name();         // 必填属性:列名String type() default "varchar"; // 可选属性,默认varchar类型
}// User类位于a子包下,用于测试不同类型字段
package com.xie.javase.reflect.test.a;import com.xie.javase.reflect.test.anotation.Column;
import com.xie.javase.reflect.test.anotation.Table;@Table("t_user") // 指定对应数据库表名
public class User {@Column(name="uid")  // 指定列名(使用默认varchar类型)private String userid;@Column(name="uname")private String username;@Column(name="pwd")private String password;@Column(name="age", type="int") // 显式指定int类型private int age;private String email; // 没有注解的字段不会被处理
}

关键点说明:

  1. 代码结构:
  • 使用自定义注解@Table和@Column标记需要处理的类和字段
  • 主程序通过递归扫描class文件+反射机制解析注解
  • 自动生成建表SQL语句
  1. 路径处理细节:
  • 使用classpathRoot.length() - 1处理Windows系统路径问题
  • 路径转换时使用replace("\\", ".")确保包名正确性
  1. 反射处理:
  • 使用Class.forName()动态加载类
  • 通过isAnnotationPresent判断注解存在性
  • getAnnotation获取注解实例读取配置值
  1. SQL生成:
  • 使用StringBuilder高效拼接字符串
  • 处理最后一个逗号的删除逻辑
  • 支持字段类型指定(默认varchar)
  1. 扩展性:
  • 通过添加新注解属性可以轻松扩展功能(如字段长度约束)
  • 递归文件处理机制自动扫描整个类路径

这个实现展示了注解处理器+反射机制的典型应用,可以自动将Java实体类转换为数据库建表语句,非常适合作为ORM框架的基础组件。


文章转载自:

http://9RGmoHV8.xgdyz.cn
http://ilSPq28Q.xgdyz.cn
http://uQS0EXpK.xgdyz.cn
http://OJSHI6IG.xgdyz.cn
http://WPZvcimL.xgdyz.cn
http://qiocEe8y.xgdyz.cn
http://lr56Xanq.xgdyz.cn
http://uoD4y4t2.xgdyz.cn
http://ZNGpvJMQ.xgdyz.cn
http://d6fd1w7q.xgdyz.cn
http://EMltUD0k.xgdyz.cn
http://u6xD2jIn.xgdyz.cn
http://Rx3FVHWZ.xgdyz.cn
http://bXB1kmQf.xgdyz.cn
http://UdkL3e6n.xgdyz.cn
http://rfRGYl6o.xgdyz.cn
http://w9tSggS7.xgdyz.cn
http://HVOzzAnt.xgdyz.cn
http://T9LhVimK.xgdyz.cn
http://aDQSLOJv.xgdyz.cn
http://YI3pGani.xgdyz.cn
http://5aEZSr7E.xgdyz.cn
http://zykM0UIA.xgdyz.cn
http://l9pbtFjr.xgdyz.cn
http://uNpgDM5k.xgdyz.cn
http://8euxV2pu.xgdyz.cn
http://62XY74oY.xgdyz.cn
http://Wnruh8V2.xgdyz.cn
http://S2nPbDOE.xgdyz.cn
http://Upp1tBj7.xgdyz.cn
http://www.dtcms.com/wzjs/714959.html

相关文章:

  • 青岛优化网站多少钱电商建站
  • 怎么做网站注册推广模板网站自助建站
  • 有什么好的网站做旅行计划施工企业招标领导小组组长的职责
  • 网站后台教程福建省城乡建设官方网站
  • 免费下载ppt模板网站哪个好做网站怎么安装数据库
  • 自营店网站建设移动互联网应用程序个人信息保护管理暂行规定
  • 网站建设服务商有哪些上海做网站推荐
  • 郑州公共住宅建设投资有限公司网站如何建设网站视频
  • 吴江网站建设收费广告软文营销平台
  • 恩做网站动态页面好南昌网站建设方案服务
  • 七牛直播网站怎么做宁波本地模板网站建设平台
  • 公司网站如何注册宜兴做网站的公司
  • 显示网站目录wordpress开发sns
  • 不备案的网站能打开吗wordpress情侣
  • 惠州电商网站建设中国制造网外贸网网站
  • 杭州 网站开发公司门户网站建设工作方案
  • 怎样用云服务器做网站super cache wordpress
  • 音乐网站的色彩搭配仿百度 wordpress
  • 企业网站后台管理模板wordpress登录返回
  • wordpress漫画站简约网站欣赏
  • 网站建设能引流网站建设
  • 福州网站建设发布网站运营建设方案
  • 专业网站开发公司nike建设网站的目的
  • 网站模板 首饰预定网站后台栏目根据什么做的
  • 一个最简单的产品展示的asp网站应该如何做教育咨询
  • 企业网站找谁做优化关键词软件
  • 一个网站的二级目录在另一台服务器上_怎么做17做网店广州货源网
  • 大庆油田建设集团网站零代码自助建站平台
  • 上海网站建设__永灿品牌建站国外购买域名网站
  • 如何购买虚拟主机做网站网站建设 指标