/**
* 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)
分享到:
相关推荐
- **技术细节**: 对于项目中使用的关键技术点,能够深入讲解其实现原理及遇到的问题和解决方案。 #### 六、沟通能力与团队合作 - **表达能力**: 清晰、有条理地表达自己的想法,能够用简单的语言解释复杂的技术...
这些工具能够帮助开发者处理更复杂的字节码操作,特别是在处理Java 5引入的泛型和注解时。 4. **CGlib Nodep(cglib-nodep-2.1_3.jar)**:CGlib是一个基于ASM的代码生成库,主要用于扩展Java类和实现AOP(面向切面...
Java是一种广泛使用的面向对象的编程语言,以其平台独立性、高效性和丰富的类库而闻名。在Java开发过程中,掌握一些核心的Java单词是至关重要的,这不仅有助于理解代码,还能提高编程效率。以下是对"java用到的单词...
### Java学习路线详解 #### 一、基础学习阶段 **1. Java 语言的基本语法、数据类型、运算符等基础知识** - **基本语法**: Java 的语法结构与 C 和 C++ 类似,但更加简洁易懂。 - **数据类型**: 包括基本数据类型...
- **List, Set, Queue**:各自的特点及常用实现类,如ArrayList, LinkedList, HashSet, TreeSet, ArrayDeque等。 - **Map接口**:HashMap, TreeMap, LinkedHashMap的区别与使用。 - **泛型**:类型安全的容器,...
7. `org.springframework.core-3.0.0.RELEASE`:Spring 3.0的核心工具包,包含各种通用的工具类和API,用于处理反射、泛型、集合操作等。 8. `org.springframework.expression-3.0.0.RELEASE`:Spring表达式语言...
5. **反射与注解** - 反射:了解如何在运行时动态获取类的信息,创建和调用对象,以及修改私有属性和方法。 - 注解:理解注解的声明、使用和处理,以及自定义注解的元注解。 6. **设计模式** - 常见设计模式:...
1. **Java核心技术**:Java SE(标准版)是基础,包括面向对象编程概念、类与对象、封装、继承、多态、接口、异常处理、集合框架(List、Set、Map)、IO流、线程、反射、注解等。 2. **Java 8及以后版本的新特性**...
{13.3}连接Oracle数据库及操作}{192}{section.13.3} {13.4}批处理模式}{195}{section.13.4} {13.5}分页查询}{196}{section.13.5} {13.5.1}MySQL}{198}{subsection.13.5.1} {13.6}连接池}{199}{section.13.6} {...