1 注解的基本知识

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

    1.1 注解的基本语法

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

    1.2 注解的注解


  • 打开@Deprecated源码,看到其定义上还有三个注解:@Documented、@Retention、@Target。这三个注解的意义是:

1、@Target:用于指定该注解可以标注的语法类型。CONSTRUCTOR(构造器)、LOCAL_VARIABLE(局部变量)、METHOD(方法)、FIELD(属性)、PACKAGE(包)、PARAMETER(参数)、TYPE(类型)。

  • 注意,对于TYPE常量,其意义有两个:一是指该注解可以用在类、接口、枚举等类上;二是指该注解可以作为其他注解的属性值。例如,后面要学到的@Result、@InterceptorRef就是属性的第二个用意。

2、@Documented:用于指定该注解定义时的注释信息能否显示在javaAPI说明文档中。没有添加的话,使用javaDoc生成API文档时就不会将该注解的信息添加到文档中。


3、@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。

    1.3 注解的属性

  • 当某个变量被声明了,但是却未被使用;或者某集合在声明或者定义时未加泛型说明等情况发生时,会在代码下给出警告黄线。Ctrl + 1,可在代码上添加一个注解@SuppressWarnings()。并且发现,不同的情况下,其参数是不同的。
  • 打开其源码,看到其定义与@Deprecated是不同的,其接口中声明了一个方法String[] value()。那么该注解在使用时必须包含一个属性value,类型为String[]。且该参数没有默认值,即必须给出value的值。
  • 对于注解的属性,需要注意以下几个问题:

    1.3.1 数组问题

  • 该属性在源码定义时被声明为数组,但是在具体使用时却只能够赋予一个值,此时无需将该值再定义为一个数组后赋给该属性。直接将该值赋给该属性即可。例如,对于声明为字符串数组String[]的value属性,可以将字符串String直接赋给该value。

    1.3.2 默认值问题

  • 若某属性在注解定义时声明了其默认值,则在注解使用时,可以不为其指定属性值。注解会自动使用其默认值。

    1.3.3 value属性问题

  • 若注解在使用时只需使用其value属性,其他属性要么有默认值,要么该注解只声明了一个value属性,此时,在注解使用时value属性名称可省略,而直接在注解的括号中写出该value属性的值。

    1.3.4 无属性问题

  • 有些注解在定义时,是没有属性的,如@Deprecated、@Override都是没有属性声明的,那么在使用时只需要给出注解名称即可。

    2 MyBatis注解

    2.1 @Insert

  • 其value属性用于指定哟啊执行的insert语句;

    2.2 @SelectKey

  • 用于替换XML中的<selectKey/>标签,用于返回新插入数据的id值。
  • statement:获取新插入记录主键值的SQL语句;
  • keyProperty:获取的该主键值返回后初始化对象的哪个属性;
  • resultType:返回值类型;
  • before:指定主键的生成相对于insert语句的执行先后顺序,该属性不能够省略;

    2.3 @Delete

  • 其value属性用于指定要执行的delete语句。

    2.4 @Update

  • 其value属性用于指定要执行的update语句。

    2.5 @Select

  • 其value属性用于指定要执行的select语句。

    3 程序举例说明

    3.1 修改Dao接口

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

    public interface IStudentDao {
    @Insert(value={"insert into t_student(name,age,score) values(#{name}, #{age}, #{score})"})
    void insertStudent(Student student);@Insert("insert into t_student(name,age,score) values(#{name}, #{age}, #{score})")
    @SelectKey(statement="select @@identity", resultType=int.class, keyProperty="id", before=false)
    void insertStudentCacheId(Student student);@Delete(value="delete from t_student where id=#{xxx}")
    void deleteStudentById(int id);@Update("update t_student set name=#{name}, age=#{age}, score=#{score} where id=#{id}")
    void updateStudent(Student student);@Select("select id,name,age,score from t_student")
    List<Student> selectAllStudents();@Select("select id,name,age,score from t_student where id=#{jjj}")
    Student selectStudentById(int id);@Select("select id,name,age,score from t_student where name like '%' #{xxx} '%'")
    List<Student> selectStudentsByName(String name);
    }

    3.2 删除映射文件

  • 由于MyBatis注解替换的是映射文件,所以这里就不需要映射文件了,将其直接删除。

    3.3 修改主配置文件

  • 由于没有映射文件,所以主配置文件中不能够使用<mapper/>注册mapper的位置,需要使用<package/>标签。
    <!-- 注册映射文件 -->
    <mappers><package name="com.eason.mybatis.dao"/>
    </mappers>

转载于:https://blog.51cto.com/12402717/2095563

SSM框架之MyBatis3专题5:MyBatis注解式开发相关推荐

  1. @select注解_Mybatis基本知识十七:Mybatis注解式开发-单表注解式开发

    上一篇文章:<Mybatis基本知识十六:查询缓存之第三方查询缓存> 若文中有纰漏,请多多指正!!! 1.前言 使用Mybatis进行开发,不仅可以使用mapper配置文件进行开发,也可以 ...

  2. SSM(spring.struts2.mybatis)注解式开发步骤

    SSM注解式开发步骤 1.引入依赖 spring.mybatis.struts2.mybatis-spring.struts2-spring-plugin.mysql|oracle.fastjson. ...

  3. 【编程不良人】快速入门Spring学习笔记08---事务属性、Spring整合Structs2框架(SM)、Spring整合Mybatis+Struts2(SSM)、Spring注解、SSM注解式开发

    1. 事务属性 1.1 事务传播属性 配套视频:[编程不良人]快速入门Spring,SpringBoot.SpringCloud学不好完全是因为Spring没有掌握!_哔哩哔哩_bilibili # ...

  4. 超详细整合SSM框架--(Spring + Spring MVC + MyBatis)

    超详细整合SSM框架--(Spring + Spring MVC + MyBatis) SpringMVC框架--文章跳转 Spring框架--文章跳转 Mybatis框架--文章跳转 整合思路 设计 ...

  5. 基于SSM框架的大学生自主学习网站的设计与开发/在线学习系统

    摘  要 随着信息技术的不断发展,催生了许多新的行业产生,比如在线教育行业就是一种新兴的技术产业.尤其是在今年,武汉的疫情导致了大量学生无法正常上课,只能在网络上进行在线教育学习.这让原本仅仅是运用于 ...

  6. Shiro授权--注解式开发

    目录 一.授权角色,权限 UserMapper.xml 添加查询方法 UserMapper UserBiz UserBizImpl MyRealm  重新MyRealm 编写授权方法 配置文件  ap ...

  7. Spring Ioc注解式开发中注解的作用

    Spring Ioc注解式开发中注解的作用 目标:本章节注重于Spring Ioc的注解式开发之中注解的作用. 基于注解的DI实现IOC 1.定义bean而注解 a.@Component @Repos ...

  8. java注解式开发_JAVA语言之Spring MVC注解式开发使用详解[Java代码]

    本文主要向大家介绍了JAVA语言的Spring MVC注解式开发使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处 ...

  9. SpringMVC (六)注解式开发

    之前我们写springmvc的案例的时候所有的操作都是用配置文件配置的,现在我们来说另一种写案例的方式,使用注解式开发,在后面的开发中我们也都是这种方式进行开发 首先我先用注解式开发写springmv ...

最新文章

  1. 孙立岩 python-basic: 用于学习python基础的课件(十三十四 十五)
  2. 细胞因子风暴与新冠肺炎
  3. I.MX6 修改调试串口号(ttymx0 - ttymxc2)
  4. spring mvc项目中利用freemarker生成自定义标签
  5. 另一个日历(根据农历网上的寿星万年历修改)最新修改适应FF
  6. C#反射基础理解1(转)
  7. Java ObjectInputStream readShort()方法(带示例)
  8. 计算机系统维护是学什么,《计算机系统维护》教学大纲.doc
  9. 【Windows】Windows10基于VMware安装CentOS7的全面教程
  10. 曝苹果iPhone 13将于8月开始大批量产,恶劣天气不会造成影响
  11. python学习笔记-递归函数
  12. JMeter常用的4种参数化方式-操作解析
  13. pycharm和python解释器安装
  14. 高校学籍管理系统(SQL Server数据库课程设计)
  15. python中文乱码解决
  16. TBase环境部署过程及使用一
  17. matlab t分布 反函数,Excel 应用TINV函数计算学生的t分布的反函数
  18. 【BP回归预测】基于matlab改进的鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 2184期】
  19. JAVA 小易爱回文
  20. MOS管的行业应用领域-KIA MOS管

热门文章

  1. html5行级标签,8、html5哪些标签时块级、行内、行内块?2021-01-30
  2. python3多进程 pool manager_Python多进程multiprocessing.Pool
  3. 一个完整的网上商城的源码_黄冈微信分销商城系统-源码码网
  4. 获取当前绝对工作目录与被执行文件的绝对目录
  5. 自动生成文章的html,文章自动更新工具|自动生成文件|自动伪原创|文章自动插入关键词工具...
  6. c语言cin取字符串,c – 是否可以从cin中读取一个空字符串,并且仍然可以从cin.good()获得真实的字符串?...
  7. 算法之基础数论应用篇(一)
  8. (DFS)求出n个数中选择m个数的所有可能
  9. 信息系统项目管理师:第9章:项目人力资源管理-章节重点
  10. maven、gradle依赖分析