0%

注解解析

@SuppressWarnings


用于抑制编译器产生警告信息。

  • 示例1——抑制单类型的警告
    1
    2
    3
    4
    5
    6
    @SuppressWarnings("unchecked")
    public void addItems(String item){
    @SuppressWarnings("rawtypes")
    List items = new ArrayList();
    items.add(item);
    }
  • 示例2——抑制多类型的警告
    1
    2
    3
    4
    5
    @SuppressWarnings(value={"unchecked", "rawtypes"})
    public void addItems(String item){
    List items = new ArrayList();
    items.add(item);
    }
  • 示例3——抑制所有类型的警告
    1
    2
    3
    4
    5
    @SuppressWarnings("all")
    public void addItems(String item){
    List items = new ArrayList();
    items.add(item);
    }
    关键字 用途
    all 抑制所有警告
    boxing 抑制与箱/非装箱操作相关的警告
    cast 抑制与铸造操作相关的警告
    dep-ann 相对于弃用的注释,抑制警告
    deprecation 抑制相对于弃用的警告
    fallthrough 在switch语句中,相对于缺失的中断,抑制警告
    finally 抑制警告相对于最终阻止不返回的警告告
    hiding 抑制相对于隐藏变量的局部的警告
    incomplete-switch 为了在switch语句(enum案例)中抑制相对于缺失条目的警告告
    nls 要抑制相对于非nls字符串字面量的警告
    null 抑制null相关的警告
    rawtypes 在类params上使用泛型时,抑制相对于非特异性类型的警告
    serial 针对可串行化类,抑制相对于缺少serialVersionUID字段的警告
    static-access 抑制不正确的静态访问的警告
    synthetic-access 抑制相对于内部类的未优化访问的警告
    unchecked 抑制相对于未检查操作的警告
    unqualified-field-access 禁止与字段访问不合格的警告
    unused 抑制相对于弃用的警告
    deprecation 抑制未使用的代码的警告

@PathVariable

  • 当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。

@RequestHeader

  • 可以把Request请求header部分的值绑定到方法的参数上。

@CookieValue

  • 可以把Request header中关于cookie的值绑定到方法的参数上。

@MatrixVariable 矩阵变量 示例

1
2
3
4
5
6
//GET /owners/42;q=11/pets/21;q=22
@RequestMapping(value = "/owners/{ownerId}/pets/{petId}", method = RequestMethod.GET)
public void findPet(
@MatrixVariable(value = "q",pathVar="ownerId") int q1,
@MatrixVariable(value = "q",pathVar="petId") int q2)
}

此处q1=11,q2=22.

@Autowired 与@Resource

@Autowire默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可以结合@Qualifier注解一起使用;

@Resource默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象.
注意:如果没有指定name属性,并且按照默认的名称仍然找不到依赖的对象时候,会回退到按照类型装配,但一旦指定了name属性,就只能按照名称装配了.
建议使用@Resource。

@Reference

Double 中 代表资源.

@Configuration 和 @Bean

@Configuration 标注在类上,相当于把该类作为spring的xml配置文件中的 <beans> * 注意不是bean,作用为:配置spring容器(应用上下文)

@Bean 标注在方法上(返回某个实例的方法),等价于spring的xml配置文件中的 <bean> ,作用为:注册bean对象

@Component

把普通pojo实例化到spring容器中,相当于配置文件中的

  • 泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
  • 案例: <context:component-scan base-package=”com.*”>

@Value

通过@Value将外部的值动态注入到Bean中. 一般使用在类的属性上.

@Value(“测试”) 或 配置文件中 @Value(“${com.neo.username}”)

导入配置中的中文乱码

Idea:
设置 File EncodingsTransparent native-to-ascii conversiontrue,具体步骤如下:
依次点击
File -> Settings -> Editor -> File Encodings
Properties Files (*.properties) 下的Default encoding for properties files设置为UTF-8,将Transparent native-to-ascii conversion前的勾选上。

还乱码的话, 把文件内容剪切后再粘贴进去 Transparent native-to-ascii conversion 会自动转换编码, 再测试

@Entity 和 @Table

@Entity 标注在类上, 说明这个class是实体类,并且使用默认的orm规则,即class名即数据库表中表名,class字段名即表中的字段名

如果想改变这种默认的orm规则,就要使用@Table来改变class名与数据库中表名的映射规则,@Column来改变class中字段名与db中表的字段名的映射规则

注解 作用 默认值
@Id 主键
@GeneratedValue 主键生成策略 AUTO
@TableGenerator 主键表
@Column 标识实体类中属性与数据表中字段的对应关系

2018-6-21

@EnableCaching

Spring 3开始提供的通过注解开启缓存功能

@ModelAttribute 具有如下三个作用:

①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用。其实@ModelAttribute此处对于供视图页面展示来说与model.addAttribute(“attributeName”, abc);功能类似。

1
public String test(@ModelAttribute("user") UserModel user) 

此处多了一个注解@ModelAttribute(“user”),它的作用是将该绑定的命令对象以“user”为名称添加到模型对象中供视图页面展示使用。我们此时可以在视图页面使用${user.username}来获取绑定的命令对象的属性。

②暴露@RequestMapping 方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。

1
public @ModelAttribute("user2") UserModel test3(@ModelAttribute("user2") UserModel user)

大家可以看到返回值类型是命令对象类型,而且通过@ModelAttribute(“user2”)注解,此时会暴露返回值到模型数据( 名字为user2 ) 中供视图展示使用

@ModelAttribute 注解的返回值会覆盖@RequestMapping 注解方法中的@ModelAttribute 注解的同名命令对象

③暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法(@RequestMapping 注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用

@Options

mybatis的@Options注解能够设置缓存时间,能够为对象生成自增的key

@Options(useGeneratedKeys = true, keyProperty = "instanceId", keyColumn = "instance_id")

@Options注解中默认设置的主键对应的字段名为id、在我们的表中,主键名为instance_id,因此需要将keyProperty和keyColumn设置成我们想要的字段:

这个注解的意思就是,从instance_id这个字段里面把数据放到传入对象的instanceId成员变量里面。

注解中的useCache还可以设置缓存相关的选项:

1
2
3
useCache = true表示本次查询结果被缓存以提高下次查询速度,
flushCache = false表示下次查询时不刷新缓存,
timeout = 10000表示查询结果缓存10000秒。

@Param

dao层示例

1
Public User selectUser(@param(“userName”) String name,@param(“userpassword”) String password);

xml映射对应示例

1
2
3
<select id=" selectUser" resultMap="BaseResultMap">  
select * from user_user_t where user_name = #{userName,jdbcType=VARCHAR} and user_password=#{userPassword,jdbcType=VARCHAR}
</select>

注意:采用#{}的方式把@Param注解括号内的参数进行引用(括号内参数对应的是形参如 userName对应的是name);

@Param注解JavaBean对象

dao层示例

1
public List<user> getUserInformation(@Param("user") User user);

xml映射对应示例

1
2
3
4
5
6
7
8
<select id="getUserInformation" parameterType="com.github.demo.vo.User" resultMap="userMapper">  
select
<include refid="User_Base_Column_List" />
from mo_user t where 1=1
<!-- 因为传进来的是对象所以这样写是取不到值得 -->
<if test="user.userName!=null and user.userName!=''"> and t.user_name = #{user.userName} </if>
<if test="user.userAge!=null and user.userAge!=''"> and t.user_age = #{user.userAge} </if>
</select>

不使用@Param注解来声明参数时

  1. 必须使用使用 #{}方式。如果使用 ${} 的方式,会报错。

  2. 当参数只能有一个,并且是Javabean。在SQL语句里可以引用JavaBean的属性,而且只能引用JavaBean的属性。

useGeneratedKeys 参数

@Options(useGeneratedKeys = true, keyProperty = "instanceId", keyColumn = "instance_id")
int addInstance(Instance instance);

@Options(useGeneratedKeys=true) 获取新添加记录的自增长主键字段值

keyProperty = “instanceId” 对应实体类属性

keyColumn = “instance_id” 对应数据库属性

这句的意思是 添加的时候将插入后生成的主键 instance_id 值自动写入到实体类instanceId 中. 注意不是返回. 是写入到实体类的属性中了, 取的话需要去 Instance.getinstanceId() 去取.

@Transactional

开启事务注解

配合 @Rollback : 回滚, 方法执行完成后回滚数据, 不写入数据库, 做测试用

配合 @Commit : 提交, 提交后数据写入数据库

@Results

对返回的多个结果如List进行绑定,

1
2
3
4
5
6
@Results(
{
@Result(property = "name", column = "age"),
@Result(property = "age", column = "age")
}
)