2019独角兽企业重金招聘Python工程师标准>>>

注解字面意思好像是 注释,提示和说明的作用,但是这样对于刚接触这个概念的人,很难理解究竟注解是用来干嘛的. 比如 Spring MVC中的@Controller, Mybatis中的 @Column. 其实用大白话来说: 注解最大的作用就是替代设计框架的很多的xml文件,使用JAVA的反射机制来读取注解上的内容,方便框架的使用者. 下面我们就来一步一步的使用注解来自定义自己的Mybatis框架.

  1. 首先 注解有几个重要的元注解,也就是在使用JDK自带的元注解的基础上才能自定义自己的注解

    1.1、@Retention: 定义注解的策略,大白话就是定义注解的范围

    @Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含@Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但                 运行时无法获得,@Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在,在运行时可以通过反射   获取到

1.2 @Target:定义注解的目标,大白话就是注解是 类,接口还是方法或者参数

@Target(ElementType.TYPE)   //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR)  //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
  1. 说了理论的知识,我们自己手动来写一个Mybatis的框架注解

2.1. Table的定义

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
public @interface Table {String name() default "";}

2.2. Column的定义

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Column {boolean isKey() default false;String value() default "";}

2.3. 框架使用者定义的User列表

@Table(name = "User")
public class User {@Column(value = "id", isKey = true)private int id;@Column(value = "name")private String name;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;}}
  1. 通过反射获取注释的定义
public class Annotation {private static void parseAnnotation(Class clazz) throws IllegalArgumentException, IllegalAccessException,NoSuchMethodException, SecurityException, InvocationTargetException {Table table = (Table) clazz.getAnnotation(Table.class);System.out.println("table name: " + table.name());Field[] fields = clazz.getDeclaredFields();for (Field field : fields) {Column column = (Column) field.getAnnotation(Column.class);System.out.println("column name: " + column.value() + " isKey: " + column.isKey());String fieldName = field.getName();Class<?> type = field.getType();System.out.println("field name: " + fieldName + " type: " + type);}}public static void main(String args[]) throws IllegalArgumentException, IllegalAccessException,NoSuchMethodException, SecurityException, InvocationTargetException {User user = new User();user.setId(1112111);user.setName("test");parseAnnotation(user.getClass());}
}

转载于:https://my.oschina.net/u/917732/blog/626462

JAVA自定义Mybatis注解相关推荐

  1. java自定义校验注解

    前言 在日常的开发中可能会对手机号.邮箱.身份证号的合法性进行校验,然而每次使用if语句调用校验函数进行校验又显得过于麻烦,这时候自定义校验注解用处就很大了.此文编写一个对应0,1值的校验. 1.引入 ...

  2. java自定义接口注解,Java自定义注解原理及实现

    本章主要内容:1.了解注解原理,2,自定义注解(根据实际应用自定义注解打印每个接口的请求日志) 一, 了解注解原理 元注解 元注解的作用就是注解其他注解,一般我们使用自定义注解时,就需要用元注解来标注 ...

  3. java 自定义编译注解 进行代码检查

    步骤一:编写自定义注解 /*** author: WasonCheung* project: panda* blog: http://zjhblog.cc* date: 2021/7/10 0:59* ...

  4. java自定义权限注解

    权限注解 /*** 数据权限过滤注解** @author lqm*/ @Inherited @Documented @Target({ElementType.METHOD}) @Retention(R ...

  5. Spring MVC代码实例系列-06:Spring MVC配置Hibernate-Validator以及自定义校验注解

    超级通道 :Spring MVC代码实例系列-绪论 本章主要记录,如何在Spring MVC中添加Hibernate-Validator以及自定义校验注解.本章主要涉及的技术点有: javax.val ...

  6. Spring Boot学习笔记----mybatis注解(一)

    之前使用jpa,感觉不错.不用涉及sql便可完成对数据库的增删改查.但项目组要求使用mybatis进行开发,也就用了.两者的区别在于,后者需要进行SQL语句的注解绑定. 网上搜到的mybatis资料, ...

  7. mybatis对java自定义注解的使用——入门篇

    转自:https://www.cnblogs.com/sonofelice/p/4980161.html 1. 最近在学习spring和ibatis框架. 以前在天猫实习时做过的一个小项目用到的myb ...

  8. Java软件开发:自定义MyBatis持久层框架

    自定义MyBatis持久层框架 1 框架概述 1.1 什么是框架 1.2 框架要解决的问题 1.3 软件开发的分层的重要性 2 MyBatis框架 3 JDBC编程 3.1 JDBC程序的回顾 3.2 ...

  9. MyBatis-学习笔记04【04.自定义Mybatis框架基于注解开发】

    Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...

最新文章

  1. CPU 核数与线程数有什么关系?
  2. python脚本实例手机端-用Python实现自动化操作Android手机
  3. Python 计算程序运行时间
  4. 部署必备之Docker
  5. 函数使用了堆栈的字节超过_单片机地址空间,堆栈理解
  6. 猫眼java开发工资_Java硕士京东工作1年,跳槽后他期望薪资26K,大家感觉他可以吗...
  7. 计算机二合一二级基础知识软件,全国计算机等级考试笔试+上机题库二合一二级Visual FoxPro...
  8. C++ STL list 学习一
  9. 汇编学习笔记(1)基础知识
  10. TCP/IP模型背后的内涵(二)
  11. Mybatis mapper.xml中常用标签详解
  12. minecraft编程java_Minecraft编程基础课程(一)
  13. 论文解读:MOEA/D-TPN
  14. 使用metasploit制作钓鱼网站——browser autopwn攻击
  15. Q1财报之后,美团继续看未来
  16. Sign function
  17. 基础课程11:调试工具
  18. 更高的抵押贷款利率对美国房地产市场意味着什么?
  19. KINOVA公司JACO2、MICO2从安装到开发
  20. 【综述 寿命预测】基于机器学习的设备剩余寿命预测方法综述

热门文章

  1. 可以看游资的app_大大游资软件下载
  2. python 修改pdf内容,如何使用python更改pdf内的超链接?
  3. 关于Adodb.Stream 的使用说明
  4. ORACLE RAC心跳网络
  5. 如何在应用系统中实现数据权限的控制功能
  6. 小米运维—互联网企业级监控系统实践
  7. 【加法笔记系列】逻辑门、半加器、全加器、波纹进位加法器
  8. 从零开始学做微信小程序,看这些就够了!
  9. HBase之四--(1):Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询...
  10. 【转】const_cast