- /**
- * 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