SSM框架部分知识理解------spring注解

@Repository、@Service、@Controller

1 @Service用于标注业务层组件

2 @Controller用于标注控制层组件(如struts中的action)

3 @Repository用于标注数据访问组件,即DAO组件

@Service

/**
 * Created by Administrator on 2019/3/19.
 */
@Service("ClassPlaceInfoService")
@Transactional(rollbackFor = Exception.class)
public class ClassPlaceInfoServiceImpl implements ClassPlaceInfoService{
  @Resource
  private ClassPlaceInfoMapper classPlaceInfoMapper;
  @Override
  public List<Map<String, Object>> getList(Map map) {
    List<Map<String, Object>> classInfoMappers = classPlaceInfoMapper.GetAllClassPlaceList();

    return classInfoMappers;
  }

@Transactional 用于注解管理事务。

可以看出,在这个方法上面申明了一个@Transactional,表明这个方法将要进行事务管理,同时需要说明的是rollbackFor参数定义了在出现了什么异常时进行事务的回滚,显然这里定义的就是所有的Exception都要进行事务回滚。与之相反的一个参数是norollbackFor,这里就不多说了。对于@Transactional注解我们不仅可以在一个方法上放置,而且可以在类上进行申明。如果在类级别上使用该注解,那么类中的所有公共方法都被事务化,否则就只有使用了@Transactional注解的公共方法才被事务化。

@Override 用于标记继承父类的重写方法或者接口实现的方法。

@Override是伪代码,表示重写(当然不写也可以),不过也有好处:
1、可以当注释用,方便阅读;
2、编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错。
例如,你如果没写@Override,而你下面的方法名又写错了,这时你的编译器是可以编译通过的,

@Resource 和 @Autowired

@Resource和@Autowired [汉译英 :@资源和@自动装配]

都是做bean的注入时使用

@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

1、共同点

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

2、不同点

@Autowired 只按照类型注入

@Resource 默认按照名称注入

@Autowired 的目的:

  使用Spring时,通过Spring注入的Bean一般都被定义成private,并且要有getter和setter方法,显得比较繁琐,增加了代码量,使用@Autowired可以减少代码量。

  标注可以放在成员变量上,也可以放在成员变量的set方法上。前者,Spring会直接将UserDao类型的唯一一个bean赋值给userDao这个成员变量;后者,Spring会调用setUserDao方法来将UserDao类型的唯一一个bean装配到userDao这个属性。

例如:

public class TestServiceImpl {

    // 下面两种@Autowired只要使用一种即可

    @Autowired

    private UserDao userDao; // 用于字段上

    @Autowired

    public void setUserDao(UserDao userDao) { // 用于属性的方法上

        this.userDao = userDao;

    }}

@Controller

  package com.controller;

/**
 * Created by Administrator on 2019/3/19.
 */

  import com.alibaba.fastjson.JSON;
  import com.model.ClassPlaceInfo;
  import com.service.ClassPlaceInfoService;
  import com.service.serviceImpl.ClassPlaceInfoServiceImpl;
  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.RequestParam;
  import org.springframework.web.bind.annotation.ResponseBody;

  import javax.annotation.Resource;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;


@Controller
@RequestMapping(value = "/classPlaceInfo",produces = {"application/json;charset=UTF-8"})
public class ClassPlaceInfoController {
  //设置查询所有的上课地点信息

  @Resource
  private ClassPlaceInfoService classPlaceInfoService;
  @RequestMapping(value = "/getList", method = RequestMethod.GET)
  @ResponseBody
  public String getList(@RequestParam Map params)
  {
    List<Map<String, Object>> list = this.classPlaceInfoService.getList(params);
    return JSON.toJSONString(list);
  }

  //删除上课地点信息
  @RequestMapping(value = "/deletePlaceItem", method = RequestMethod.GET, params="items_id")
  @ResponseBody
  public String deleteItems(@RequestParam(value="items_id",required=false) String items_id)throws Exception{
    Map<String, Integer> map = classPlaceInfoService.deleteByClassPlaceId(Integer.valueOf(items_id));
    return JSON.toJSONString(map);

  }

  //添加上课地点信息
  @RequestMapping(value = "/addClassPlace", method = RequestMethod.POST)
  @ResponseBody
  public String addClassPlaceItem(ClassPlaceInfo classPlaceInfo)throws Exception{
    Map<String, Integer> map = new HashMap<String, Integer>();
    System.out.print(classPlaceInfo.getPlaceName());
    map.put("data",classPlaceInfoService.addClassPlaceInfo(classPlaceInfo));
    return JSON.toJSONString(map);

  }
}

1、@Controller [汉译英 :管理者]

只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器    @Controller 的使用方法

2、@RequestMapping [汉译英 :请求映射]

作用:处理请求映射,用于类或方法上,

     用于类时,表示类中的所有响应请求的方法都是以该地址作为父路径。

6个属性:

  • 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值,才能让该方法处理请求。
3、 @ResponseBody和@RequestBody

  • @ResponseBody作用于方法上,将返回结果直接以Json等格式返回,直接封装到response对象的Body中,不经过SpringMVC的视图解析器。一般用于前后端分离的项目,或者Ajax等异步请求。
@ResponseBody
public Student getStudent(Integer id){
      Student student = sstudentService.getStudent(id);
    return student;
}
//前端得到的Json数据:
'{"id":"201541030102","name":"刘聪","sex":"男"}'
  • @RequestBody作用方法的形参,将前端传来的Json等格式的数据封装到javabean中。它会直接读取读取Request请求的body部分数据,再使用HttpMessageConverter进行解析。
//前端传来的的Json数据:
'{"id":"201541030102","name":"刘聪","sex":"男"}'
 
@ResponseBody
public Integer setStudent(@RequestBody Student student){
      Integer total = sstudentService.setStudent(stedent);
    return total;
}

@Repository用于标注数据访问组件

这个类有对应的mapper.xml文件,用于写相关的sql语句。

package com.dao;

import com.model.ClassPlaceInfo;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2019/3/19.
 */
//@Repository
//public interface ClassPlaceInfoMapper extends BaseMapper<ClassPlaceInfo>  {
//}

@Repository
public interface ClassPlaceInfoMapper {
  Integer deleteClassPlace(Integer id);
  List<Map<String, Object>> GetAllClassPlaceList();
  Integer addClassPlace(ClassPlaceInfo classPlaceInfo);
}

以上只是意思的理解,没有结合配置文件。

猜你喜欢

转载自blog.csdn.net/pan_xi_yi/article/details/88779048