java 通过注解 生成sql的工具类

package test;

import com.lmq.annotation.Column;
import com.lmq.annotation.Table;

@Table("teacher")
public class Teacher {
@Column("id")	
private int id;
@Column("teacher_name")
private String teacherName;
@Column("number")
private String number;
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getTeacherName() {
	return teacherName;
}
public void setTeacherName(String teacherName) {
	this.teacherName = teacherName;
}
public String getNumber() {
	return number;
}
public void setNumber(String number) {
	this.number = number;
}

}
<pre name="code" class="java">package com.lmq.annotation;

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();
}




 


package com.lmq.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {

 String value();
}

package com.lmq.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import com.lmq.annotation.Column;
import com.lmq.annotation.Table;


public class SqlUtil {
/***
 * 返回查询sql
 * @param obj
 * @return
 */
	public static String query(Object obj) {
		Class<? extends Object> c = obj.getClass();
		StringBuffer sb = new StringBuffer();
		//通过反射获取tablename
		boolean isExitsTable = c.isAnnotationPresent(Table.class);
		if(!isExitsTable){
			return null;
		}
		Table t = (Table) c.getAnnotation(Table.class);
		String tableName = t.value();
		sb = sb.append("select * from ").append(tableName).append(" where ");

		//通过反射获取字段
		
		Field[] field = c.getDeclaredFields();
		for (Field field2 : field) {
			boolean isExitsColumn = field2.isAnnotationPresent(Column.class);
			if(!isExitsColumn){
				continue;
			}
			Column column = field2.getAnnotation(Column.class);
			//字段名
			String columnName = column.value();
			//获取字段的值
			String fieldName = field2.getName();
			fieldName = fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);
			String getMethodName = "get"+fieldName;
			Object fieldValue =null;
			try {
				Method method = c.getMethod(getMethodName);
				fieldValue = method.invoke(obj);
				
			} catch (Exception e) {
				e.printStackTrace();
			}
			//为赋值的字段不做查询条件
			if(null == fieldValue||(fieldValue instanceof Integer && (Integer)fieldValue == 0)){
				continue;
			} 
			if(fieldValue instanceof String){
				if(((String) fieldValue).contains(";")){
					sb.append(columnName).append(" in(");
					String[] stringArry = ((String) fieldValue).split(";");
					for (int i = 0; i < stringArry.length; i++) {
						sb.append("'").append(stringArry[i]).append("'").append(",");
					}
					sb.deleteCharAt(sb.length()-1);
					sb.append(")");
					sb.append(" and ");
					continue;	
				}
				sb.append(columnName).append("='").append(fieldValue).append("'").append(" and ");
				continue;
				
			}
			
			sb.append(columnName).append("=").append(fieldValue).append(" and ");
			
			
		}
		sb.delete(sb.length()-5,sb.length()-1);
		return sb.toString();
	}
	
	/**
	 * 返回建表sql
	 * @param obj
	 * @return
	 */
	public static String create(Object obj){
		Class<? extends Object> c = obj.getClass();
		StringBuffer sb = new StringBuffer();
		
		if(!c.isAnnotationPresent(Table.class)){
			return null;
		}
		Table table = c.getAnnotation(Table.class);
		String tableName = table.value();
		//表名
		sb = sb.append("create table ").append(tableName).append("( ");
		//取出字段名
		Field[] field = c.getDeclaredFields();
		for (Field field2 : field) {
			if(!field2.isAnnotationPresent(Column.class)){
				continue;
			}
			Column column = field2.getAnnotation(Column.class);
			String columnName = column.value();
			Class<?> fieldType = field2.getType();
			String typeName = fieldType.getSimpleName();
			
			
			if(columnName.equals("id")){
				sb.append(columnName).append(" int(10) PRIMARY KEY AUTO_INCREMENT,");
				continue;
			}
			if(typeName.equals("String")){
				sb.append(columnName).append(" varchar(64) NOT NULL,");
				continue;
			}
			if(typeName.equals("int") || typeName.equals("long")){
				sb.append(columnName).append(" bigint(20) NOT NULL,");
				continue;
			}
			
		}
		sb.deleteCharAt(sb.length()-1);
		sb.append(")");
		return sb.toString();
	}

}
通过自定义注解生成自动建表和查询的sql语句

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值