手写-根据实体类的注解自动生成mysql执行语句

本文介绍如何使用Java注解和反射技术手写MyBatis框架,动态生成SQL语句。通过定义实体类上的注解,如@SetProperty和@SetTable,实现数据库表名和字段的映射。示例代码展示了如何读取这些注解并生成select语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过jvm中的反射,在创建实体类的对象时候,获取到实体类上的属性的注解,从而动态的拼接成需要执行的sql语句

1.@SetProperty定义属性注解,value定义实体中的属性对应数据库中的字段

@Retention(RetentionPolicy.RUNTIME)
public @interface SetProperty {
	String value();
	int length();
}

2.@SetTable定义表名注解,value 对应数据库表名

@Target(value = {ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface SetTable {
	String value();
}

3.添加有注解的实体

@SetTable(value = "it_user")
public class User {
	@SetProperty(value = "it_id", length = 10)
	private int id;

	@SetProperty(value = "it_name", length = 10)
	private String name;
	public User() {
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + "]";
	}
}

4.生成sql的执行语句

import java.lang.reflect.Field;

public class AnnotaionDemo01 {
	
	public static void main(String[] args) throws Exception {
		Class<?> userClass = Class.forName("cn.zwc.json.anno.User");
		StringBuffer sb = new StringBuffer();
		sb.append(" select ");
		
		// 获取当前的所有的属性
		Field[] declaredFields = userClass.getDeclaredFields();
		for(int i = 0; i < declaredFields.length;i++){
			Field field = declaredFields[i];
			
			// 获取到这个字段上的注解
			SetProperty proPertyAnnota = field.getDeclaredAnnotation(SetProperty.class);
			String proPertyName = proPertyAnnota.value();
			sb.append(" " + proPertyName);
			if (i < declaredFields.length - 1) {
				sb.append(" , ");
			}
		}
		
		SetTable tableAnnota = userClass.getDeclaredAnnotation(SetTable.class);
		// 表的名称
		String tableName = tableAnnota.value();
		sb.append(" from " + tableName);
		System.out.println(sb.toString());
	}
}

5.执行结果

 select  it_id ,  it_name from it_user
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值