本文主要介绍如何使用Java运行时级别的注解配合反射来搭建框架,以下是构建sql表的简单例子,阐明了搭建运行时框架的方法
1.定义两个运行时注解,分别作用于类和字段表示表名和列名
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
String name();
}
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
String name();
}
2.定义存储列的模型NameAndType
public class NameAndType {
private String name;
private String type;
public NameAndType()
{
}
public NameAndType(String type, String name)
{
this.type = type;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
3.定义javabea 和数据库之间的关系映射
@Table(name="BeanTable")
public class Bean {
@Column(name="field") //注解@Colomn 具体实现接下来会讲
int field;
@Column(name="description")
String description;
}
4.通过反射定义工具类,定义动态获取表名,获取列相关信息和组装SQL
public class Utils {
private static String getTableName(Class<?> clazz)
{
String name = null;
if(clazz.isAnnotationPresent(Table.class))
{
Table table = clazz.getAnnotation(Table.class);
name = table.name();
}
return name;
}
private static List<NameAndType> getColumns(Class<?> clazz)
{
List<NameAndType> list = new ArrayList<>();
Field[] fields = clazz.getDeclaredFields();
if(fields != null)
{
for(Field field : fields)
{
if(field.isAnnotationPresent(Column.class))
{
Column column = field.getAnnotation(Column.class);
String name = column.name();
String type = null;
if(int.class.isAssignableFrom(field.getType()))
{
type = "integer";
}
else if(String.class.isAssignableFrom(field.getType()))
{
type = "text";
}
else
{
throw new RuntimeException("unsupport type :" + field.getType().getSimpleName());
}
list.add(new NameAndType(type, name));
}
}
}
return list;
}
public static String createTable(Class<?> bean) {
String tableName = getTableName(bean);
List<NameAndType> columns = getColumns(bean);
if (tableName != null && !tableName.equals("") && !columns.isEmpty()) {
StringBuilder createTableSql = new StringBuilder("create table ");
//加表名
createTableSql.append(tableName);
createTableSql.append("(");
//加表中字段
for (int i = 0; i < columns.size(); i++) {
NameAndType column = columns.get(i);
createTableSql.append(column.getName());
createTableSql.append(" ");
createTableSql.append(column.getType());
// 追加下一个字段定义前需要添加逗号
if (i != columns.size() - 1) {
createTableSql.append(",");
}
}
createTableSql.append(")");
return createTableSql.toString();
}
return null;
}
}
public class Test {
public static void main(String[] args)
{
System.out.println(Utils.createTable(Bean.class));
}
}
---运行结果如下:
create table BeanTable(field integer,description text)
分享到:
相关推荐
springboot+拦截器+aop+自定义注解+本地线程实现统一接口日志记录,记录下接口所在模块、接口描述、接口请求参数、接口返回参数、接口请求时间以及接口耗时用于接口优化,接口记录参数以及操作人防止使用人员误操作...
自定义注解的定义通常包含元注解,如`@Retention`(指定注解的生命周期)、`@Target`(指定可以使用的元素类型)和`@Documented`等。 3. **处理自定义注解** 注解本身不执行任何操作,它们必须被解析才能起作用。...
1. **定义注解**:创建自定义注解,例如`@MyAnnotation`。这可以通过使用`@interface`关键字实现,并在其中定义参数,这些参数在使用注解时可以被赋值。 ```java @Retention(RetentionPolicy.CLASS) @Target...
3. 如果验证成功,可以使用Spring Security或自定义Session管理实现用户登录状态的维护。 4. 登录成功后,跳转到主页或其他受保护的页面。 在实践中,还需要处理可能出现的异常,优化用户体验,如添加验证码、错误...
综上所述,搭建一个Netty+Spring的游戏框架需要理解两个框架的核心原理,并将其特性融合到游戏服务的各个层面。通过这样的框架,可以构建出稳定、高效的网络游戏服务器。如果你对这个主题感兴趣,可以参考给定的博文...
【Mybatis自定义框架及使用】知识详解 Mybatis 是一款优秀的 Java 持久层框架,它专注于 SQL 查询,提供了动态 SQL 支持,使得开发者可以更方便地编写 SQL 代码。本篇将深入探讨 Mybatis 的核心概念、使用方法以及...
在Action类中,可以使用Struts2的注解简化配置,例如`@Action`用于指定URL映射,`@Result`定义结果页面。如果使用`struts2-convention-plugin`,那么Action的命名和方法的命名规则会自动映射到URL,大大减少了XML...
以上就是在IDEA下使用Maven搭建SSM框架项目,实现登录拦截和注解式事务管理的基本流程。这个过程中,我们不仅需要熟悉各个框架的使用,还要掌握Spring的配置、MyBatis的映射机制以及Maven项目的构建方式。希望这篇...
SSH框架整合是一个常见的Java Web开发任务,涉及...这样的整合使得开发者可以快速搭建应用,并通过注解实现灵活的配置,降低了代码的复杂度,提高了开发效率。理解并掌握这些知识点对于Java Web开发人员来说至关重要。
5. 使用Shiro注解:在Controller的方法上使用Shiro的@RequiresAuthentication、@RequiresRoles和@RequiresPermissions等注解,实现权限控制。 6. 自定义拦截器:如果需要更复杂的权限控制,可以创建自定义的Shiro...
标题中的"SSH搭建的框架"指的是在IT行业中常用的Spring、Struts和Hibernate三大框架的集成,这是一套常用于Java Web开发的技术栈。SSH框架的整合提供了强大的后端开发能力,能够有效地处理业务逻辑、数据持久化以及...
本教程将详细介绍如何搭建Struts框架,并演示其基本使用,包括所需的库、输入验证、FreeMarker模板引擎的使用以及国际化资源文件的配置。 首先,搭建Struts框架的核心在于正确配置项目的类路径。你需要以下7个必备...
- 如果项目中使用了Spring框架,可以将MyBatis与Spring整合,通过`@Autowired`注解实现DAO的自动注入。 - 在Spring配置文件中,配置SqlSessionFactoryBean以及MapperScannerConfigurer,扫描Mapper接口。 8. **...
- 在需要切换数据源的方法上使用自定义注解。 7. **监控与调试** Druid提供了强大的监控界面,可以实时查看数据源的状态、SQL执行情况等,这对于理解和优化数据库性能非常有帮助。 8. **注意事项** - 确保不同...
本文将详细介绍如何使用SpringBoot集成Shiro,结合Redis进行权限管理,并利用MyBatis作为持久层框架进行数据操作。 **一、Shiro框架基础** Shiro提供了身份验证(Authentication)、授权(Authorization)、加密...
在IT行业中,REST...这个教程文档"使用Jersey框架搭建Rest服务.doc"应该会提供更详细步骤和示例,包括如何测试和部署你的REST服务。建议仔细阅读,以深入理解每个步骤和最佳实践,确保你的REST服务按照预期工作。
下面将详细解释如何使用这两个框架搭建一个高效的MVC应用。 1. **Spring MVC框架**: - **概念**:Spring MVC是Spring框架的一部分,用于构建Web应用程序。它通过解耦业务逻辑、用户界面和数据访问,提高了开发...
在这个简单的SSH框架搭建中,Hibernate被集成到Spring框架内,形成了一个更高效的解决方案。 首先,我们需要理解Spring框架的核心概念。Spring通过IoC(Inversion of Control,控制反转)和DI(Dependency ...
下面我们将详细讲解如何在IntelliJ IDEA(IDEA)中结合Maven来搭建SSM框架,并进行简单的应用。 首先,我们需要了解这三个框架的基本概念: 1. Spring:这是一个轻量级的Java企业级应用框架,核心功能包括依赖注入...