目录
springmvc传参常用注解
1.@Controller
2.@RequestMapping
3.@ResponseBody
4.@RestController
5.@RequestBody
6.@RequestParam
6. @PathVaribale注解?
Spring针对Bean管理中创建对象提供的注解
@Repository
@Configuration注解
?@ComponentScan注解的作用
用注解的方实现属性注入
@Value
?编辑@Autowired
@Qualifier
@Resource
@Mapper注解:
@MapperScan
?@Data
@ConfigurationProperties?注解
dao层中的注解
@Param注解
?实体类中的注解
@TableName
@TableId(type = IdType.AUTO)
@TableField(exist = false)?
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") 单个字段出参格式化
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")单个字段入参格式化
springmvc传参常用注解
1.@Controller
用在controller层,常用在类上,在spring容器中创建该类的实例。将@Controller注解的类注入Spring容器中,只是该类成为处理器的第一步。
@Controller
public class TestController {
}
2.@RequestMapping
里面写入请求的路径,假如前端有个请求url为:‘test/index’,那在controller层需要写成如下形式才能接受到请求:
@Controller
@RequestMapping("test")
public class TestController {
@RequestMapping(value = "/index", method = {RequestMethod.POST,RequestMethod.GET})
public void index(){
System.out.println("测试");
}
}
requestmapping里可以接受任何类型请求,包括get和post,如果想限制,可以在requesmapping内method参数内写入请求类型。
3.@ResponseBody
在前端通过请求路径请求后,如果不加入这个注解,返回前端的是一个前端页面,加上这个注解是为了传给前端一个json格式的数据,方便前端做处理。
@RequestMapping(value = "/json", method = {RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public void json(){
System.out.println("返回json格式数据");
}
4.@RestController
这个注解可以代替@Controller注解和@ReponseBody两个注解,它一个注解的作用就可以完成这两个注解的作用,如下代码就可以返回一个json格式的数据:
@RestController
@RequestMapping("role")
public class RoleController {
@Autowired
private RoleService roleService;
/**
* 用户 - 角色分配
* 1、回显当前用户已经拥有的角色信息
* 2、修改,提交
*/
@RequestMapping("listRoleByUserId")
public WebResultJson listRoleByUserId(Long userId) {
List<Role> roleList = roleService.listRoleByUserId(userId);
return WebResultJson.ok(roleList);
}
}
5.@RequestBody
这个注解是放在方法参数里的,用来接收post请求的数据,我们可以把这些数据封装在类里,然后用@RequestBody做标记,让前端的数据放在这个实体类里,具体写法如下:
@RequestMapping(value = "/updatestudnet", method = RequestMethod.POST)
public boolean updatestudnet(@RequestBody User user) {
return studentService.updateById(user);
}
6.@RequestParam
这个注解是用在方法参数里的,用来接收单个前端的参数名可能和后端参数内参数名不一致导致传参错误的,假如前端传来的一个参数是:test:1, 而后端参数名那里是demo,想要一一对应就需要用这个注解,代码如下:
@RequestMapping(value = "/qq", method = {RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public void demo(@RequestParam("demo") Long test){
System.out.println(test);
}
6. @PathVaribale注解?
这个注解是用在参数上的,前端路径是“/test/cs/{id}”时,id就是占位符,我们可以在方法参数位置获取url上传来的值,代码如下:
@RequestMapping(value = "/cs/{id}", method = {RequestMethod.POST,RequestMethod.GET})
@ResponseBody
public void cs(@PathVariable("id") Long id){
System.out.println(id);
}
Spring针对Bean管理中创建对象提供的注解
@Component 普通的类 @Controller 表现层? ?用在controller层 @Service 业务层? ? 用在service层 @Repository 持久层 对Dao实现类进行注解 (特殊的@Component) *上边四个功能一样,都可以用来创建bean实例
@Repository
可有可无,可以消去依赖注入的报错信息。(在service层里的注入经常会有报红,但是运行不会报错就是这个原因,用这个注解会消除报红) 该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 ?Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。
使用前:
?使用@Repository注解:
@Repository
public interface SignInMapper extends BaseMapper<SignIn> {
List<SignIn> checkSignIn(Long subjectId);
List<SignIn> checkSignInByStu(Long studnetId);
}
报错消失。?
@Configuration注解
用在配置类上,例如启动mybatisplus
@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义,初始化Spring容器。
@Configuration
public class MybatisPlusConfig {
// 最新版
@Bean // <bean id=""/> 也是声明是Spring 的一个Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
?@ComponentScan注解的作用
@ComponentScan注解一般和@Configuration注解一起使用,主要的作用就是定义包扫描的规则,然后根据定义的规则找出哪些需类需要自动装配到spring的bean容器中,然后交由spring进行统一管理。
说明:针对标注了@Controller、@Service、@Repository、@Component?的类都可以被spring扫描到。
一般需要注入时才会使用,例子如下:
@Configuration
@ComponentScan("com.example.javen.entity")
public class ScanConfig {
}
用注解的方实现属性注入
@Value
用于注入普通类型(String,int,double等类型)
例子如下:
@Component("test")
@Data
public class Test {
@Value("lhs")
private String name;
public void test(){
System.out.println(this.name);
}
public static void main(String[] args) {
// 创建工厂,加载配置类
ApplicationContext ac = new AnnotationConfigApplicationContext(ScanConfig.class);
Test test =(Test) ac.getBean("test");
test.test();
}
}
通过@Value进行注入,但是要想注入需要通过spring扫描后,才能进行注入
输出结果如下:
@Autowired
默认按类型进行自动装配(引用类型)
@Qualifier
不能单独使用必须和@Autowired一起使用,强制使用名称注入,即类里面@Component注解里面的值是不是一一对应的,对应就可以进行自动装配
@Resource
Java提供的注解,也被支持。使用name属性,按名称注入,和@Autowired不同的就是,如果不写name值是按类型进行装配的,如果有就会按@Component注解里面的值进行装配,有值但是不互相匹配就会报错。
@Mapper注解:
作用:在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类 添加位置:接口类上面,例子如下:
@Mapper
public interface LoginLogMapper extends BaseMapper<LoginLog> {
}
@MapperScan
因为每个dao层的接口都要写@Mapper注解,所以太麻烦。
@MapperScan 可以替代 @Mapper,配置包路径,扫描多个。可以在启动类上添加该注解,自动扫描包路径下的所有接口。使用这种方法,接口上不用添加任何注解。
可以写在启动类上,例子如下:
@MapperScan("com.example.javen.mapper")
@SpringBootApplication
public class ShixunApplication {
public static void main(String[] args) {
SpringApplication.run(ShixunApplication.class, args);
}
}
?@Data
lombok插件注解,自动为实体类创建get set和tostring方法,例子如下:
@Component()
@Data
public class Test {
@Value("lhs")
private String name;
public void test(){
System.out.println(this.name);
}
public static void main(String[] args) {
// 创建工厂,加载配置类
ApplicationContext ac = new AnnotationConfigApplicationContext(ScanConfig.class);
Test test =(Test) ac.getBean("test");
test.test();
test.setName("修改");
System.out.println(test.toString());
}
}
运行结果如下:
@ConfigurationProperties?注解
功能:@ConfigurationProperties读取默认配置文件中定义的属性,但是可以指定属性前缀。 使用方式:@ConfigurationProperties(prefix = "前缀名称") 该注解加载成员变量上 举例:
@Component
@ConfigurationProperties(prefix = "pagehelper")
@Data
public class XmlMsgConfig {
//yaml文件中对应的数据库方言
private String helperDialect;
private Boolean reasonable;
}
读取的配置文件yaml如下:
pagehelper:
helperDialect: mysql # 数据库方言
reasonable: true # 修改默认值
测试接口:
@RestController
@RequestMapping("hello")
public class HelloWordController {
@Value("${pagehelper.helperDialect}")
private String helperDialect;
@Autowired
private XmlMsgConfig xmlMsgConfig;
@RequestMapping("index")
public void index(){
System.out.println("value注入:" + helperDialect);
System.out.println("ConfigurationProperties注解读取配置文件:" + xmlMsgConfig.getHelperDialect() + xmlMsgConfig.getReasonable());
}
}
?结果如下:
dao层中的注解
@Param注解
value参数匹配(推荐使用),dao层内的参数名写在param注解里,在xml文件中是相互对应的,例子如下:
Set<String> listUrlByUserId(@Param("userId") Long id);
<select id="listUrlByUserId" resultType="java.lang.String">
select
url
from
menu m
inner join ref_role_menu rrm on m.id = rrm.menu_id
inner join ref_user_role rur on rur.role_id = rrm.role_id
where
rur.user_id = #{userId}
</select>
?实体类中的注解
@TableName
注解?来将指定的数据库表和 JavaBean 进?映射,例子如下:
@Data
@TableName("user")
public class User {}
和数据库中的user表互相映射。
@TableId(type = IdType.AUTO)
@TableId(type = IdType.AUTO)
private Long id;//作用是主键自增,数据库主键也需要设为自增
@TableField(exist = false)?
@TableField(exist = false)
private Set<String> menuUrlList;
可以解决表中表的问题,加载bean属性上,表示当前属性不是数据库的字段,但在项目中使用时,这样可以用来把一个数据表当作一个字段来输出,用来实现表中表数据输出。这样设置在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错?
|