java 利用注释和反射写一个简单的SQL语句拼接程序,很简单初学者

看尚学堂高琪老师的视频看到了注解 加反射这个 东西,之前 对注解和反射并不是很了解,通过老师的视频对注解和反射有了 大致的了解 。

js、python、ruby等都是动态脚本语言,是在编译的时候动态编译的,非常有代表性的代码 可以用js的一段代码简单的表示:

        <script typr="text/javascript">

var a=4;b=5;

alert(" a =alert(a+b)")

</script>

虽然java没有 上述的那种特性,但是java的反射机制使java也具有了半动态性。

具体利用注解 和反射简单拼接SQL语句的代码 入下 :

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 {
	public String value() default "";
}

//用于确定用来 查找的数据表的字段名
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() default "";
}

//自定义实体类
import javaAnnoation.Column;
import javaAnnoation.Table;
/**
 * 根据这个实体来动态拼接SQL语句
 * 学到的快捷键 ctrl+shift+O直接导入所有需要导入的包
 * 右键+source+sets and gets直接创建 set get方法
 * @author wky
 *
 */

@Table("username")
public class sqlSet {
	@Column("id")
	private int id;
	@Column("username")
	private String name;
	@Column("password")
	private String pwd;
	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;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public sqlSet() {
		super();
	}

}

//测试类
import java.lang.reflect.Field;

import javaAnnoation.Column;
import javaAnnoation.Table;
import linkSqlEntity.sqlSet;

public class linkSql {
	public static void main(String[] args) {
		sqlSet sSet=new sqlSet();
		sSet.setId(000001);
		sSet.setName("wky");
		sSet.setPwd("123");
		String sql=query(sSet);
		System.out.println("======="+sql+"========");
	}
	@SuppressWarnings("all")
	/**
	 * 主要作用是为了进行字符串的拼接
	 * @param sSet 自定义的实体类参数
	 * @return String 返回拼接好的 字符串
	 */
	public static String query(sqlSet sSet){
		String sql="select * from ";
		try {
			Class clazz=Class.forName("linkSqlEntity.sqlSet");
			Table tName=(Table)clazz.getAnnotation(Table.class);
			if(tName!=null){
				sql+=tName.value()+" ";
				Field fieldId=clazz.getDeclaredField("id");
				Field fieldName=clazz.getDeclaredField("name");
				Field fieldPwd=clazz.getDeclaredField("pwd");
				if(fieldId!=null || fieldName!=null|| fieldPwd!=null){
					String id=fieldId.getAnnotation(Column.class).value();
					String name=fieldName.getAnnotation(Column.class).value();
					String pwd=fieldPwd.getAnnotation(Column.class).value();
					int idValue=sSet.getId();
					String nameValue=sSet.getName();
					String pwdValue=sSet.getPwd();
					sql+="where "+id+"='"+idValue+"'"+" and "+name+"='"+nameValue+"'"+" and "+pwd+"='"+pwdValue+"'";
				}else{
					System.out.println("不能进行拼接,没有有效参数!!!");
				}
			}else{
				sql+="";
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally{
			return sql;
		}
	}
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值