- /**
- * org.crazystone.annotation
- *
- * Function: TODO
- *
- * ver date author
- * ──────────────────────────────────
- * 2012-9-11 zhangzenglun
- *
- * Copyright (c) 2012, TNT All Rights Reserved.
- */
- package org.crazystone.annotation;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- /**
- *
- * @author zhangzenglun
- * @version 1.0
- * @since v1.0
- * @Date 2012-9-11 下午2:06:08
- */
- /**
- * @Retention用来声明注解的保留策略,有CLASS、RUNTIME和SOURCE这三种,分别表示注解保存在类文件、JVM运行时刻和源代码中。
- * 只有当声明为RUNTIME的时候,才能够在运行时刻通过反射API来获取到注解的信息。
- *
- * @Target用来声明注解可以被添加在哪些类型的元素上,如类型、方法和域等
- */
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.TYPE)
- public @interface Table {
- String tableName();
- }
- /**
- * TableField.java
- * org.crazystone.annotation
- *
- * Function: TODO
- *
- * ver date author
- * ──────────────────────────────────
- * 2012-9-11 zhangzenglun
- *
- * Copyright (c) 2012, TNT All Rights Reserved.
- */
- package org.crazystone.annotation;
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- /**
- * ClassName:TableField
- *
- * @author zhangzenglun
- * @version 1.0
- * @since v1.0
- * @Date 2012-9-11 下午2:14:41
- */
- @Retention(RetentionPolicy.RUNTIME)
- @Target({ElementType.FIELD,ElementType.METHOD})
- public @interface TableField {
- public String name();
- public boolean isPrimaryKey() default false;
- }
- /**
- * User.java
- * org.crazystone.annotation
- *
- * Function: TODO
- *
- * ver date author
- * ──────────────────────────────────
- * 2012-9-11 zhangzenglun
- *
- * Copyright (c) 2012, TNT All Rights Reserved.
- */
- package org.crazystone.annotation;
- /**
- * ClassName:User
- *
- * @author zhangzenglun
- * @version 1.0
- * @since v1.0
- * @Date 2012-9-11 下午2:01:06
- */
- @Table(tableName = "user")
- public class User {
- @TableField(name = "user_id", isPrimaryKey = true)
- private int userId;
- @TableField(name = "user_name")
- private String userName;
- @TableField(name = "user_age")
- private int age;
- public int getUserId() {
- return userId;
- }
- public void setUserId(int userId) {
- this.userId = userId;
- }
- public String getUserName() {
- return userName;
- }
- public void setUserName(String userName) {
- this.userName = userName;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
- /**
- * BaseOrmSupport.java
- * org.crazystone.annotation
- *
- * Function: TODO
- *
- * ver date author
- * ──────────────────────────────────
- * 2012-9-11 zhangzenglun
- *
- * Copyright (c) 2012, TNT All Rights Reserved.
- */
- package org.crazystone.annotation;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- /**
- * ClassName:BaseOrmSupport
- *
- * @author zhangzenglun
- * @version 1.0
- * @since v1.0
- * @Date 2012-9-11 下午3:27:00
- */
- public abstract class BaseOrmSupport<T> {
- public void save(T o){
- Class<? extends Object> entityClass = o.getClass();
- StringBuffer sql = new StringBuffer();
- sql.append("insert into ");
- Table a = (Table)entityClass.getAnnotation(Table.class);
- if (a!=null) {
- sql.append(a.tableName());
- } else {
- sql.append(entityClass.getName().substring(entityClass.getName().lastIndexOf(".")+1));
- }
- sql.append(" (");
- Field[] fields = entityClass.getDeclaredFields();
- String temp = "";
- StringBuffer valueSql = new StringBuffer();
- for (Field f:fields) {
- TableField tf = f.getAnnotation(TableField.class);
- //获得字段第一个字母大写
- String firstLetter = f.getName().substring(0,1).toUpperCase();
- //转换成字段的get方法
- String getMethodName = "get"+firstLetter+f.getName().substring(1);
- try {
- Method getMethod = entityClass.getMethod(getMethodName, new Class[] {});
- //这个对象字段get方法的值
- Object value = getMethod.invoke(o, new Object[] {});
- if (f.getType().getName().equals(java.lang.String.class.getName())) {
- valueSql.append(temp+"'"+value+"'");
- } else {
- valueSql.append(temp+value);
- }
- } catch (Exception e) {
- }
- if (tf != null) {
- sql.append(temp+tf.name());
- } else {
- sql.append(temp+f.getName());
- }
- temp = ",";
- }
- sql.append(")values(");
- sql.append(valueSql);
- sql.append(")");
- System.out.println(sql.toString());
- }
- }
- /**
- * User.java
- * org.crazystone.annotation
- *
- * Function: TODO
- *
- * ver date author
- * ──────────────────────────────────
- * 2012-9-11 zhangzenglun
- *
- * Copyright (c) 2012, TNT All Rights Reserved.
- */
- package org.crazystone.annotation;
- /**
- * ClassName:User
- *
- * @author zhangzenglun
- * @version 1.0
- * @since v1.0
- * @Date 2012-9-11 下午2:01:06
- */
- public class UserDAO extends BaseOrmSupport<User>{
- }
测试类
- package org.crazystone.annotation;
- import junit.framework.TestCase;
- public class AppTest
- extends TestCase
- {
- public void testApp()
- {
- User user = new User();
- user.setAge(100);
- user.setUserName("skylun");
- user.setUserId(1);
- UserDAO userDao = new UserDAO();
- userDao.save(user);
- }
- }
测试输出结果:
insert into user (user_id,user_name,user_age)values(1,'skylun',100)
原文有附件。
转自:http://lunzi.iteye.com/blog/1675871
相关推荐
这篇博文“利用java反射、注解及泛型模拟ORM实现”旨在探讨如何结合这三种技术来实现对象关系映射(ORM),这是一种将数据库表与Java对象之间进行绑定的技术,简化了数据操作。 首先,我们来理解一下这三个概念: ...
总之,通过Java反射和注解自定义ORM框架,可以实现更加灵活、定制化的数据库操作。这种方式不仅提高了开发效率,还降低了代码的耦合度,使得项目维护更加容易。在实际应用中,可以根据项目的具体需求进行适当的调整...
本项目旨在实现一个基于JDK5.0注解的小型ORM框架,模拟Hibernate的部分功能。 首先,我们要理解ORM的基本原理。ORM的核心思想是将数据库中的表映射为Java对象,将表中的记录映射为对象的实例,这样就可以通过操作...
通过这样的模拟,你不仅可以深入理解Hibernate的工作原理,还能提高对Java注解和反射机制的理解。 总之,"hibernate注解功能模拟"是一个综合性的学习项目,它涵盖了Java的高级特性以及ORM框架的核心思想。通过实践...
2. **Java注解**: 注解是一种元数据,可以为编译器或运行时环境提供有关代码的附加信息。在本项目中,注解可能被用来标记实体类及其属性,模拟Hibernate的@Entity和@Column等注解,以便自动识别哪些类和字段对应...
这不仅锻炼了开发者对Java注解和反射的理解,也提供了在没有Hibernate的情况下实现ORM(对象关系映射)的实践经验。对于希望深入理解Java底层机制以及ORM框架原理的开发者来说,这是一个非常有价值的实践项目。
- **测试工具**:JUnit等测试框架利用反射来调用私有方法或模拟对象。 6. **案例研究** - "reflection_proxy.ppt"可能是一个包含详细讲解和示例代码的PPT文件,可能涵盖如何创建和使用动态代理,以及如何通过反射...
以上只是Java源码中涉及的部分关键知识点,实际Java编程涉及的内容远不止这些,还包括注解、反射、序列化、垃圾回收、内存管理、性能优化等多个方面。深入理解并熟练掌握这些知识点,是成为一名优秀Java开发者的必备...
Apache Commons Lang是一个实用工具库,提供了对Java语言的扩展,包括字符串处理、日期和时间操作、数组工具、反射辅助类等。它简化了许多常见的编程任务,使得开发更加高效。 2. **Guava**: Google的Guava库...
- **反射与注解**:了解Java反射机制和注解的使用,能够在运行时分析类信息和动态调用方法。 ### 数据库管理 在Java软件开发中,数据库管理是一项重要的技能,特别是对于企业级应用的开发。求职者应当熟悉以下内容...
EF-ORM是一个轻量,便捷的Java ORM框架。并且具备若干企业级的应用特性,如分库分表、JTA事务等。 代码生成插件for eclipse(请在eclipse中Help/Install new software后输入地址并安装)...
Spring MVC是Java领域中最流行的实现,它提供了丰富的功能,如依赖注入、AOP(面向切面编程)、数据验证等。 3. **Spring框架**:Spring是Java企业级应用的核心框架,它提供了一个全面的基础设施,支持开发和部署...
- **扩展注解的支持:** Java 9增强了对注解的支持,包括元注解等新特性。 **1.3 实战数据结构** - **数据结构实战训练:** 数据结构是计算机科学的基础之一,这里会通过实际案例讲解数组、链表等常见数据结构的...
- **模拟面试**: 与朋友或同事进行模拟面试,提高应对面试压力的能力。 - **准备问题**: 准备一些关于职位和公司的提问,以便在面试结束时提出。 #### 八、心态调整 - **保持自信**: 相信自己的能力和经验,积极...
JDK(Java Development Kit)安装后,会附带一些基础的jar包,如rt.jar(包含Java核心API的实现)、charsets.jar(字符集支持)、jfxrt.jar(JavaFX相关)等。这些jar包构成了Java运行环境的基础,开发者无需单独...
### Java学习路线详解 #### 一、基础学习阶段 **1. Java 语言的基本语法、数据类型、运算符等基础知识** - **基本语法**: Java 的语法结构与 C 和 C++ 类似,但更加简洁易懂。 - **数据类型**: 包括基本数据类型...
Java是一种广泛使用的面向对象的编程语言,以其平台独立性、高效性和丰富的类库而闻名。在Java开发过程中,掌握一些核心的Java单词是至关重要的,这不仅有助于理解代码,还能提高编程效率。以下是对"java用到的单词...
- **AOP实现**:例如Spring AOP利用动态代理实现切面编程,增强目标类的功能。 - **性能测试**:模拟对象行为进行性能测试或调试。 - **序列化与反序列化** - **实现方式**: - **Serializable接口**:实现了此...
Ellie,作为一个开源项目,其核心理念在于提供一种编译时的ORM实现,这意味着在编译阶段就能完成数据库模型到Java对象的映射,从而避免了运行时反射带来的性能损失。这使得应用程序在运行时更加轻量级,提高了执行...
- **反射与注解**:反射是Java动态特性的体现,注解则是元数据的一种形式,二者都是Java高级编程的重要组成部分。 #### 二、数据库&JDBC编程 **1. SQL基础(重点)** - **SQL基础**:包括SQL语句的基本结构、数据...