SSM注解总结

一、MyBatis注解

  MyBatis是一个基于ORM的数据访问层框架。

1.1 @Insert [/ɪnˈsɜːt/] 【插入】 : 插入sql , 和xml insert sql语法完全一样

1.2 @Select [[sɪˈlekt]]【查询】 : 查询sql, 和xml select sql语法完全一样

1.3 @Update [ /ˌʌpˈdeɪt/]【更新】 : 更新sql, 和xml update sql语法完全一样

1.4 @Delete [/dɪˈliːt/]【删除】 : 删除sql, 和xml delete sql语法完全一样

1.5 @Param [/ˌpærəˈm/]【参数】 : 入参

1.6 @Results [/rɪˈzʌlts/]【结果】 : 设置结果集合

1.7@Result : 结果

1.8 @ResultMap : 引用结果集合

1.9 @SelectKey : 获取最新插入id

  具体使用:

  (1)、@Select、@Results、@Result

/**
 * 查询所有
 * @return Employee泛型集合
 */
@Select("select * from t_emp")
@Results(id = "empMap",value = {
        @Result(column = "emp_id",property = "empId",id = true),
        @Result(column = "emp_name",property = "empName"),
        @Result(column = "emp_tel",property = "empTel"),
        @Result(column = "emp_education",property = "empEducation"),
        @Result(column = "emp_birthday",property = "empBirthday"),
        @Result(column = "fk_dept_id",property = "dept"
        ,one = @One(select = "com.yingside.dao.DeptMapper.getById",
                fetchType = FetchType.LAZY))
})
List<Employee> getAll();

  (2)、@Delete、@Param、@ResultMap

/**
 * 根据id查询员工
 * @param empId 员工主键id
 * @return 员工对象
 */
@Select("select * from t_emp where emp_id=#{empId}")
@ResultMap(value="empMap")
Employee getById(@Param("empId") Integer empId);

  (3)、@Insert、@SelectKey

/**
 * 插入新员工信息,并将最新id放入到员工对象在
 * @param record 新员工对象
 * @return 插入成功 1 失败 0
 */
@Insert("insert into t_emp (emp_id, emp_name, emp_tel, " +
        "      emp_education, emp_birthday, fk_dept_id" +
        "      )" +
        "    values (#{empId}, #{empName}, #{empTel}, " +
        "      #{empEducation}, #{empBirthday}, #{fkDeptId}" +
        "      )")
@SelectKey(before = false,keyColumn = "emp_id",keyProperty = "empId",
        statement = "select last_insert_id()",resultType = Integer.class)
int insert(Employee record);

  (4)、@Delete、@Param

/**
 * 根据员工id删除员工
 * @param empId 员工主键id
 * @return 删除成功 1 失败 0
 */
@Delete("delete from t_emp where emp_id=#{empId}")
int deleteByPrimaryKey(@Param("empId") Integer empId);

  (5)、@Update

/**
 * 更新员工信息
 * @param record 员工对象
 * @return 更新成功 1 失败 0
 */
@Update("update t_emp" +
        "    set emp_name = #{empName,jdbcType=VARCHAR}," +
        "      emp_tel = #{empTel,jdbcType=VARCHAR}," +
        "      emp_education = #{empEducation,jdbcType=VARCHAR}," +
        "      emp_birthday = #{empBirthday,jdbcType=DATE}," +
        "      fk_dept_id = #{fkDeptId,jdbcType=INTEGER}" +
        "    where emp_id = #{empId,jdbcType=INTEGER}")
int update(Employee record);

  当然最后别忘记了,写完这些之后,在核心配置文件中要把映射文件给加上,之前使用的时候,找寻的是resouce xml的资源路径,现在由于使用了注解,就只有接口文件了,所有配置相应的要做一个简单的修改

<mappers>
    <mapper class="com.yingside.dao.EmployeeMapper" />
</mappers>

二、Spring注解

  Spring — 分层解决业务逻辑层与其他各层之间松耦合问题的javaSE/EE的一站式开源框架。

2.1 @Component [/kəmˈpəʊnənt/]【组件,组成部分,成分】

  创建对象的注解,使用时只需将该注解标注在相应类上即可。

  没有@Component之前

public class  Student{
}

  Spring配置文件

<bean id=”student” class=”com.wangxing.spring.bean.Student”></bean>

  有@Component之后

@Component --- 使用默认的对象名称【类名,首字母小写】
public class  Student{
}
@Component(“stu”)---使用指定的对象名称
public class  Student{
}

2.2 @Repository [/rɪˈpɒzətri/]【资源库】标注数据访问接口实现类,其功能与 @Component 相同。

2.3 @Service[ /ˈsɜːvɪs/]【服务】标注业务访问接口实现类,其功能与 @Component 相同。

2.4 @Controller[/kənˈtrəʊlər/]【控制器】标注控制层实现类,其功能与 @Component 相同。

2.5 @Autowired[ /ˈɔːtəʊˈwaɪəd/]【自动装配】 完成 Bean 的自动注入工作。默认按照bytype

2.6 @Resource[/rɪˈsɔːs; rɪˈzɔːs/] 【资源类型】完成 Bean 的自动注入工作。默认按照byname

  @autowired和@resource注解的区别?

  (1)@Autowired与@Resource都可以用来装配bean,都可以写在字段或setter方法上
  (2)@Autowired默认按类型装配,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。如果想使用名称装配可以结合@Qualifier注解进行使用。
  (3)@Resource,默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行名称查找。如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
  推荐使用@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与Spring的耦合。

2.7 @Qualifier [/ˈkwɒlɪfaɪər/]【限定符 限定词 修饰符】与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,Bean 的实例名称由 @Qualifier 注解的参数指定。

public interfase  UserDao{
}
@Repository(“studentUsetDao”)
public class StudentUserDao implements UserDao{
}
@Repository(“personUsetDao”)
public class PersonUserDao implements UserDao{
}
//业务类
public  class  UserServiceImple{
@Autowired
@Qualifier(“personUsetDao”)
  private UserDao  userDao;
}

2.8@Aspect开启切面

2.9 @Before前置通知

2.10 @AfterReturning后置通知

2.11 @AfterThrowing异常通知

2.12 @Around环绕通知

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.1.5.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-support</artifactId>
  <version>5.1.5.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aspects</artifactId>
  <version>5.1.5.RELEASE</version>
</dependency>

package com.wangxing.spring.service;

import org.springframework.stereotype.Component;

//业务类
@Component("personService")
public class PersonService {
    public  void insertPerson(){
        System.out.println("添加个人信息的业务方法");
    }
    public  void updatePerson(){
        System.out.println("修改个人信息的业务方法");
        //int a=10/0;
    }
    public  void deletePerson(){
        System.out.println("删除个人信息的业务方法");
    }
    public  void selectPerson(){
        System.out.println("查询个人信息的业务方法");
    }
}

package com.wangxing.spring.service;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

//增强类
//@Aspect,表示这个系统需求类是一个切面
@Component
@Aspect
public class MyAvice {
    //系统需求功能实现方法
    //@Before("execution(* com.wangxing.spring.service.PersonService.selectPerson())")
    //@AfterReturning("execution(* com.wangxing.spring.service.PersonService.deletePerson())")
    //@AfterThrowing("execution(* com.wangxing.spring.service.PersonService.updatePerson())")
    @After("execution(* com.wangxing.spring.service.PersonService.updatePerson())")
    public  void  saveLog(){
        System.out.println("记录执行日志");
    }
    //执行环绕通知的系统需求功能实现方法
    @Around("execution(* com.wangxing.spring.service.PersonService.insertPerson())")
    public void testAround(ProceedingJoinPoint joinPoint) throws Throwable{
        saveLog();
        joinPoint.proceed(); // 调用真正的业务方法
        saveLog();
    }
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--使用context命名空间,通知spring扫描指定目录,进行注解的解析-->
    <context:component-scan base-package="com.wangxing.spring.service"></context:component-scan>
    <!--开启aop注解-->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>

2.13 @Transactional [ /trænˈzækʃənəl/]【事务处理】开启事务

package com.wangxing.spring.service;

import com.wangxing.spring.mapper.TransferMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.Map;

@Service("transferService")
@Transactional
public class TransferService {
    @Autowired
    private TransferMapper transferMapper;
    /**
     * 转账方法
     * @throws Exception
     */
    public void transfer()throws Exception{
        Map<String,Object> liuneng=new HashMap<String,Object>();
        liuneng.put("username","刘能");
        liuneng.put("number",1000);
        transferMapper.lessMoney(liuneng);
        int a=10/0;
        Map<String,Object> zhaosi=new HashMap<String,Object>();
        zhaosi.put("username","赵四");
        zhaosi.put("number",1000);
        transferMapper.addMoney(zhaosi);
    }
}

三、SpringMVC

  SpringMVC — SpringMVC是web层的mvc开发框架,属于Spring框架的WEB模块中的一个部分。

3.1 @RequestMapping设置控制器类/请求处理方法的访问路径

  @RequestMapping的常用的属性
  value表示设置访问路径[可以省略]
  method–限制请求的访问方式【GET、POST…】

package com.wangxing.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController {
    @RequestMapping("/test1.do")
    public ModelAndView  testRequest(){
        ModelAndView  mav=new ModelAndView();
        mav.addObject("info","hello,网星软件");
        mav.setViewName("test.jsp");
        return  mav;
    }
}

3.2@PathVariable 定义在方法上获取请求url路径上的参数数据

@RequestMapping(value = "/get1/{username}/{password}",method = RequestMethod.GET)
public ModelAndView  getReqParam1(@PathVariable("username")String name,
@PathVariable("password")String pass){
    ModelAndView  mav=new ModelAndView();
    mav.addObject("username",name);
    mav.addObject("password",pass);
    mav.setViewName("test.jsp");
    return  mav;
}

3.3 @RequestParam 定义在方法上,获取请求中通过key=value方式传递的参数数据

@RequestMapping(value = "/get2",method = RequestMethod.GET)
public ModelAndView  getReqParam2(@RequestParam("username")String name, @RequestParam("password")String pass){
    ModelAndView  mav=new ModelAndView();
    mav.addObject("username",name);
    mav.addObject("password",pass);
    mav.setViewName("test.jsp");
    return  mav;
}

3.4 @DateTimeFormat时间格式化

@DateTimeFormat(pattern="yyyy-MM-dd")
    private Date day;

3.5 @RequestBody注解接收来自请求体中的参数。

package com.wangxing.springmvc.controller;

import com.wangxing.springmvc.bean.UserBean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {
    @RequestMapping(value = "/test1.do")
    @ResponseBody
    public UserBean   testRequest(){
        UserBean user1=new UserBean();
        user1.setUsername("zhangsan");
    	user1.setPassword("000000");
    	user1.setMyage(23);
    	user1.setMyaddress("西安");
        return user1;
    }

3.6 @ResponseBody的作用其实是将java对象转为json格式的数据

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值