学习网址:http://www.imooc.com/video/8861

1.引言

  

2.Java中的常见注解

  

JDK自带注解:<br>
@Override @Deprecated @Suppvisewarnings
@override 下面的方法肯定覆盖了父类的方法
@Deprecated 下面的方法表示已经过时
@SuppressWarnings("deprecation") 忽视@Deprecation的警告

3.注解的分类

  

 注解的注解就叫做元注解

4.自定义注解

  

    

    

 

5.解析注解

  

RetentionPolicy.SOURCE

RetentionPolicy.CLASS

RetentionPolicy.RUNTIME

  

6.注解实战

   

   

 

package com.myAnnotation;

@Table("user")
public class Filter { @Column("id")
private int id;
@Column("user_name")
private String userName;
@Column("nick_name")
private String nickName;
@Column("age")
private int age;
@Column("city")
private String city;
@Column("email")
private String email;
@Column("mobile")
private String mobile;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String name) {
this.userName = name;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
@Override
public String toString() {
return "Filter [id=" + id + ", name=" + userName + ", nickName=" + nickName
+ ", age=" + age + ", city=" + city + ", email=" + email
+ ", mobile=" + mobile + "]";
} }
package com.myAnnotation;

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.myAnnotation;

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.myAnnotation;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; public class Test { public static void main(String[] args) { Filter f1 = new Filter(); f1.setId(10);//查询id为10的用户 Filter f2 = new Filter(); f2.setUserName("lucy");//模糊查询用户名为lucy的用户 Filter f3 = new Filter(); //查询邮箱为其中任意一个的
f3.setEmail("liu@sina.com,zh@163.com,2222@qq.com"); String sql1 = query(f1); String sql2 = query(f2); String sql3 = query(f3); System.out.println(sql1);
System.out.println(sql2);
System.out.println(sql3);
} //查询语句 可以用于各种语句
@SuppressWarnings("unchecked")
private static String query(Filter f){ StringBuilder sb = new StringBuilder();
//1.获取到class
@SuppressWarnings("rawtypes")
Class c = f.getClass();
//2.获取到table的名字
boolean texists = c.isAnnotationPresent(Table.class); if(!texists){ return null;
} Table t = (Table)c.getAnnotation(Table.class); String tableName = t.value(); sb.append("SELECT * FROM ").append(tableName).append(" WHERE 1=1"); //3.遍历所有的字段
Field[] fArray = c.getDeclaredFields(); for(Field field:fArray){
//4.处理每个字段对应的sql
//4.1拿到字段名
boolean cexists = field.isAnnotationPresent(Column.class);
if(!cexists){
continue;
}
Column column = field.getAnnotation(Column.class);
String columnName = column.value();
//4.2拿到字段值
String fieldName = field.getName();
String getMethodName = "get"+ fieldName.substring(0,1).toUpperCase()+fieldName.substring(1); Object fieldValue = null; try { Method getMethod = c.getMethod(getMethodName); fieldValue = getMethod.invoke(f); } catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//4.3拼装sql
if(fieldValue==null||(fieldValue instanceof Integer)&&((Integer)fieldValue==0)){ continue;
} sb.append(" AND ").append(columnName); if(fieldValue instanceof String){ if(((String)fieldValue).contains(",")){ String[] values = ((String)fieldValue).split(","); sb.append(" in("); for(String value:values){ sb.append("'").append(value).append("'").append(","); }
sb.deleteCharAt(sb.length() - 1); sb.append(")"); }else{ sb.append(" = ").append("'").append(fieldValue).append("'"); } }else if(fieldValue instanceof Integer){ sb.append(" = ").append(fieldValue);
} } return sb.toString();
}
}

我的java学习之路--Java注解专题的更多相关文章

  1. Java学习之路 -- Java怎么学?

    @ 目录 java基础怎么学? 学完基础学什么? 几个常用框架学完学什么? MQ JVM的知识跑不掉 微服务等等 其他 数据结构和算法 java基础怎么学? 当时,作为懵懂的小白,大一学习了c和c++ ...

  2. 新篇章之我的java学习之路下

    昨天写下了人生的第一篇博客,今天接着写我的java学习之路有关开发及框架的学习过程. 想要学好java语言,只学习一些java的基本语法对实际开发中的用处还是不大的,所以我们还要掌握一些有关javaW ...

  3. java学习之路之javaSE基础2

    java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...

  4. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...

  5. Java学习之路(转)

    Java学习之路(书籍推荐)   一.基础类 1.<Thinking in java>(阅读2遍),入门第一位是建立正确的概念 2.<Core Java>这本书更贴近实践,更多 ...

  6. JAVA学习之路与大家分享

    这是我四年以前总结的JAVA学习之路,希望对初学者或想从事JAVA开发的人有帮助. 本人是软件工程专业出身,先后学过C.C++.JAVA.VB.delphi等等开发语言以及网络相关管理技术.哎,好久不 ...

  7. Java 学习之路 -- day00

    Java 学习之路 -- day00 Typora 快捷键操作 标题:#+空格 2. *斜体* 3. **加粗** 4. **斜体加粗*** 5. ~~删除线~~ 6. > 引用 7. ···分 ...

  8. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  9. Java学习之路:不走弯路,就是捷径

    1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...

随机推荐

  1. Python配置文件实现

    实现目标: 支持配置文件继承 支持本地配置文件 支持配置文件别名 简单的配置文件操作 最新的代码可以参考 https://github.com/blackmatrix7/matrix-toolkit/ ...

  2. 单独mybatis得使用

    今天同学说要学习mybatis后来他写了个程序让我看看,我看了一下发现包引错了,他写的是单独的mybatis,引入的却是spring-mybatis,所以会报错. 今天我记录一下单独mybatis的使 ...

  3. Centos6.4三种更改hostname的方法之间的对比

    首先,利用hostname命令查看一下当前主机的主机名,在终端输入hostname,会发现显示的是完整的主机名称(主机名.域名),其中主机名与进入终端后:登录名@主机名,显示的一致,如下图所示: 其次 ...

  4. 使用Tomcat的Reload提高开发速度(翻译)

    欢迎转载http://www.cnblogs.com/coodream2009,有翻译的不太准确的地方请大家指出,我继续修改完善. 按照Java Servlet规范第四部分推荐的,Tomcat系统的实 ...

  5. boltdb的实现

    整个代码不是很复杂,可以从代码中理解如何实现. 特点:btree,很小巧,但实现了完整事务机制,稳定,即使丢电也不会导致数据库错误. 整个结构如下: meta page (前两页) --- > ...

  6. Python 抽象篇:面向对象之高阶用法

    1.检查继承 如果想要查看一个类是否是另一个类的子类,可以使用内建的issubclass函数 如果想知道已知类的基类,可以直接使用特殊特性__bases__ 同时,使用isinstance方法检查一个 ...

  7. 为什么用CDN给你网站加速?

    大多数人都知道,一个用户在打开一个新网站的时候,如果网站打开的速度过慢,用户是很难继续浏览的.因而很多网站的运营人员想方设法的提高网站的加载速度.我们也相信速度是一个成功网站的必备要素之一,速度不够快 ...

  8. sort()没有返回值

    aList = [1,3,5,2,4] aList = aList.sort() print(aList) None

  9. Sampling

    本文主要涉及接受拒绝采样,重要性采样,蒙特卡洛方法,吉布斯采样等内容.部分内容整理与互联网.仅供交流学习使用!

  10. java保留两位小数(不四舍五入)

    import java.text.DecimalFormat; import java.math.RoundingMode; class Text{ public static void main(S ...