JAVA自定义Mybatis注解
2019独角兽企业重金招聘Python工程师标准>>>
注解字面意思好像是 注释,提示和说明的作用,但是这样对于刚接触这个概念的人,很难理解究竟注解是用来干嘛的. 比如 Spring MVC中的@Controller, Mybatis中的 @Column. 其实用大白话来说: 注解最大的作用就是替代设计框架的很多的xml文件,使用JAVA的反射机制来读取注解上的内容,方便框架的使用者. 下面我们就来一步一步的使用注解来自定义自己的Mybatis框架.
首先 注解有几个重要的元注解,也就是在使用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) ///包
- 说了理论的知识,我们自己手动来写一个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;}}
- 通过反射获取注释的定义
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注解相关推荐
- java自定义校验注解
前言 在日常的开发中可能会对手机号.邮箱.身份证号的合法性进行校验,然而每次使用if语句调用校验函数进行校验又显得过于麻烦,这时候自定义校验注解用处就很大了.此文编写一个对应0,1值的校验. 1.引入 ...
- java自定义接口注解,Java自定义注解原理及实现
本章主要内容:1.了解注解原理,2,自定义注解(根据实际应用自定义注解打印每个接口的请求日志) 一, 了解注解原理 元注解 元注解的作用就是注解其他注解,一般我们使用自定义注解时,就需要用元注解来标注 ...
- java 自定义编译注解 进行代码检查
步骤一:编写自定义注解 /*** author: WasonCheung* project: panda* blog: http://zjhblog.cc* date: 2021/7/10 0:59* ...
- java自定义权限注解
权限注解 /*** 数据权限过滤注解** @author lqm*/ @Inherited @Documented @Target({ElementType.METHOD}) @Retention(R ...
- Spring MVC代码实例系列-06:Spring MVC配置Hibernate-Validator以及自定义校验注解
超级通道 :Spring MVC代码实例系列-绪论 本章主要记录,如何在Spring MVC中添加Hibernate-Validator以及自定义校验注解.本章主要涉及的技术点有: javax.val ...
- Spring Boot学习笔记----mybatis注解(一)
之前使用jpa,感觉不错.不用涉及sql便可完成对数据库的增删改查.但项目组要求使用mybatis进行开发,也就用了.两者的区别在于,后者需要进行SQL语句的注解绑定. 网上搜到的mybatis资料, ...
- mybatis对java自定义注解的使用——入门篇
转自:https://www.cnblogs.com/sonofelice/p/4980161.html 1. 最近在学习spring和ibatis框架. 以前在天猫实习时做过的一个小项目用到的myb ...
- Java软件开发:自定义MyBatis持久层框架
自定义MyBatis持久层框架 1 框架概述 1.1 什么是框架 1.2 框架要解决的问题 1.3 软件开发的分层的重要性 2 MyBatis框架 3 JDBC编程 3.1 JDBC程序的回顾 3.2 ...
- MyBatis-学习笔记04【04.自定义Mybatis框架基于注解开发】
Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...
最新文章
- CPU 核数与线程数有什么关系?
- python脚本实例手机端-用Python实现自动化操作Android手机
- Python 计算程序运行时间
- 部署必备之Docker
- 函数使用了堆栈的字节超过_单片机地址空间,堆栈理解
- 猫眼java开发工资_Java硕士京东工作1年,跳槽后他期望薪资26K,大家感觉他可以吗...
- 计算机二合一二级基础知识软件,全国计算机等级考试笔试+上机题库二合一二级Visual FoxPro...
- C++ STL list 学习一
- 汇编学习笔记(1)基础知识
- TCP/IP模型背后的内涵(二)
- Mybatis mapper.xml中常用标签详解
- minecraft编程java_Minecraft编程基础课程(一)
- 论文解读:MOEA/D-TPN
- 使用metasploit制作钓鱼网站——browser autopwn攻击
- Q1财报之后,美团继续看未来
- Sign function
- 基础课程11:调试工具
- 更高的抵押贷款利率对美国房地产市场意味着什么?
- KINOVA公司JACO2、MICO2从安装到开发
- 【综述 寿命预测】基于机器学习的设备剩余寿命预测方法综述
热门文章
- 可以看游资的app_大大游资软件下载
- python 修改pdf内容,如何使用python更改pdf内的超链接?
- 关于Adodb.Stream 的使用说明
- ORACLE RAC心跳网络
- 如何在应用系统中实现数据权限的控制功能
- 小米运维—互联网企业级监控系统实践
- 【加法笔记系列】逻辑门、半加器、全加器、波纹进位加法器
- 从零开始学做微信小程序,看这些就够了!
- HBase之四--(1):Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询...
- 【转】const_cast