MyBatis 注解开发

mybatis 的注解,主要是用于替换映射文件。而映射文件中无非存放着增、删、改、查的 SQL 映射标签。所以,mybatis 注解,就是要替换映射文件中的 SQL 标签。
mybatis 官方文档中指出,若要真正想发挥 mybatis 功能,还是要用映射文件。即 mybatis 官方并不建议通过注解方式来使用 mybatis 。

注解的基础知识

以下注解知识的讲解,均使用使用@Overide、@Deprecated (过时)、@SuppressWarnings举例。

  • 注解的基础语法
    A、注解后是没有分号的。
    B、注解首字母是大写的,因为注解与类、接口是同一级别的。一个注解,后台对应着
    一个 @interface 类。
    C、在同一语法单元上,同一注解只能使用一次。
    D、在注解与语法单元之间可以隔若干空行、注释等非代码内容。
  • 注解的注解


    打@Deprecated 源码,看到其定义上还有三个注解: @Documented、@Retention、@Target.这三个注解的意义是:
    @Target:用于指定该注解可以标注的语法类型。CONSTRUCTOR (构造器)、
    LOCAL VARIABLE (局部变量)、METHOD (方法)、FIELD (属性)、PACKAGE (包)、PARAMETER(参数)、TYPE (类型)。
    注意,对于 TYPE 常量,其意义有两个:一是指该注解可以用在类、接口、枚举等类上;二是指该注解可以作为其它注解的属性值。例如,后面要学到的@Result、@InterceptorRef就属性第二个意思。
    @Documented:用于指定该注解定义时的注释信息能否显示在 javaAPI 说明文档上。没有添加的话,使用 javadoc 生成 API 文档时就不会该注解的信息添加到文档。
    @RetentionPolicy:这是一个 enum 类型,共有三个值: SOURCE,CLASS 和RUNTIME。
    ① SOURCE:代表这个 Annotation 类型的信息只会保留在程序源码里,源码如果经过了编译之后,Annotation 的数据就会消失,并不会保留在编译好的 class 文件中。
    ② CIASS:代表这个 Annotation 类型的信息除了保留在程序源码里外,同时也会保留在编译好的 class 文件里。但在执行时,并不会把这一些信息加载到虚拟机(JVM)中去。这是Retention的默认值。
    ③ RUNTIME:表示在源码、编译好的 class 文件中保留信息,同时在执行时还会把这些信息加载到 JVM 中。
    ④ 举例: @Override 中的 Retention 值为 SOURCE ,编译成功了就不要这些检 查的信息。相反@Deprecated中 Retention 的值为 RUNTIME,表示除了在编译时会警告我们使用了哪个被 Deprecated 的方法,在执行的时候也可以查出该方法是否被 Deprecated 。
  • 注解的属性
    当某变量被声明了,但却未被使用;或某集合在声明或定义时未加泛型说明等情况发生时,会在代码下给出警告黄线。Ctrl+1,可在代码上添加一个注解@SuppressWarnings()。并且发现,不同的情况,其参数是不同的。
    打开其源码,看到其定义与@Deprecated是不同的,其接口体中声明了一个方法String[]value()。那么该注解在使用时必须包含一个属性 value ,类型为String[]。且该参数没有默认值,即必须给出 value 的值。



    对于注解的属性,需要注意以下几点:
    (1)数组问题
    该属性在源码定义时被声明为数组,但在具体使用时却只要赋予一个值,此时无需将该值再定义为一个数组后赋给该属性。直接将该值赋给该属性即可。例如,对于声明为字符串数组String[]的 value 属性,可以将字符串 String 直接赋给该 value。
    (2)默认值问题
    若某属性在注解定义时声明了其默认值,则在注解使用时,可以不为其指定属性值。注解会自动使用其默认值。
    (3)value 属性问题
    若注解在使用时只需使用其 value 属性,其它属性要么有默认值,要么该注解只声明了一个 value 属性,此时,在注解使用时 value 属性名称可省略,而直接在注解的括号中写出该 value 属性的值。
    (4)无属性问题
    有些注解在定义时,是没有属性的,如@Deprecated、@Overide 都是没有属性声明的, 那么在使用时只需给出注解名称即可。

MyBatis 注解
  • @Insert
    其 value 属性用于指定要执行的 insert 语句。
  • @SelectKey
    用于替换 XML 中的 <selectKey/>标签,用于返回新插入数据的 id 值。

    statement:获取新插入记录主键值的SQL语句
    keyProperty:获取的该主键值返回后初始化对象的哪个属性
    resultType:返回值类型
    before:指定主键的生成相对于insert 语句的执行先后顺序,该属性不能省略
  • @Delete
    其 value 属性用于指定要执行的 delete语句。
  • @Update
    其 value 属性用于指定要执行的 update语句。
  • @Select
    其 value 属性用于指定要执行的 select语句。
程序举例

项目:MyBatis_Annotation,在前面动态 SQL 的项目基础上进行修改即可。

  • 修改 Dao 接口
    在 Dao 接口的每个抽象方法上添加注解。


  • 删除映射文件
    由于MyBatis注解替换的是映射文件,所以这里就不需要映射文件了,将其直接删除。
  • 修改主配置文件
    由于没有了映射文件,所以主配置文件中不能使用<mapper/>注册 mapper 的位置了。需要使用<package/>标签。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353