框架 总结吧,理解不是太深
Posted wangchengxiang66
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了框架 总结吧,理解不是太深相关的知识,希望对你有一定的参考价值。
1,了解orm-mapping框架
准备表,对象,jar包。配置文件。hibernate操作基本步骤。使用hibernate完成增删改查。
2.什么是框架
(1)是一系列jar包,其本质是对jdk功能的扩展
(2)框架是一组程序的集合,包含了一系列最佳实战,作用是解决某一领域问题
3.完善的持久层问题。持久层封装数据访问的细节,为业务逻辑层提供了面向对象的api、
1.代码重用性高,可以完成所有的数据访问操作
2.可以支持多种数据库,比如在mysql和oracle之间任意切换数据库
3.具有相对独立性,当持久层变化时,不会影响上一层实现
4.ORM--对象关系映射
是一种为了解决面向对象与关系数据库存在的不匹配现象。ORM是通过使用描述对象和数据库之间映射的元数据,
将java程序中的对象自动持久化到关系数据库中。
避免直接使用SQL语句对关系型数据库中的数据进行操作. 减少代码编写量,提高产品质量
ORM--实现思想
将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。
因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。
ORM--采用元数据描述对象-关系映射细节
元数据通常采用 XML 格式,并且存放在专门的对象-关系映射文件中。
目前流行的ORM框架
1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现.
2.Hibernate:目前最流行的ORM框架.设计灵巧,性能优秀,文档丰富.
3.MyBatis:本是apache的一个开源项目iBatis,提供的持久层框架包括SQL Maps和DAO,允许开发人员直接编写SQL.
5. hibernate与JPA区别?---是JPA规范的一个实现
6. Query和Criteria都表示查询对象:
Query不仅可以使用QBC,QBE,HQL,原生SQL查询数据,而且支持绑定参数,限制查询记录,批处理等操作.
Criteria与Query接口非常相似,运行创建并执行面向对象方式的查询.
7.一级,二级缓存
use_second_level_cache true 配置二级缓存供应商,运行时,一级关闭,实行二级,不必sql语句查找
二级缓存缓存供应商|
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
8.get和load区别
使用get()和普通的单条查询并没有多大的区别,并且返回的对象也是实际的对象。
使用load()的时候返回的是一个代理对象,因为这个时候还没有进行查询,所以我们并没有办法确定要查询的对象到底存在不存在,
所以使用load()查询的返回值是永远不会为空的
**即get()和load()都会使用缓存,都是首先从一级缓存Session中查找,当找不到的时候再去二级缓存中查找,
当查询不到的时候get()返回的是null,而load()则返回代理对象。
9.自动生成数据库表:
根据对象和映射文件,在创建SessionFactory的时候,可以生成对应的数据表:
hibernate.hbm2ddl.auto=create-drop:删除并创建表,最后关闭SessionFactory时,删除数据库表.
hibernate.hbm2ddl.auto=create:删除并创建表
hibernate.hbm2ddl.auto=update:更新表结构:
hibernate.hbm2ddl.auto=validate:验证表结构:如果表结构和映射文件不匹配,hibernate启动失败
1,validate:
检查当前hibernate管理的对象对应数据库的表结构是否匹配,如果有任何不匹配,直接报错,hibernate启动失败;
2,在生产环境中一般使用vaildate,保证当前数据库表版本和hibernate当前对象版本匹配;
10.一对多映射总结:
分析SQL:
get方法:
1:通过one方获取many方,使用了延迟加载.
2:one方的many方的属性是一个集合,必须使用接口来声明.
3:不能通过if-null来判断one方是否有many方,只能通过size方法来判断.
4:必须在session关闭之前使用集合对象,否则报错:no session.
save方法:
由One方来维护外键关系,所以得发额外的两条SQL:
在保存对象的时候,因为对象的关系由one方维护,所以,在保存many方的时候,不会去修改外键的值;
只能在one方保存完成之后,由one方发送额外的update语句去修改many方的外键的值;
11.多对一
分析get方法:
1:many方获取one方的时候,使用了延迟加载,生成了代理对象
2:可以使用if-null方式来判断,是否存在one方.
3:得到的one方,必须在session关闭之前实例化(获取非OID属性),否则报错:no session.
分析save方法:
先保存many方再保存one方,会产生额外的SQL,这些SQL是由于持久化对象(many)的脏数据造成的;
12.注解
@Column :表示映射属性,和表的字段进行关联
@ManyToOne:表示映射关系中的多对一
@JoinColumn:表示外键映射属性,和表的外键字段进行关联
@OneToMany:表示映射关系中的一对多,一对多时,外键的维护需要翻转交给多的一方进行维护,
需要配置反转属性mappedBy,属性取值为多的一方的映射属性名称。相当于xml配置文件中的Inverse="true"。
@OrderBy:表示排序字段
一对多映射中使用:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy = "表名")
@OrderBy(clause = "cityId asc")
public Set<City> getCities() {
return this.cities;
}
13。Maven*********************************************
-----构建,编译代码,运行测试,打包,部署应用,运行服务器。
依赖,项目依赖大量的第三方包,第三方包又依赖另外的包,对依赖包管理非常麻烦
14.Spring-Mvc************************************
-----模型model(javabean), 视图view(jsp/img) 控制器Controller(Action/servlet)
目前web应用中,99%的项目都会使用mvc模式开发.
15,Spring-Mvc简介:
Spring MVC是基于MVC模式的一个框架,它解决WEB开发中常见的问题(参数接收、文件上传、表单验证、国际化、等等),
而且使用简单,与spring无缝集成。
16.核心包:
commons.logging-1.1.1.jar
spring-beans-4.3.5.RELEASE.jar
spring-context-----------.RELEASE.jar
spring-core-4.3.5.RELEASE.jar
spring-expression-4.3.5.RELEASE.jar
spring-web-4.3.5.RELEASE.jar spring 对web项目的支持。
spring-webmvc-4.3.5.RELEASE.jar spring mvc核心包
17. 层数:
j2ee应用程序分为三层
表现层(控制层) @Controller @Scope @Nullable
业务逻辑层(服务Service) @Service
数据持久层(DAO) @Resposotory
18.中文乱码处理
以前编码我们自己写,request.setCharacterEncoding("utf-8");
既然是重复的代码,更倾向于抽取抽取,springMVC已经做了这样的工作了.
在web.xml中配置符编码过滤器
<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
19.传值方式:
//return "userList"; //默认情况下通过视图转换器转发到指定的jsp,
无法通过重定向的方式访问web-inf下的jsp页面
//return "forward:/userList.jsp"; //转发到指定的jsp
return "redirect:/userList.jsp"; //重定向到指定的jsp
//return "redirect:/list"; //重定向到指定的action
//return "forward:/list"; //转发到指定的action
20.配置文件上传 xml中
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为1MB -->
<property name="maxUploadSize">
<value>1048576</value>
</property>
</bean>
导入包:com.springsource.org.apache.commons.fileupload-1.2.0.jar
com.springsource.org.apache.commons.io-1.4.0.jar
表单:<form action="/upload" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
Controller:@RequestMapping("/upload")
public ModelAndView upload(MultipartFile file){
System.out.println(file.getContentType());//获取到文件类型
//file.getInputStream();//获取到文件流
System.out.println(file.getName());//上传过来的文件名
System.out.println(file.getOriginalFilename());//文件原始名称
System.out.println(file.getSize());//文件大小
//需要获取到文件上传的那个文件
FileOutputStream os = null;
try{
//需要将文件保存到服务器的某个目录下
//名字需要通过UUID来重新命名
String lastName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
String startName = UUID.randomUUID().toString();
String fileName = startName+lastName;
System.out.println(fileName);
os = new FileOutputStream(new File("D:/file",fileName));
InputStream is = file.getInputStream();
IOUtils.copy(is, os);
}catch(Exception e){
e.printStackTrace();
}finally{
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ModelAndView mv = new ModelAndView("upload.jsp");
return mv;
}
文件下载
文件下载,SpringMVC并没有做过多的封装,还是使用原来的下载方式
@RequestMapping(value="/download")
//如果你不想使用springmvc默认的ModelAndView的方式,使用@ResponseBody注解
@ResponseBody//该方法响应内容全都有response控制,(springmvc不会做任务事情)
public void download(HttpServletResponse response) throws Exception{
response.setHeader("Content-Disposition", "attachment;filename=a.jpg");
OutputStream out = response.getOutputStream();
FileInputStream in= new FileInputStream("D:\1.jpg");
IOUtils.copy(input, out);
in.close();
out.close();
}
以上是关于框架 总结吧,理解不是太深的主要内容,如果未能解决你的问题,请参考以下文章