RedirectAttributes的用途:
RedirectAttributes是一个接口,用于重定向之间传递数据,它继承了Model既对Model
做了扩展,扩展了addFlashAttribute()…等方法,addFlashAttribute()的值暂时会在request中;
@ResponseBody的用途:
@ResponseBody作用在方法上,用于将Controller方法返回的集合,对象在响应的时候转换成json格式;
@RequestBody的用途:
@RequestBody作用在参数上,用于从请求体中获取json并转换成对象;
@RequestMapping(path = "/input.do",produces = "text/html;charset=utf-8")
//@RsponseBody:转换成json格式
@ResponseBody
//@RequestBody:从请求体中获取json并转换成book对象
public String excuteBookList(@RequestBody Book book) {
System.out.println(book.toString());
return book.toString();
}
基于Servlet3.0标准规范的Multipart文件上传和下载的开发步骤:
(一) 文件上传:
1.在Tomcat启动时,在核心控制器配置类中加载文件上传配置参数,其中会设置一个暂时的文件保存路径
@Override
protected void customizeRegistration(Dynamic registration) {
MultipartConfigElement configElement = new MultipartConfigElement("d:/tmp/temp", 1024*1024*2, 1024*1024*2, 2);
registration.setMultipartConfig(configElement);
}
2.在springmvc配置类中注入视图解析器MultipartResolver并加载
@Bean
public MultipartResolver multipartResolver() {
return new StandardServletMultipartResolver();
}
3.上传的文件被视图解析器处理成MultipartFile对象并注入,调用MultipartFile对象的transferTo()方法将文件转存到本地
@RequestMapping(path = "/upload.do",produces = "text/html;charset=utf-8")
public void fileUpload(String title,String desc,@RequestPart MultipartFile myfile) {
System.out.println(title);
System.out.println(desc);
System.out.println(myfile.getName());
System.out.println(myfile.getOriginalFilename());
System.out.println(myfile.getContentType());
System.out.println(myfile.getSize());
try {
myfile.transferTo(new File("d:/tmp/temp/test/"+myfile.getOriginalFilename()));
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
(二) 文件下载:
1.用ResponseEntity<byte[]>封装一个字节数组,准备需要下载的文件路径
2.准备需要下载的文件对象,将文件对象转换为字节流
3.读取文件中的字节数据并准备一个字节数组作为储存空间,将字节流写入储存空间中
4.设置响应头
5.返回响应实体对象(字节数组,响应头,状态码)
@RequestMapping("/down/{fname}")
//代表返回一个字节数组用ResponseEntity封装
public ResponseEntity<byte[]> downLoad(@PathVariable("fname") String fileName){
//需要下载的文件路径
String path = "D:\\tmp\\img\\"+fileName;
//下载的文件对象
File file = new File(path);
//读取文件中的字节数据
byte[] buff = null;
try (FileInputStream fis = new FileInputStream(file)) {
//通过下载文件的大小设置一个存储空间
buff = new byte[fis.available()];
fis.read(buff);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//设置响应头
HttpHeaders headers = new HttpHeaders();
headers.setContentDispositionFormData("attachment", fileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//返回响应实体对象包含(字节数组,响应头,状态码,ok表示200)
return new ResponseEntity<byte[]>(buff,headers,HttpStatus.OK);
Mybatis一级缓存和二级缓存的区别:
一级缓存存在于同一个SqlSeesion生命周期中,在第一次查找时会生成键值,在后续做相同
查找时会直接从一级缓存中获取数据
二级缓存存在于同一个SqlSessionFactory中,二级缓存用在查询频率很高的场合
Mybatis的优势:
Mybatis相对与JDBC来说解决了JDBC代码的冗余,并且Mybatis自带连接池,效率更高,Mybatis开启二级缓存后在查询的时候不用像JDBC一样去遍历结果集,在做相同查询的时候Mybatis的效率更高;对于SQL语句,Mybatis使用SQL映射,支持实体类和数据库字段的映射,并且Mybatis更加便于管理SQL语句