SSM框架之MyBatis3专题5:MyBatis注解式开发
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注解式开发相关推荐
- @select注解_Mybatis基本知识十七:Mybatis注解式开发-单表注解式开发
上一篇文章:<Mybatis基本知识十六:查询缓存之第三方查询缓存> 若文中有纰漏,请多多指正!!! 1.前言 使用Mybatis进行开发,不仅可以使用mapper配置文件进行开发,也可以 ...
- SSM(spring.struts2.mybatis)注解式开发步骤
SSM注解式开发步骤 1.引入依赖 spring.mybatis.struts2.mybatis-spring.struts2-spring-plugin.mysql|oracle.fastjson. ...
- 【编程不良人】快速入门Spring学习笔记08---事务属性、Spring整合Structs2框架(SM)、Spring整合Mybatis+Struts2(SSM)、Spring注解、SSM注解式开发
1. 事务属性 1.1 事务传播属性 配套视频:[编程不良人]快速入门Spring,SpringBoot.SpringCloud学不好完全是因为Spring没有掌握!_哔哩哔哩_bilibili # ...
- 超详细整合SSM框架--(Spring + Spring MVC + MyBatis)
超详细整合SSM框架--(Spring + Spring MVC + MyBatis) SpringMVC框架--文章跳转 Spring框架--文章跳转 Mybatis框架--文章跳转 整合思路 设计 ...
- 基于SSM框架的大学生自主学习网站的设计与开发/在线学习系统
摘 要 随着信息技术的不断发展,催生了许多新的行业产生,比如在线教育行业就是一种新兴的技术产业.尤其是在今年,武汉的疫情导致了大量学生无法正常上课,只能在网络上进行在线教育学习.这让原本仅仅是运用于 ...
- Shiro授权--注解式开发
目录 一.授权角色,权限 UserMapper.xml 添加查询方法 UserMapper UserBiz UserBizImpl MyRealm 重新MyRealm 编写授权方法 配置文件 ap ...
- Spring Ioc注解式开发中注解的作用
Spring Ioc注解式开发中注解的作用 目标:本章节注重于Spring Ioc的注解式开发之中注解的作用. 基于注解的DI实现IOC 1.定义bean而注解 a.@Component @Repos ...
- java注解式开发_JAVA语言之Spring MVC注解式开发使用详解[Java代码]
本文主要向大家介绍了JAVA语言的Spring MVC注解式开发使用详解,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处 ...
- SpringMVC (六)注解式开发
之前我们写springmvc的案例的时候所有的操作都是用配置文件配置的,现在我们来说另一种写案例的方式,使用注解式开发,在后面的开发中我们也都是这种方式进行开发 首先我先用注解式开发写springmv ...
最新文章
- 孙立岩 python-basic: 用于学习python基础的课件(十三十四 十五)
- 细胞因子风暴与新冠肺炎
- I.MX6 修改调试串口号(ttymx0 - ttymxc2)
- spring mvc项目中利用freemarker生成自定义标签
- 另一个日历(根据农历网上的寿星万年历修改)最新修改适应FF
- C#反射基础理解1(转)
- Java ObjectInputStream readShort()方法(带示例)
- 计算机系统维护是学什么,《计算机系统维护》教学大纲.doc
- 【Windows】Windows10基于VMware安装CentOS7的全面教程
- 曝苹果iPhone 13将于8月开始大批量产,恶劣天气不会造成影响
- python学习笔记-递归函数
- JMeter常用的4种参数化方式-操作解析
- pycharm和python解释器安装
- 高校学籍管理系统(SQL Server数据库课程设计)
- python中文乱码解决
- TBase环境部署过程及使用一
- matlab t分布 反函数,Excel 应用TINV函数计算学生的t分布的反函数
- 【BP回归预测】基于matlab改进的鲸鱼算法优化BP神经网络回归预测(多输入单输出)【含Matlab源码 2184期】
- JAVA 小易爱回文
- MOS管的行业应用领域-KIA MOS管
热门文章
- html5行级标签,8、html5哪些标签时块级、行内、行内块?2021-01-30
- python3多进程 pool manager_Python多进程multiprocessing.Pool
- 一个完整的网上商城的源码_黄冈微信分销商城系统-源码码网
- 获取当前绝对工作目录与被执行文件的绝对目录
- 自动生成文章的html,文章自动更新工具|自动生成文件|自动伪原创|文章自动插入关键词工具...
- c语言cin取字符串,c – 是否可以从cin中读取一个空字符串,并且仍然可以从cin.good()获得真实的字符串?...
- 算法之基础数论应用篇(一)
- (DFS)求出n个数中选择m个数的所有可能
- 信息系统项目管理师:第9章:项目人力资源管理-章节重点
- maven、gradle依赖分析