A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一.框架概述
框架(framework)是一个基本概念上的结构,用于去解决或者处理复杂的问题
二,开发中常用的框架
SSH   (SSM  SSI)
SSH  struts2  spring  hibernate
SSM(SSI) springmvc spring mybatis(ibatis)
SSH 它是企业开发中比较主流的一套架构。
SSH框架在开发中所处的位置:
  struts.xml的配置
        action配置
1.                name属性  作用:定义一个包的名称,它必须唯一。
2.namespace属性 作用:主要是与action标签的name属性联合使用来确定一个action        的访问路径
3.extends属性 作用:指定继承自哪个包。一般值是strtus-default
                strtus-default包是在strtus-default.xml文件中声明的。
abstract属性 它代表当前包是一个抽象的,主要是用于被继承
action配置
name属性 作用:主要是与package的namespace联合使用来确定一个action的访问路       
1.class属性  作用:用于指示当前的action类
2.method属性  作用:用于指示当前的action类中的哪个方法执行
result配置
它主要是用于指示结果视图
1.name属性 作用是与action类的method方法的返回值进行匹配,来确定跳转路径
2.type属性 作用是用于指定跳转方式
OGNL表达式
OGNL是Object-Graph Navigation Language(对象图导航语言)的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性
Strtus2框架中如何使用ognl表达式
struts2框架中我们使用ognl表达式的作用是从valueStack中获取数据。
我们在struts2框架中可以使用ognl+valueStack达到在页面(jsp)上来获取相关的数据。
要想在jsp页面上使用ognl表达式,就需要结合struts2框架的标签
<s:property value=”表达式”>来使用
valueStack介绍
我们使用valueStack的主要目的是为我将我们action中产生的数据携带到页面上,也就是说valueStack它就是一个容器
ActionContext是什么
ActionContext它是action上下文,strtus2框架它使用actionContext来保存Action在执行过程中所需要的一些对象
action
        struts2引入步骤
        a)导入jar
        b)在web.xml配置过滤器(非常重要/复制粘贴)
        c)配置struts.xml(struts2核心配置文件)
        d)在action中写逻辑
        jsp 和StrutsAction的关系
        jsp:一个连接  url
       
        StrutsAction:定义一个方法
约束
        dtd约束
        schema约束
       
        区别
                1. .dtd /.xsd
                2. schema约束支持命名空间(名称空间)
5.流程:(面试)               
        1.前端页面发起请求
        2.struts2的过滤器
                一堆拦截器
        3.struts.xml---->找到类的具体方法
        4.获取方法的返回值--->struts.xml中的具体action--->result(决定页面的跳转)
6.struts2配置文件加载顺序(面试)               
        1.default.properties(常量)
        2.struts-default.xml(默认配置)
        3.struts-plugin(struts插件的配置)
        4.struts.xml(自定义配置)
Struts文件上传
        文件上传介绍
浏览器端注意事项:
表单提交方式method=post
表单中必须有一个<input type=”file”>组件
表单中必须设置enctype=”multipart/form-data”
服务器端
         Commons-fileupoad.jar包完成。
Struts2框架本身支持文件上传
Struts2框架可以使用HttpServletResponse来处理ajax请求
Strtus2yjson的插件来完成ajax操作
***注解开发
        注解必须要单独导入一个jar包
        @Namespace来代替<package  namespace=””>
@ParentPackage来代替<package extends=””>
@Action来描述关于<action>配置
value属性<action name=””>
使用@Action的results来描述关于结果类型的配置<result>
<result name=”” type=””>
@Action(results={@Result(name=””,type=””,location=””)})
可以通过多个映射访问同一个action
Hibernate什么是hibernate
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用
为什么使用hibernate框架
n HibernateJDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码
n Hibernate是一个基于jdbc的主流持久化框架,是一个优秀的orm实现,它很大程度的简化了dao层编码工作
创建映射文件
映射配置文件主要是用于描述实体类与数据表之间的映射关系。
位置:要与实体类在同一个包下.
名称:类名.hbm.xml
约束:hibernate核心jar包下的org.hibernate包下hibernate-mapping-3.0.dtd文件中查找
配置可以参考 hibernate-release-5.0.7.Final\project\etc\hibernate.properties文件
Hibernate 核心组件
在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层。
它通过配置文件(hibernate.propertieshibernate.cfg.xml)和映射文件(***.hbm.xml)JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。
Hibernate核心组件:
Configuration类: 用来读取Hibernate配置文件,并产生SessionFactory对象
SessionFactory接口: 产生Session实例工厂
Session接口: 用来操作PO,它有get(),load(),save(事务提交),update(),delete()等方法来对Po进行加载,保存,更新,删除等操作,是Hibernate的核心接口。
Query接口:用来对PO进行查询操作,它可以从SessioncreateQuery()方法生成
Transaction接口: 用来管理Hibernate事务,它主要方法有commit()和rollback(),可以从SessionbeginTrancation()方法生成。
Persistent Object
持久化对象可以是普通的Javabean,唯一特殊的是它们与(仅一个)Session相关联。JavaBeansHibernate中存在三种状态:
1. 临时状态(transient):当一个JavaBean对象在内存中孤立存在,不与数据库中的数据有任何关联时,那么这个Javabeans对象就称为临时对象(Transient Object
2. 持久化状态(persistent):当一个JavaBean对象与一个Session相关联时,就变成持久化对象(Persistent Object
3. 托管状态(detached): 在这个Session被关闭的同时,这个对象也会脱离持久化状态,就变成托管状态(Detached Object),可以被应用程序的任何自由层使用,列入可以做与表示层 打交道的据舆对象(Data Transfer Object)。
Hibernate的运行过程
A:应用程序先调用Configeration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactpy对象
B:然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象;可通过Session对象的get(),load()
Save(),update(),delete()和saveQrUpdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可以通过Session对象生成一个Query对象,然后利用Query对象执行查询操作,如果没有异常,Transaction对象将提交这些操作结果到数据库中
流程:
应用程序
配置文件
Hibernate.cfg.xml                   Configration
SessionFactory
映射文件                                                           查询
Xxx.hbm.xml                                Session  ——> Query
异常                                                        正常
回滚<————                Transaction                ————>提交数据库
       
持久化类设计:
持久化类通常建议有一个持久化标识符(ID)
持久化标识符通常建议使用封装类(基本类型有默认值)
持久化类通常建议手动给定一个无参数的构造器(因为有一些操作,是反射进行的)
属性通常建议提供getting、setting方法
持久化类不能是final
持久化类中如果使用了集合类型属性,只能使用接口类型进行声明(List,Set,Map)
注解开发:
PO类注解开发
@Entity 定义了一个实体
@Table (name=“表名”)
@ID  定义主键
@GeneratedValue(strategy=GenerationType.IDENTITY) 相当于主键生成策略
@Column(name=“表名”,length=“默认长度255,占用空间大建议修改” nullable=true/false(是否为空))
@Temporal(TemporalType.TIMESTAMP 包含年月日时分秒 ) 定义日期类型
@Type() 不用写也可以,允许制定HiBernate里面的一些类型,类型格        式必须是和类型表一致
然后在配置文件 HIBERNATE.CFG.XML中 配置
<mapping class=“类的全路径”>
主键生成策略  UUID类型
@GenericGeneratorname=“myuuid”,strategy=“uuid”
@GeneratedValuegenerator=“myuuid”
Hibernate检索方式概述
Hibernate提供以下几种检索对象方式:
1导航对象图检索方式,根据已加载的对象导航到其它对象
2.OID检索方式,按照对象的OID来检索对象
3.HQL检索方式,使用面向对象的HQL查询语言
4.QBC检索方式,使用QBC(Query by Criteria)API来检索对象,这种API封装了基于字符串形式的查询语句,提供了更加面向对象的查询接口
5.本地SQL检索方式,使用本地数据库的SQL查询语句
多表操作
迫切内连接
迫切内连接得到的结果是直接封装到PO类中,而内连接得到的是Object[]数组,数组中封装的是PO类对象
Hibernate事务管理
事务就是逻辑上的一组操作,组成这组操作的各个单元要么全部成功,要么全都失败
Hibernate事务的四个特性
原子性:不可分割
        一致性:事务在执行前后,要保证数据的一致。
        隔离性:一个事务在执行的过程中,不应该受到其它事务的干扰。
        持久性:事务一旦结束,数据持久化到数据库。
READ_UNCOMMITED 读取未提交,它引发所有的隔离问题
        READ_COMMITTED  读已提交,阻止脏读,可能发生不可重复读与虚读.
        REPEATABLE_READ 重复读  阻止脏读,不可重复读 可能发生虚读
SERIALIZABLE 串行化 解决所有问题 不允许两个事务,同时操作一个目标数据。(效率低下)
ORACLE  默认的是事务隔离级别  READ_COMMITTED
MYSQL 默认的事务隔离级别  REPEATABLE_READ
Hibernate中session管理
Hibernate提供了三种管理session的方式:
1. Session对象的生命周期与本地线程绑定(ThreadLocal)
2. Session对象的生命周期与JTA事务绑定(分布式事务管理)
3. Hibernate委托程序来管理Session的生命周期
Hiberante优化方案HQL优化1.使用参数绑定
        1.使用绑定参数的原因是让数据库一次解析SQL,对后续的重复请求可以使用用生成好的执行计划,这样做节省CPU时间和内存。
        2.避免SQL注入
2.尽量少全长NOT
        如果where子句中包含not关键字,那么执行时该字段的索引失效。
3.尽量使用where来替换having
Having在检索出所有记录后才对结果集进行过滤,这个处理需要一定的开销,而where子句限制记录的数目,能减少这方面的开销
4.减少对表的查询
        在含有子查询的HQL中,尽量减少对表的查询,降低开销
5.使用表的别名
当在HQL语句中连接多个表时,使用别名,提高程序阅读性,并把别名前缀与每个列上,这样一来,可以减少解析时间并减少列歧义引起的语法错误。
6.实体的更新与删除
        hibernate3以后支持hql的update与delete操作
延迟加载
延迟加载 hibernate为提高程序执行的效率而提供的一种机制,即只有真正使用该对象的数据时才会创建。
load方法采用的策略延迟加载.
get方法采用的策略立即加载。
set上的fetch与lazy
set上的fetch与lazy它主要是用于设置关联的集合信息的抓取策略。
Fetch可取值有:
1. SELECT 多条简单的sql   (默认值)
2. JOIN 采用迫切左外连接
3. SUBSELECT 将生成子查询的SQL
lazy可取值有:
1. TURE 延迟检索   (默认值)
2. FALSE 立即检索
3. EXTRA 加强延迟检索(及其懒惰)
这两个一共有7种组合方法

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马