mybatis 的注解,主要是用于替换映射文件。而映射文件中无非存放着增、删、改、查 的 SQL 映射标签。所以,mybatis 注解,就是要替换映射文件中的 SQL 标签。

mybatis 官方文档中指出,若要真正想发挥 mybatis 功能,还是要用映射文件。即 mybatis官方并不建议通过注解方式来使用 mybatis。

  注解的基础知识:

    注解的基础语法

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 文件中。

   ClASS:代表这个 Annotation 类型的信息除了保留在程序源码里外,同时也会保留在编 译好的.class 文件里。但在执行时,并不会把这一些信息加载到虚拟机(JVM)中去。这是 Retention 的默认值。

   RUNTIME:表示在源码、编译好的.class  文件中保留信息,同时在执行时还会把这些信 息加载到 JVM 中。

  举例:@Override 中的 Retention 值为 SOURCE,编译成功了就不要这一些检查的信息。 相反@Deprecated 中 Retention 的值为 RUNTIME,表示除了在编译时会警告我们使用了 哪个被 Deprecated 的方法,在执行的时候也可以查出该方法是否被 Deprecated。

  

  MyBatis注解:

  @Insert

  @SelectKey

  @Delete

  @Update

  @Select

  这些注解见名知意,用于替换原先对应的在mapper.xml中的各种标签,

  使用这写标签之后,就不需要mapper.xml映射文件了

 /*使用 注解 进行开发*/
/*mybatis 注解 主要用于替换 映射文件(mapper.xml) */
/*官方不推荐使用 注解式开发,推荐使用配置文件的方式*/
public interface StudentDAO {
@Insert(value="{insert into student (age,name,score) values (#{age},#{name},#{score})}")
public void insertStudent(Student s); @Insert("insert into student (age,name,score) values (#{age},#{name},#{score})")
@SelectKey(statement="select @@identity",resultType=Integer.class,keyProperty="id",before=false)
//<selectKey resultType="int" keyProperty="id" order="AFTER">
public void insertStudentCatchId(Student s); @Delete(value="delete from student where id = #{id}")
public void delecteStudent(int id); @Update("update student set name = #{name},age = #{age},score = #{score} where id = #{id}")
public void updateStudent(Student s); @Select("select * from student")
public List<Student> selectAllStudent();
public Map<String,Student> selectStudentMap(); @Select("select * from student where id = #{id}")
public Student selectStudentById(int id); @Select("select * from student where name like '%' #{name} '%' ")
public List<Student> selectStudentsByName(String name); }

修改主配置文件:

由于没有了映射文件,所以主配置文件中不能使用<mapper/>注册 mapper 的位置了。 需要使用<package/>标签

 <!-- 注册映射文件 -->
<mappers>
<!-- 扫描指定包下,看是否有xml 文件,如果没有,看在DAO中是否有注解 -->
<package name="com.mybatis.dao"/>
</mappers>
</configuration>

13.MyBatis注解式开发的更多相关文章

  1. MyBatis 注解式开发

  2. MyBatis_注解式开发

    一.注解式开发 mybatis的注解主要替换映射文件. 二.基础语法 注解首字母大写,因为注解与类.接口是同一级别的(类同一层级的:类,接口,注解,枚举).一个注解,后台对应着一个@interface ...

  3. Spring常用注解式开发

    1.组件注册@Configuration.@Bean给容器中注册组件. 注解,@Configuration告诉Spring这是一个配置类,相当于bean.xml配置文件. 注解,@Bean给Sprin ...

  4. Spring MVC (二)注解式开发使用详解

    MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册. 只需在代码中通过对类与方法的注解, 即可完成注册. 定义处理器 @Controller: 当前类为处理器 @ ...

  5. 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错

    原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ...

  6. 总结切面编程AOP的注解式开发和XML式开发

    有段日子没有总结东西了,因为最近确实有点忙,一直在忙于hadoop集群的搭建,磕磕碰碰现在勉强算是能呼吸了,因为这都是在自己的PC上,资源确实有点紧张(搭建过程后期奉上),今天难得大家都有空(哈哈哈~ ...

  7. SpringMVC 注解式开发

    SpringMVC的注解式开发是指,处理器是基于注解的类的开发.对于每一个定义的处理器,无需再配置文件中逐个注册,只需在代码中通过对类与方法的注解,便可完成注册.即注解替换是配置文件中对于处理器的注册 ...

  8. Spring MVC注解式开发

    MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册. 只需在代码中通过对类与方法的注解, 即可完成注册. 定义处理器 @Controller: 当前类为处理器 @ ...

  9. 《SpringMVC从入门到放肆》十一、SpringMVC注解式开发处理器方法返回值

    上两篇我们对处理器方法的参数进行了分别讲解,今天来学习处理器方法的返回值. 一.返回ModelAndView 若处理器方法处理完后,需要跳转到其它资源,且又要在跳转资源之间传递数据,此时处理器方法返回 ...

随机推荐

  1. SringCloud学习成长之路 八 消息总线

    Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控.本文要讲述的是用Spring Cloud Bus实现通知微服务 ...

  2. java构造方法前加void有什么作用

    构造方法前面是没有任何返回符,不能加任何返回类型,包括void.一个构造方法一旦加了void,那么这个就不是构造方法了,变成了一个普通的方法.至于你程序出现的情况,是这样的.任何一个Java类,如果你 ...

  3. charles 查找

    本文参考:charles 查找 查找设置 界面如上图,也没啥好说的: 这个还是非常常用的:需要了解 界面如上图,也没啥好说的: 这个还是非常常用的:需要了解 查找需要了解的关键字是: 查找的内容 正则 ...

  4. 设置主机防火墙规则(iptables规则设置及其与firewalld的生死纠葛)

    一.什么是firewalld防火墙? firewalld防火墙在Linux主机里其实就是一道隔离工具,它只对进出主机的请求做判断处理.也就是说它只管进出,至于你进来后做了什么,就不在firewalld ...

  5. 超级块,i节点,数据块,目录块,间接块

    一.物理磁盘到文件系统 文件系统用来存储文件内容,文件属性,和目录,这些类型的数据如何存储在磁盘块上的呢?Unix/linux使用了一个简单的方法. 他将磁盘分为3个部分: 超级块,文件系统中第一个块 ...

  6. UiPath工具当中写入代码

    在UIPath的工具中选择下面的控件 点击[Edit Code]之后出现写代码的地方,入力VB.net代码 点击[Edit Arguments]之后是这个方法的传入和传出的值. 下面自己做的一个小例子 ...

  7. 作为linux新手需掌握的常用命令大全

    学了几周的linux系统,接触最多的就是各种各样的命令,此篇随笔作为对之前所学的各中命令的整理扩展. 1.man命令 man命令作为第一个要学的Linux命令是因为它的作用非常强大——可用于查看命令的 ...

  8. jqGrid通过行id获取行对象

    $("#jqGrid").jqGrid('getRowData',rowid);

  9. [转帖]新一代IBM Z14主机技术介绍

    新一代IBM Z14主机技术介绍 https://cloud.tencent.com/developer/news/268909 IBM最新的已经有IBM Z15 主机了.. 文章来源:企鹅号 - 云 ...

  10. SQL-TSQL

    一.系统存储过程 常用  sp_helptext --查看可编程性(存储过程.函数.触发器.规则.默认值),表中(约束.触发器) EXEC sp_helptext f_M_Student 二.全局变量 ...