JAVA注解的实际应用--生成sql语句

本文介绍了一个简单的Java程序,用于根据UserBean对象的属性生成SQL查询语句。通过反射机制读取对象上的注解来确定数据库表名及字段,进而拼接成SQL查询语句。

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

what:
该程序实现了sql查询语句的生成(数据的持久化层)

1)UaerBean(存储的数据)

@Table("user")
public class UserBean {

    @Column("name")
    private String name;

    @Column("age")
    private int age;

    @Column("email")
    private String email;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }


}

2)produce_sql类实现查询,生成sql语句

public class produce_sql {

    public static void main(String[] args)
    {
        UserBean user1 = new UserBean();
        user1.setName("tom"); //查询name==tom

        UserBean user2 = new UserBean();
        user2.setAge(20); //查询age==20

        UserBean user3 = new UserBean();
        user3.setEmail("tom@126.com"); //查询email=="tom@126.com"

        UserBean user4 = new UserBean(); //查询全部


        String sql1 = query(user1);
        String sql2 = query(user2);
        String sql3 = query(user3);
        String sql4 = query(user4);

        System.out.println(sql1);
        System.out.println(sql2);
        System.out.println(sql3);
        System.out.println(sql4);
    }
    public static String query(UserBean user)
    {
        String src = "";
        //注解的解析1.使用类加载器加载类
        Class c = user.getClass();
        //2找到注解
        boolean isExist = c.isAnnotationPresent(Table.class);
        if(!isExist)
        {
            return null;
        }
        //3拿到注解实例
        Table table = (Table)c.getAnnotation(Table.class);
        String tableName = table.value();
        src += "select * from " + tableName + " where 1=1";
        Field[] fields = c.getDeclaredFields();
        for (Field field : fields) {

            boolean isFExist = field.isAnnotationPresent(Column.class);
            if(!isFExist)
            {
                continue;
            }
            Column column = field.getAnnotation(Column.class);
            String columnName = column.value();

            String fieldName  = field.getName();
            String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
            Object fieldValue = "";
            try {
                Method method = c.getMethod(getMethodName);  //通过get方法获取字段的值,此处需要使用反射,因为注解在运行时加载
                fieldValue = method.invoke(user);
            } catch (Exception e) {
                e.printStackTrace();
            }
            if(fieldValue == null || fieldValue instanceof Integer && (Integer)fieldValue == 0)
            {
                continue;
            }
            if(fieldValue instanceof String)
            {
                src += " and " + columnName + "= \'" + fieldValue + "\'";
            }
            else{

                src += " and " + columnName + "=" +fieldValue;
            }
        }

        return src;
    }


}

3)运行结果
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值