Spring注解,SpringBoot注解,MyBatis注解,SpringMVC注解总结

Springboot注解

一、注解(annotations)列表 @ApiOperation
@SpringBootApplication:包含了@ComponentScan@Configuration@EnableAutoConfiguration注解。其中@ComponentScanspring Boot扫描到Configuration类并把它加入到程序上下文。

@Configuration 等同于springXML配置文件;使用Java代码可以检查类型安全。

@EnableAutoConfiguSuppressWaration 自动配置。

@ComponentScan 组件扫描,可自动发现和装配一些Bean

@Component可配合CommandLineRunner使用,在程序启动后执行一些基础任务。

@RestController注解是@Controller@ResponseBody的合集,表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,REST风格的控制器。

@Autowired自动导入。

@PathVariable获取参数。

@JsonBackReference解决嵌套外链问题。

@RepositoryRestResourcepublic配合spring-boot-starter-data-rest使用。

扫描二维码关注公众号,回复: 2829666 查看本文章

二、注解(annotations)详解

@SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:@Configuration @EnableAutoConfiguration @ComponentScan 三个配置。

package com.example.myproject;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

 

@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

}

 

@ResponseBody:表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用,用于构建RESTfulapi。在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。示例代码:

@RequestMapping(“/test”)

@ResponseBody

public String test(){

return”ok”;

}

 

@Controller:用于定义控制器类,在spring 项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。示例代码:

@Controller

@RequestMapping(“/demoInfo”)

publicclass DemoController {

@Autowired

private DemoInfoService demoInfoService;

 

@RequestMapping("/hello")

public String hello(Map<String,Object> map){

   System.out.println("DemoController.hello()");

   map.put("hello","from TemplateController.helloHtml");

   //会使用hello.html或者hello.ftl模板进行渲染显示.

   return"/hello";

}

}

 

@RestController:用于标注控制层组件(struts中的action)@ResponseBody@Controller的合集。示例代码:

package com.kfit.demo.web;

 

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

 

 

@RestController

@RequestMapping(“/demoInfo2”)

publicclass DemoController2 {

 

@RequestMapping("/test")

public String test(){

   return"ok";

}

}

 

@RequestMapping:提供路由信息,负责URLController中的具体函数的映射。

@EnableAutoConfigurationSpring Boot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库。你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。

@ComponentScan:表示将该类自动发现扫描组件。个人理解相当于,如果扫描到有@Component@Controller@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。

@Configuration:相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。

@Import:用来导入其他配置类。

@ImportResource:用来加载xml配置文件。

@Autowired:自动导入依赖的bean

@Service:一般用于修饰service层的组件

@Repository:使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

@Bean:用@Bean标注方法等价于XML中配置的bean

@Value:注入Spring boot application.properties配置的属性的值。示例代码:

@Value(value = “#{message}”)

private String message;

 

@Inject:等价于默认的@Autowired,只是没有required属性;

@Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Bean:相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。

@AutoWired:自动导入依赖的beanbyType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。

@Qualifier:当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者,具体使用方式如下:

@Autowired

@Qualifier(value = “demoInfoService”)

private DemoInfoService demoInfoService;

 

@Resource(name=”name”,type=”type”):没有括号内内容的话,默认byName。与@Autowired干类似的事。

三、JPA注解

@Entity@Table(name=”“):表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略

@MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。

@NoRepositoryBean:一般用作父类的repository,有这个注解,spring不会去实例化该repository

@Column:如果字段名与列名相同,则可以省略。

@Id:表示该属性为主键。

@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”):表示主键生成策略是sequence(可以为AutoIDENTITYnative等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq

@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1)namesequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。

@Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式

@JsonIgnore:作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。

@JoinColumnname=”loginId”:一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。

@OneToOne@OneToMany@ManyToOne:对应hibernate配置文件中的一对一,一对多,多对一。

四、springMVC相关注解

@RequestMapping@RequestMapping(“/path”)表示该控制器处理所有“/path”UR L请求。RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。 
用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。该注解有六个属性: 
params:
指定request中必须包含某些参数值是,才让该方法处理。 
headers:
指定request中必须包含某些指定的header值,才能让该方法处理请求。 
value:
指定请求的实际地址,指定的地址可以是URI Template 模式 
method:
指定请求的method类型, GETPOSTPUTDELETE 
consumes:
指定处理请求的提交内容类型(Content-Type),如application/json,text/html; 
produces:
指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

@RequestParam:用在方法的参数前面。 
@RequestParam 
String a =request.getParameter(“a”)

@PathVariable:路径变量。如

RequestMapping(“user/get/mac/{macAddress}”)

public String getByMacAddress(@PathVariable String macAddress){

//do something;

}

参数与大括号里的名字一样要相同。

 

五、全局异常处理

@ControllerAdvice:包含@Component。可以被扫描到。统一处理异常。

@ExceptionHandlerException.class):用在方法上面表示遇到这个异常就执行以下方法。

 

Spring注解

@Controller
@Service
@Autowired
@RequestMapping
@RequestParam
@ModelAttribute
@Cacheable
@CacheFlush
@Resource
@PostConstruct
@PreDestroy
@Repository
@Component
(不推荐使用)
@Scope
@SessionAttributes
@InitBinder
@Required
@Qualifier




1@Controller

 • 例如
@Controller
 public class SoftCreateController extends SimpleBaseController {}
 •
或者
@Controller("userController")

说明
 @Controller 负责注册一个bean spring 上下文中,bean ID 默认为类名称开头字母小写 

2@Service

例如
  @Service
 public class SoftCreateServiceImpl implements ISoftCreateService {}
 •
或者
 @Service("softCreateServiceImpl")

 •
说明
@Service 负责注册一个bean spring 上下文中,bean ID 默认为类名称开头字母小写

3@Autowired

例如
 @Autowired
private ISoftPMService softPMService;
或者
@Autowired(required=false)
private ISoftPMService softPMService = new SoftPMServiceImpl();

 •
说明
@Autowired 根据bean 类型从spring 上线文中进行查找,注册类型必须唯一,否则报异常。 

@Resource 的区别在于,@Resource 允许通过bean 名称或bean 类型两种方式进行查找@Autowired(required=false) 表示,如果spring 上下文中没有找到该类型的bean 时, 才会使用new SoftPMServiceImpl();

@Autowired
标注作用于 Map 类型时,如果 Map key String 类型,则 Spring 会将容器中所有类型符合 Map value 对应的类型的 Bean 增加进来,用 Bean id name 作为 Map key

@Autowired 还有一个作用就是,如果将其标注在 BeanFactory 类型、ApplicationContext 类型、ResourceLoader 类型、ApplicationEventPublisher 类型、MessageSource 类型上,那么 Spring 会自动注入这些实现类的实例,不需要额外的操作。

4@RequestMapping

@Controller
@RequestMapping("/bbtForum.do") 
本文来自www.itxxz.com 
public class BbtForumController {
             @RequestMapping(params = "method=listBoardTopic")
public String listBoardTopic(int topicId,User user) {}
}
  •
方法
 @RequestMapping("/softpg/downSoftPg.do")
 @RequestMapping(value="/softpg/ajaxLoadSoftId.do",method = POST)
@RequestMapping(value = "/osu/product/detail.do", params = { "modify=false" }, method =POST)

  •
说明
    @RequestMapping 可以声明到类或方法上

参数绑定说明
如果我们使用以下的 URL 请求:
http://localhost/itxxzSpring4?method=listBoardTopic&topicId=1&userId=10&userName=tom copyright www.itxxz.com 
topicId URL
参数将绑定到 topicId 入参上,而 userId userName URL 参数将绑定到 user 对象的 userId userName 属性中。和 URL 请求中不允许没有 topicId 参数不同,虽然 User userId 属性的类型是基本数据类型,但如果 URL 中不存在 userId 参数,Spring 也不会报错,此时 user.userId 值为 0 。如果 User 对象拥有一个 dept.deptId 的级联属性,那么它将和 dept.deptId URL 参数绑定。

5@RequestParam
参数绑定说明
@RequestParam("id")
http://localhost/itxxzSpring4?method=listBoardTopic&id=1&userId=10&userName=tom
listBoardTopic(@RequestParam("id")int topicId,User user)
中的 topicId 绑定到 id 这个 URL 参数, 那么可以通过对入参使用 @RequestParam 注解来达到目的 
@RequestParam(required=false)
:参数不是必须的,默认为true
@RequestParam(value="id",required=false)


请求处理方法入参的可选类型
• Java 基本数据类型和 String
            
默认情况下将按名称匹配的方式绑定到 URL 参数上,可以通过 @RequestParam 注解改变默认的绑定规则

 • request/response/session
            
既可以是 Servlet API 的也可以是 Portlet API 对应的对象,Spring 会将它们绑定到Servlet Portlet 容器的相应对象上 

• org.springframework.web.context.request.WebRequest
            
内部包含了 request 对象

• java.util.Locale 
            
绑定到 request 对应的 Locale 对象上

• java.io.InputStream/java.io.Reader
                
可以借此访问 request 的内容 

• java.io.OutputStream / java.io.Writer
            
可以借此操作 response 的内容

任何标注了 @RequestParam 注解的入参 
            
被标注 @RequestParam 注解的入参将绑定到特定的 request 参数上。

• java.util.Map / org.springframework.ui.ModelMap
            
它绑定 Spring MVC 框架中每个请求所创建的潜在的模型对象,它们可以被 Web 视图对象访问(如 JSP  本文来自www.itxxz.com 

命令/ 表单对象(注:一般称绑定使用 HTTP GET 发送的 URL 参数的对象为命令对象,而称绑定使用HTTP POST 发送的 URL 参数的对象为表单对象)
             它们的属性将以名称匹配的规则绑定到 URL 参数上,同时完成类型的转换。
             而类型转换的规则可以通过 @InitBinder 注解或通过 HandlerAdapter 的配置进行调

 • org.springframework.validation.Errors / org.springframework.validation.BindingResult
             
为属性列表中的命令/ 表单对象的校验结果,注意检验结果参数必须紧跟在命令/ 表单对象的后面 

• org.springframework.web.bind.support.SessionStatus
            
可以通过该类型 status 对象显式结束表单的处理,这相当于触发 session 清除其中的通过@SessionAttributes 定义的属性 

请求处理方法返回值的可选类型

• void
此时逻辑视图名由请求处理方法对应的 URL 确定,如以下的方法:
@RequestMapping("/welcome.do")
public void welcomeHandler() {}

对应的逻辑视图名为 “ welcome ”

• String

此时逻辑视图名为返回的字符,如以下的方法:
@RequestMapping(method = RequestMethod.GET)
public String setupForm(@RequestParam("ownerId") int ownerId, ModelMap model) {

Owner owner = this.clinic.loadOwner(ownerId);
model.addAttribute(owner);
return "ownerForm";

}

对应的逻辑视图名为 “ ownerForm ”

• org.springframework.ui.ModelMap

和返回类型为 void 一样,逻辑视图名取决于对应请求的 URL ,如下面的例子:
@RequestMapping("/vets.do")
public ModelMap vetsHandler() { 
return new ModelMap(this.clinic.getVets());
}

对应的逻辑视图名为 “ vets ” ,返回的 ModelMap 将被作为请求对应的模型对象,可以在 JSP 视图页面中访问到。

• ModelAndView
当然还可以是传统的 ModelAndView

6@ModelAttribute
作用域:request
 •
例如
@RequestMapping("/base/userManageCooper/init.do")
public String handleInit(@ModelAttribute("queryBean") ManagedUser sUser,Model model,){

或者
@ModelAttribute("coopMap")// coopMap 返回到页
public Map<Long,CooperatorInfo> coopMapItems(){}

说明
@ModelAttribute 声明在属性上,表示该属性的value 来源于model "queryBean" ,并被保存到model @ModelAttribute 声明在方法上,表示该方法的返回值被保存到model  itxxz.com 

@ModelAttribute使用大致有有两种:

运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用;

运用在方法上,会在每一个@RequestMapping标注的方法前执行,如果有返回值,则自动将该返回值加入到ModelMap中;


7@Cacheable @CacheFlush

 • @Cacheable :声明一个方法的返回值应该被缓
 例如:@Cacheable(modelId = "testCaching")

• @CacheFlush
:声明一个方法是清空缓存的触发器
例如:@CacheFlush(modelId = "testCaching")

说明
要配合缓存处理器使用


8@Resource

例如
@Resource
private DataSource dataSource; // inject the bean named ‘dataSource’
 •
或者
@Resource(name="dataSource")
@Resource(type=DataSource.class)

说明
@Resource 默认按bean name 进行查找,如果没有找到会按type 进行查找, 
此时与@Autowired .

在没有为 @Resource 注解显式指定 name 属性的前提下,如果将其标注在 BeanFactory 类型、ApplicationContext 类型、ResourceLoader 类型、ApplicationEventPublisher 类型、MessageSource 类型上,那么 Spring 会自动注入这些实现类的实例,不需要额外的操作。此时 name 属性不需要指定 ( 或者指定为""),否则注入失败;

9@PostConstruct @PreDestroy

• @PostConstruct
在方法上加上注解@PostConstruct ,这个方法就会在Bean 初始化之后被Spring 容器执
(注:Bean 初始化包括,实例化Bean ,并装配Bean 的属性(依赖注入))。

• @PreDestroy

在方法上加上注解@PreDestroy ,这个方法就会在Bean 被销毁前被Spring 容器执行。 

@Repository
@Controller @Service 类似,都是向spring 上下文中注册bean ,不在赘述。


10@Component (不推荐使用)

@Component 是所有受Spring 管理组件的通用形式,Spring 还提供了更加细化的注解形式:  @Repository @Service @Controller ,它们分别对应存储层Bean ,业务层Bean ,和展示层Bean
目前版本(2.5 )中,这些注解与@Component 的语义是一样的,完全通用, Spring 以后的版本中可能会给它们追加更多的语义。 所以,我们推荐使用@Repository @Service @Controller 来替代@Component

11@Scope
例如
@Scope("session")
@Repository()
public class UserSessionBean implementsSerializable {} 

说明

在使用XML 定义Bean 时,可以通过bean scope 属性来定义一个Bean 的作用范围,
同样可以通过@Scope 注解来完成

       @Scope中可以指定如下值:
       singleton:定义bean的范围为每个spring容器一个实例(默认值)
       prototype:定义bean可以被多次实例化(使用一次就创建一次)
       request:定义bean的范围是http请求(springMVC中有效)
       session:定义bean的范围是http会话(springMVC中有效)
       global-session:定义bean的范围是全局http会话(portlet中有效) 

12@SessionAttributes

说明
Spring 允许我们有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,
以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。
这一功能是通过类定义处标注 @SessionAttributes 注解来实现的。
@SessionAttributes 只能声明在类上,而不能声明在方法上。
例如
@SessionAttributes("currUser") // ModelMap 中属性名为currUser 的属性
@SessionAttributes({"attr1","attr2"})
@SessionAttributes(types = User.class)
@SessionAttributes(types = {User.class,Dept.class})
@SessionAttributes(types = {User.class,Dept.class},value={"attr1","attr2"})


13@InitBinder 

说明
如果希望某个属性编辑器仅作用于特定的 Controller
可以在 Controller 中定义一个标注 @InitBinder 注解的方法,
可以在该方法中向 Controller 了注册若干个属性编辑器

例如
@InitBinder
public void initBinder(WebDataBinder binder) {

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}


14@Required
例如
 @required             
public  setName(String name){}
说明 copyright www.itxxz.com 

@ required
负责检查一个bean在初始化时其声明的 set方法是否被执行, 当某个被标注了 @Required Setter 方法没有被调用,则 Spring 在解析的时候会抛出异常,以提醒开发者对相应属性进行设置。 @Required 注解只能标注在 Setter 方法之上。因为依赖注入的本质是检查 Setter 方法是否被调用了,而不是真的去检查属性是否赋值了以及赋了什么样的值。如果将该注解标注在非 setXxxx() 类型的方法则被忽略。

15@Qualifier

例如
@Autowired
 @Qualifier("softService")
private ISoftPMService softPMService;
 

 

 

 

下面是其他注解,包括组合注解
1@Autowired

@ApiOperation和@ApiParam为添加的API相关注解,个参数说明如下:
@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”;其他参数可参考源码;
@ApiParam(required = “是否必须参数”, name = “参数名称”, value = “参数具体描述”

实际项目中非常需要写文档,提高Java服务端和Web前端以及移动端的对接效率。

Swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目实现了与SpingMVC框架的无缝集成功能,方便生成spring restful风格的接口文档。

(2)@RequestMapping   和  @GetMapping @PostMapping 区别

@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。该注解将HTTP Get 映射到 特定的处理方法上

@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。该注解将HTTP Post 映射到 特定的处理方法上(3) @ResponseBody 和 @RequestBody 的作用

@ResponseBody是作用在方法上的, 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】,在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。 使用时机 返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

@RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上. 作用:该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上;
2) 再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。使用时机: GET、POST方式提时, 根据request header Content-Type的值来判断:

(4)@Transactional 事物注解

  • @Transactional 注解可以被应用于接口定义和接口方法、类定义和类的 public 方法上。功能:在出现异常的情况下,保证数据的一致性;数据提交操作回滚至异常发生前的状态

(5)@RequestParam,@PathParam,@PathVariable等注解区别

@RequestParam  @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,关键点不同的是@RequestParam 是从request里面拿取值,而 @PathVariable 是从一个URI模板里面来填充。。

@PathParam这个注解是和springpathVariable是一样的,也是基于模板的,但是这个是jboss包下面的一个实现,上面的是spring的一个实现,都要导包

(6)

@FormParam可以用来注入web表单的参数为REST风格的Web服务
@PathParam绑定一个路径段资源的方法参数的值
@QueryParam绑定一个路径段资源的方法参数的值,和RequestParam作用一致,@pathparam不同,@queryparam,指定的是URL中的参数是以键值对的形式出现的。用在get方法.
@HeaderParam; 提取  HTTP标头( HTTP header)并将它绑定到一个方法的参数
@CookieParam读取信息存储为一个cookie,并将它绑定到一个方法的参数
@MatrixParam用来绑定包含多个   property (属性)=value()   方法参数表达式

 

 

 

Mybatis

@CacheNamespace(size = 512) 定义在该命名空间内允许使用内置缓存,最大值为512个对象引用,读写默认是开启的,缓存内省刷新时间为默认3600000毫秒,写策略是拷贝整个对象镜像到全新堆(如同CopyOnWriteList)因此线程安全。 

@SelectProvider(type = TestSqlProvider.class, method = "getSql") 提供查询的SQL语句,如果你不用这个注解,你也可以直接使用@Select("select * from ....")注解,把查询SQL抽取到一个类里面,方便管理,同时复杂的SQL也容易操作,type =TestSqlProvider.class就是存放SQL语句的类,而method ="getSql"表示get接口方法需要到TestSqlProvider类的getSql方法中获取SQL语句。 

@Options(useCache = true, flushCache = false, timeout = 10000) 一些查询的选项开关,比如useCache = true表示本次查询结果被缓存以提高下次查询速度,flushCache = false表示下次查询时不刷新缓存,timeout = 10000表示查询结果缓存10000秒。 

@Results(value = { 
@Result(id = true, property = "id", column = "test_id",javaType = String.class, jdbcType = JdbcType.VARCHAR), 
@Result(property = "testText", column = "test_text",javaType = String.class, jdbcType = JdbcType.VARCHAR) })
表示sql查询返回的结果集,@Results是以@Result为元素的数组,@Result表示单条属性-字段的映射关系,如:@Result(id = true, property = "id", column ="test_id", javaType = String.class, jdbcType = JdbcType.VARCHAR)可以简写为:@Result(id =true, property = "id", column = "test_id")id = true表示这个test_id字段是个PK,查询时mybatis会给予必要的优化,应该说数组中所有的@Result组成了单个记录的映射关系,而@Results则单个记录的集合。另外还有一个非常重要的注解@ResultMap也和@Results差不多,到时会讲到。 

@Param("id") :全局限定别名,定义查询参数在sql语句中的位置不再是顺序下标0,1,2,3....的形式,而是对应名称,该名称就在这里定义。 

@ResultMap(value = "getByTestText") :重要的注解,可以解决复杂的映射关系,包括resultMap嵌套,鉴别器discriminator等等。注意一旦你启用该注解,你将不得不在你的映射文件中配置你的resultMap,而value = "getByTestText"即为映射文件中的resultMap ID(注意此处的value ="getByTestText",必须是在映射文件中指定命名空间路径)@ResultMap在某些简单场合可以用@Results代替,但是复杂查询,比如联合、嵌套查询@ResultMap就会显得解耦方便更容易管理

@InsertProvider(type = TestSqlProvider.class, method = "insertSql") :用法和含义@SelectProvider一样,只不过是用来插入数据库而用的。 

@Options(flushCache = true, timeout = 20000) :对于需要更新数据库的操作,需要重新刷新缓存flushCache = true使缓存同步。 

@UpdateProvider(type = TestSqlProvider.class, method = "updateSql") :用法和含义@SelectProvider一样,只不过是用来更新数据库而用的。 

@Param("testBean") :是一个自定义的对象,指定了sql语句中的表现形式,如果要在sql中引用对象里面的属性,只要使用testBean.idtestBean.textText即可,mybatis会通过反射找到这些属性值。 

@DeleteProvider(type = TestSqlProvider.class, method = "deleteSql") :用法和含义@SelectProvider一样,只不过是用来删除数据而用的。 

 

SpringMVC

1@PathVariable绑定URI模板变量值。注解绑定它传过来的值到方法的参数上
*用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数

@PathVariable是用来获得请求url中的动态参数的,用于将请求URL中的模板变量映射到功能处理方法的参数上

2@RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,类似于strutsaction请求

3@responsebody表示该方法的返回结果直接写入HTTP response body
*一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response *body

在SpringMVC后台控制层获取参数的方式主要有两种:

一种是request.getParameter("name"),另外一种是用注解@RequestParam直接获取。这里主要讲这个注解 @RequestParam

接下来我们看一下@RequestParam注解主要有哪些参数:

value:参数名字,即入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入;

required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报404错误码;

defaultValue:默认值,表示如果请求中没有同名参数时的默认值,例如:

public List<EasyUITreeNode> getItemTreeNode(@RequestParam(value="id",defaultValue="0")long parentId)

(4) @Controller

控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示

(5) @RequestMapping

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

RequestMapping注解有六个属性,下面我们把她分成三类进行说明(下面有相应示例)。

value, method;

value: 指定请求的实际地址,指定的地址可以是URI Template 模式method:指定请求的method类型, GET、POST、PUT、DELETE等;

consumes,produces

consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;

params,headers

params: 指定request中必须包含某些参数值是,才让该方法处理。

headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求

(6) @Resource和@Autowired

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入

共同点:两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

不同点: (1)@Autowired:@Autowired为Spring提供的注解,需要导入包@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)装配,可以结合@Qualifier注解一起使用

(2)@Resource

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

(7) @ModelAttribute和 @SessionAttributes

代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。

 @SessionAttributes即将值放到session作用域中,写在class上面。

 

(8) @PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数

(9)@requestParam

@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter("name"),它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

(10)@ResponseBody

作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;

(11)@Component

相当于通用的注解,当不知道一些类归到哪个层时使用,但是不建议。

(12)@Repository

用于注解dao层,在daoImpl类上面注解

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/RuiKe1400360107/article/details/81741357