一、Java的注解
1、Java 注解(Annotation),提供一种为程序类型设置数据的方法;
2、Java 语言中的类、方法、变量、参数等都可以加注解;
3、注解是以@开始的,比如:@Override;
二、来看几个Java注解的例子
public class HelloWorld {
//Override重写父类方法的注解
@Override
public String toString() {
return super.toString();
}
//表示此函数放弃维护,不建议调用者使用的注解
@Deprecated
public void myFunc(){
}
@SuppressWarnings("rawtypes")//忽略没有使用泛型的警告
public static void main(String[] args) {
List list = new ArrayList();
}
}
三、Java自定义注解的语法
[@Retention(RetentionPolicy.RUNTIME)] //Retention和 Policy类型参考上方图片
[@Target(ElementType.FIELD)] //Target 和 ElementType参考上方图片
<modify> @interface <name> {
[<type> <func-name>();] //函数
}
四、根据注解自动生成SQL的例子
一般我们会用Java的Bean(类)来对应数据库表和其中的字段。如果能让Bean通过注解表名、让属性注解表对应的列名,就可以很方便的把SQL通过Java的反射机制生成出来。
注解:MyTable.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyTable {
String name();//表名
}
注解:MyColumn.java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface MyColumn {
String name();//表中的列名(或字段名)
int value() default 0;
}
所有Bean的父类:LongBean.java
public class LongBean {
@MyColumn(name="id")
public Long id;
}
数据库表对应的bean:Student.java
/**
* User: 祁大聪
*/
@MyTable(name="t_student")
public class Student extends LongBean{
@MyColumn(name="school")
public String school;
@MyColumn(name="address")
public String address;
@MyColumn(name="height")
public int height;
}
测试类:JDBCTest.java
/**
* User: 祁大聪
* SQL
* INSERT INTO t_user('name','user_name','password','id')
* VALUES ('三妮','sanNi','root123','100')
*/
public class JDBCTest {
public void insert(LongBean bean) throws Exception{
//这是表的名称的注解
MyTable mt = bean.getClass().getAnnotation(MyTable.class);
String tableName = mt.name();
//这是所有的属性
Field[] fields = bean.getClass().getFields();
String[] columns = new String[fields.length];
String[] values = new String[fields.length];
for(int i = 0 ; i < fields.length; i++){
MyColumn mc = fields[i].getAnnotation(MyColumn.class);//属性的注解(字段)名
columns[i] = "'" + mc.name() + "'";
values[i] = "'" + fields[i].get(bean).toString() + "'";//属性的值
}
//生成SQL
StringBuilder sb = new StringBuilder("INSERT INTO " + tableName);
sb.append("("
+ String.join(",",columns)
+ ") VALUES ("
+ String.join(",",values)
+ ")"
);
System.out.println(sb);
//调用SQL
}
public static void main(String[] args) {
Student student = new Student();
student.id = 100L;
student.school = "xx大学";
student.address = "北京";
student.height = 170;
//插入到数据库中
JDBCTest jdbc = new JDBCTest();
try { // ctrl + alt + t
jdbc.insert(student);
} catch (Exception e) {
e.printStackTrace();
}
}
}