📄 笔试测试2-answer.txt
字号:
如果有action用已有,没能根据类的反射实例化一个action,调用action的execute方法
在调用之前通过参数将actionForm注入到execute方法中。
在execute方法执行结束前通过actionMapping找到ActionForward转发到另一个页面。
3、模板模式
父类即有抽象方法又有具体方法,具体方法调用抽象方法,
抽象方法被具体子类实现。向客户端公开的子类,客户端调
用子类继承的具体方法,通过具体方法调用子类实现的抽象方法,
为子类提供相关服务。
4、标签:
html: 上一个action创建了一个form转发到下一个jsp页面,jsp页面的
<html:form>标签所用form与上一个action所用的form类型及名称相同,可以直接
显示。
<html:select property="sex">
<html:options collection="sexes" property="code" labelProperty="name"/>
</html:select>
bean:操作bean
1、从request或session中取出一个bean或bean的属性,放置到page对象中
<bean:define scope="request" name="customer" id="customer_page">
<bean:define scope="request" name="customer" property="buies" id="buies_page">
2、打印bean的一个属性。
<bean:write scope="request" name="customer" property="customeName"/>
logic:逻辑处理
//遍历集合中的每一个元素
<logic:iterator scope="request" name="buies" id="buy"/>
<logic:iterator scope="request" name="customer" property="buies" id="buy"/>
//判断是否存在某一个对象
<logic:present scope="request" name="customer"/>
//判断是否相同
<logic:equal scope="request" name="customer" value="10" property="customerName"/>
业务层:
IFacade接口
Facade实现类
FacadeFactory产生Facade实现类实例,返回IFacade接口,用了单例模式。
dao层:
dao接口
dao实现类
dao工厂
抽象的dao工厂
有一个dao接口,一个dao实现类,一个dao工厂,通过dao工厂产生dao实现
类的实例,返回dao接口。抽象的dao通过反射、单例、工厂模式产生具体的
dao工厂,返回抽象的dao工厂,因为具体的dao工厂继承于抽象的dao工厂,向
业务层返回的是抽象dao工厂,实际调用还是具体的dao工厂方法。
hibernate:执行速度慢,但让我们的工作量减少了95%
核心配置:
hibernate.cfg.xml:说明数据连接及具体的o/r mapping文件所在位置
*.hbm.xml:具体的映射文件,说明类与表,属性与字段的对应关系。
核心类:
Configuration:加载hibernate.cfg.xml及*.hbm.xml文件
SessionFactory:二级缓存管理,产生会话session
Session:一级缓存管理,一个会话可以基于一行增、删、改、查
save
update
saveOrUpdate()//如果有修改,如果没有增加
delete
get/load(Class cls,Seriable 主键);
Query:批量查,批量改
query=session.CreateQuery("from Customer where customerName=:a and pwd=:b");
query.setString("a","张三");
query.setString("b","1234");
query.list();
session.createQuery("delete from Customer").executeUpdate();
Transaction:事务管理
Transaction trans=session.beginTransaction();
trans.commit();
trans.rollback();
OneToMany:
1、一方可以找到另一方,所以要将前方作为对方的属性,在one这边有一个set属性。
在many这边有一个one类型的对象。
2、主控方:维护外键列的值。
invese="false"代表主控方,要想维护外键列的值必须将被控方作为主控方的属性。
主控方一般在many这边。
3、延迟加载:
lazy="true"代表延迟加载,加载时只加载当前对象的不加载相关对象。
lazy="false"代表即时加载,不但加载当前对象还加载关联对象的。
4、级联:主增从增、主改从改、主删从删,要想控制从必须将从作为主的属性。
cascase="all"或cacade="save-update"
生命周期
自由:直接实例化一个对象
持久:当get、load、update、save、query.list()之后与session关联,通过
get方法可以取出对方,若在事务中通过set方法可以直接修改其值。
游离:被session抛弃。
struts&spring&hibernate&ibatis:速度是最慢的,因为要解析大量的xml文件,大量用到的反射。但可维护性、
可扩展性是最好的,开发也是最快的,是当前主流的开发框架。
struts:将IFacade接口作用其属性
Action将IFacade作为属性,在applicationContext.xml中配置具体
action类时,通过set方法注入将facade的代理类注入到action属性中。
facade:将dao接口作为其属性。
IFacade接口
Facade实现类
在applicationContext.xml中配置具体facade类,通过set方法将dao接口
注入到facade中.
配置一个抽象代理说明具体的代理工厂,通过set方法将装备、关切点注入到
抽象代理中。
当前事务的实现有两种方式,一种是代码级的事务处理,另一种是声明式的事务处理,spring是通过
声明式的事务进行处理的,这样代码中就不用管事务处理,由springAop实现,具体操作是这样的
通过bean标签加入一个transactionManger事务管理装备,
再通过bean标签加说明一个抽象代理,其类是TransactionProxyFactoryBean,属性有transactionManager
、transactionAttributes分别说明具体的事务管理装备、那些方法需要什么样的事务处理。
再通过bean标签说明一个具体业务代理,其parent=抽象代理,属性有target,说明
真实业务的对象。
dao:
dao接口
dao实现类 extends HibernateDaoSupport/SqlMapClientDaoSupport
在applicationContext.xml中配置具体的dao实现类,通过set方法注入SessionFactory,
因为其继承于HibernateDaoSupprt可以直接用session所以必须注入SessionFatory。
ibatis:
1、为什么用?
1、若客户出于安全的考虑,只提供几个select语句,只能ibatis,因为hibernate必须
要求必须有主键且要全表映射。
2、当需要高度优化的sql时,用ibatis较好,因为hibernate的sql是由hibernate自动生成的。
3、将大量的业务逻辑写在存储过程中时,用ibatis较好。
2、jdbc&hibernate&ibatis的比较
jdbc:全手动
1、手写sql
2、执行sql
1、在执行insert、update、delete时要将对象的属性一个一个取出,
通过PreparedStatement的setString一个属性一个属性的设置到
PreparedStament对象中。
2、在进行对象的封装时,要取ResultSet中的每一行,每一列,依次
设置到对象中,再将对象加入集合中。
ibatis:半自动
1、手写sql
2、执行
1、在执行insert、update、delete直接传入一个对象。
2、查询时直接返回一个pojo或pojo对应的集合。
hibernate:全自动
1、自动生成sql
2、执行
1、在执行insert、update、delete直接传入一个对象。
2、查询时,直接返回一个pojo或pojo对应的集合。
spring:
1、ioc/di
将类与类之间的依赖关系写在配置文件中,程序在运行时根据配置文件动
态加载依赖的类,将类与类之间强制解藕
ioc的发展:
1、代码中直接依赖
List list=new ArrayList();
2、通过工厂模式产生具体返回抽象,部分的符合了开闭原则。
Product product=Factory.newInstance();
3、spring的ioc
2、aop:面向方面编程,是对oop的补充,oop关心的纵向的业务,aop提供的横向的服务如事务、安全、
日志。其有五大名词,代理是拦截器,装备被代理调用提供具体的服务,关切点那些方法需要
什么样aop服务,真实对象提供具体业务处理,连接点说明关心是方法还是属性,一般是方法。
aop所用的模式是代理模式,有一个通用接口,一个代理,一个实现类,代理与实现类都实现了
通用接口,将真实对象作为代理的属性,向客户端公开的代理,客户端调用代理的方法时,代理
找到真实对象调用其方法处理,在处理之前之后可以调用装备提供事务、安全、日志等服务。
3、三种注入方式:
set
constructor
接口
总结:在spring的核心配置文件中配置的都中实现类,在具体代码中得到是接口。
Action中有IFacade接口属性,Facade中有dao接口属性。完全符合上层依赖于
下层,尽量减少下层对上层的依赖,层与层之间通过接口调用。
详细设计(10%):若软件公司技术较强,可以忽略。
编码(30%):
测试(10%):
部署
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -