欢乐的铁链 · 页面未找到 - 七牛云· 1 年前 · |
空虚的西瓜 · async 函数的含义和用法 - 阮一峰的网络日志· 1 年前 · |
个性的大白菜 · python中predict函数_sklea ...· 1 年前 · |
温柔的黄瓜 · 在VBA中如何判定单元格或区是否有边框_百度知道· 1 年前 · |
深沉的伏特加 · How to Fix Synapse ...· 1 年前 · |
@ResponseBody详解 @RequestBody的使用
application/x-www-form-urlencoded是以表格的形式请求,而application/json则将数据序列化后才进行传递,如果使用了@RequestParam会在Content里面查找对应的数据,结果因为传递的数据已经被序列化所以不能找到,所以当要使用@RequestParam注解时候应当使用application/x-www-form-urlencoded,而如果想要使用application/json则应当使用@RequestBody获取被序列化的参数
@RequestParam
① 支持POST和GET请求。 ② 只支持Content-Type:为application/x-www-form-urlencoded编码的内容。Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)
@RequestBody
① 不支持GET请求。 ② 必须要在请求头中申明content-Type(如application/json)springMvc通过HandlerAdapter配置的HttpMessageConverters解析httpEntity的数据,并绑定到相应的bean上。
作用:用注解来简化xml配置的时候(比如Mybatis的Mapper.xml中的sql参数引入),@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中(一般通过#{}的方式,${}会有sql注入的问题)。
当你使用了使用@Param注解来声明参数时,如果使用 #{} 或 {} 的方式都可以,当你不使用@Param注解来声明参数时,必须使用使用 #{}方式。如果使用 {} 的方式,会报错。
当参数传递map时,也可以直接使用${}取值
不使用@Param注解时,最好传递 Javabean。在SQL语句里就可以直接引用JavaBean的属性,而且只能引用JavaBean存在的属性。
Mapper接口方法:
public int getUsersDetail(User user);
对应Sql Mapper.xml文件:
<!--这里直接引用对象属性即可,不需要对象.属性的方式-->
<select id="getUserDetail" statementType="CALLABLE" resultMap="baseMap">
Exec WebApi_Get_CustomerList #{userid}
</select>
当参数传递的是javabean时,又存在@param注解时,必须使用对象.属性名的方式:
public int getUsersDetail(@param("u")User user);
对应Sql Mapper.xml文件:
<!--这里直接引用对象属性即可,不需要对象.属性的方式-->
<select id="getUserDetail" statementType="CALLABLE" resultMap="baseMap">
Exec WebApi_Get_CustomerList #{u.userid}
</select>
别名效果 value属性
防止字段持久化 exist属性
使用exist属性可以控制类中属性在表中是都一定对应,如果有不存在于数据表的字段,建议都设成fasle
总结:
手写的sql都不能自动生成别名
Mybatis Plus自动生成的sql可以起别名
//新增课程
@PostMapping("/addCourse")
public String addCourse(Course course)
System.out.println(course);
return "error";
}
@Data
@EqualsAndHashCode(callSuper = false)
public class Course extends Model<Course> {
private static final long serialVersionUID = 1L;
@TableField("courseName")
private String coursename;
@TableField("courseCoverPath")
private String coursecoverpath;
@TableField("courseVideoFilePath")
private String coursevideofilepath;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("courseVideotype")
private Integer coursevideotype;
@TableField("courseVideoTime")
private Integer coursevideotime;
@TableField("type")
private String type;
@Override
protected Serializable pkVal() {
return this.id;
如果请求参数名,在pojo对象中找到了相同的属性名,则进行赋值,否则为null@Value和@Bean注解的执行顺序问题
@Value和@Bean注解不在同一文件下时,@Value先执行
在同一文件下时,@Bean先执行
@PropertySource和@Value一起使用,注入properties文件
- 文件路径
- 文件内容
- 新建config文件
高级用法
使用@Value和@PropertySource注入外部资源
@Configuration
@ComponentScan("com.example.value.service") //扫包
@PropertySource("classpath:test.properties") //注意文件格式的指定
public class ElConfig {
@Value("I Love You!") //1 注入普通字符串
private String normal;
@Value("#{systemProperties['os.name']}") //2 注入操作系统属性
private String osName;
@Value("#{ T(java.lang.Math).random() * 100.0 }") //3 注入表达式结果
private double randomNumber;
@Value("#{demoService.another}") //4 注入其他Bean的属性
private String fromAnother;
@Value("classpath:test.txt") //5 注入了文件资源
private Resource testFile;
@Value("http://www.baidu.com") //6 注入网页资源
private Resource testUrl;
@Value("${book.name}") //7 注入classpath:test.properties中资源项,注意美元符号$
private String bookName;
@Autowired
private Environment environment; //7 属性也可以从environment中获取。
@Bean //7
public static PropertySourcesPlaceholderConfigurer propertyConfigure() {
return new PropertySourcesPlaceholderConfigurer();
public void outputResource() {
try {
System.out.println(normal);
System.out.println(osName);
System.out.println(randomNumber);
System.out.println(fromAnother);
System.out.println(IOUtils.toString(testFile.getInputStream()));
System.out.println(IOUtils.toString(testUrl.getInputStream()));
System.out.println(bookName);
System.out.println(environment.getProperty("book.author"));
System.out.println(environment.getProperty("book.school"));
} catch (Exception e) {
e.printStackTrace();
}
注意:注入配置配件使用@PropertySource指定文件地址,若使用@Value注入,则要配置一个PropertySourcePlaceholderConfigure的Bean
@ImportResource()注解的使用
@ImportResource注解用于导入Spring的配置文件,让配置文件里面的内容生效;(就是以前写的springmvc.xml、applicationContext.xml)
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上。
注意!这个注解是放在主入口函数的类上,而不是测试类上
该注解标注在主配置类上,用于加载我们自己手写的spring相关的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dog1" class="com.yangzhenxu.firstspringboot.bean.Dog">
<property name="name" value="zhangxue"/>
<property name="age" value="27"/>
</bean>
</beans>
必须是spring格式的配置文件,否则也会报错
加载.properties配置文件的三种方式
Mybatis-Plus事务管理
本文参与
腾讯云自媒体分享计划
,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:
https://blog.csdn.net/m0_53157173?spm=1011.2124.3001.5343
复制
如有侵权,请联系
cloudcommunity@tencent.com
删除。
相关文章
欢乐的铁链 · 页面未找到 - 七牛云 1 年前 |
空虚的西瓜 · async 函数的含义和用法 - 阮一峰的网络日志 1 年前 |
温柔的黄瓜 · 在VBA中如何判定单元格或区是否有边框_百度知道 1 年前 |
登录 后参与评论
0 条评论