复习答案.txt
来自「Java大部分的基础知识,EJB3,EJB2,WEBSERVICE,SOAP,J」· 文本 代码 · 共 870 行 · 第 1/3 页
TXT
870 行
while(rs.next())
{
}
如何通过sqlserver分页:
通过top分页
--通用代码
SELECT TOP 页大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 页大小*(页数-1) id
FROM 表
ORDER BY id))
ORDER BY ID
create table aa
(
a1 varchar(20) primary key,
a2 varchar(20)
);
insert into aa values('a01','11111111111111111');
insert into aa values('a02','11111111111111111');
insert into aa values('a03','11111111111111111');
insert into aa values('a04','11111111111111111');
insert into aa values('a05','11111111111111111');
insert into aa values('a06','11111111111111111');
insert into aa values('a07','11111111111111111');
insert into aa values('a08','11111111111111111');
insert into aa values('a09','11111111111111111');
insert into aa values('a10','11111111111111111');
insert into aa values('a11','11111111111111111');
insert into aa values('a12','11111111111111111');
insert into aa values('a13','11111111111111111');
insert into aa values('a14','11111111111111111');
insert into aa values('a15','11111111111111111');
insert into aa values('a16','11111111111111111');
insert into aa values('a17','11111111111111111');
insert into aa values('a18','11111111111111111');
SELECT TOP 2 *
FROM aa
WHERE a1 NOT IN
(SELECT TOP 0 a1
FROM aa
ORDER BY a1)
ORDER BY a1
--第二页
select top 2 * from aa
where a1 not in(select top 2 a1 from aa order by a1)
order by a1;
--第三页
select top 2 * from aa
where a1 not in
(
select top 4 a1 from aa order by a1
)
order by a1;
--还有一种方式是通过sqlserver提供的游标分页
如何通过java的session实现分页,java的session分页与数据库分页优缺点。
java分页:
通过持久层取出一个表的所有信息放到一个集合中,
确定一页显示多少行
根据集合的数量及一页显示多少行的信息确定总共有多少页
根所客户的请求确定客户需要的当前页
定位到当前页的第一行(page-1)*pageSize
每页显示2行,即pageSize=2
显示第一页
currentPageFirstRow:第一页的第一行:(1-1)*pageSize
page=2
第二页的第一行:(2-1)*pageSize
取一页信息显示
for(int i=currentPageFirstRow;i<currentPageFirstRow+pageSize;i++)
{
if(i>=list.size())
{
break;
}
list.get(i);
}
java的session分页与数据库分页优缺点
java中的sql只第一次时只执行一次,以后不再执行sql,所以速度较快,但很耗内存,
当数据量很大时不可取。
数据库分页请求一次sql执行一次,因为要执行sql所以速度慢,不耗内存,当数据量很大时ok
什么是类的返射?
通过类说明可以得到类的父类、实现的接口、内部类、构造函数、方法、属性
并可以根据构造器实例化一个对象,唤起一个方法,取属性值,改属性值。
如何得到一个类说明?
Class cls=类.class;
Class cls=对象.getClass();
Class.forName("类路径");
如何得到一个方法并唤起它?
Class cls=类.class;
Constructor cons=cls.getConstructor(new Class[]{String.class});
Object obj=cons.newInstance(new Object[]{"aaa"});
Method method=cls.getMethod("方法名",new Class[]{String.class,Integer.class});
method.invoke(obj,new Object[]{"aa",new Integer(1)});
model2的MVC分别是什么?为什么使用MVC模式
M(model):业务+dao+持久
V(view):jsp
c(control):servlet
MVC:让界面层与业务层强制解藕,就像旅馆的服务员(control)。
struts的MVC分别代表那些类?
M:业务+dao+持久
V:jsp actionForm
C:
ActionServlet
RequestProcessor
Action
ActionMapping
ActionForward
struts的请求处理过程?
url.do将请求发给ActionServlet
ActionServlet转发给RequestProcessor
RequestProcessor根所url在struts-config.xml找到对应的Action及ActionForm
如果在相关的作用域中存在ActionForm,RequestProcessor用已有的,如果不存,
RequestProcesor实例化一个新的,并通过类的返射将表单域的值注入到ActionForm中
如果存在Action,RequestProcessor用已有的,如果不存在实例化一个新的Action并
调用Action的execute方法。
execute方法执行结束时通过ActionMapping找到一个ActionForward转发到另一个jsp页面。
struts的标签库有那些,各有什么作用?
html:
<html:form action="/insert"/>:可以根据url重新生成form,并设置form的名称。
<action type="struts.action.InsertAction" path="/insert" name="userForm"
attribute="userForm" scope="request"
>
<forward path="succ.jsp" name="success"/>
</action>
logic:
<logic:iterator name="userList" id="user" scope="request"/>
<logic:iterator name="customer" property="buies" id="buy" scope="request"/>
<logic:present name="customer" scope="request"/>
<logic:notPresent name="customer" scope="request"/>
bean:
<bean:define name="customer" id="cus" scope="request"/>
<bean:define name="customer" property="buyies" id="buies" scope="request"/>
tiles
hibernate的核心类及作用?
Configuration/AnnotationConfiguration:加载hibernate.cfg.xml及*.hbm.xml文件
AnnotationConfiguration:即可加载是有注解的类,也可加载*.hbm.xml文件
SessionFactory:sessionFactory产生具体的session,管理二级缓存,可以有多个实例
但通过控件整个应用是其实例只有一个。
Session:对数据库进行增删改查,也是一级缓存,即事务级缓存
save
update:如果将要修改的对象在缓存中,会报错,需先查出对象,通过set方法
修改其值并提交事务。
如果在缓存中没有可以传一个pojo直接修改
delete
get/load(Class cls,Seriable s)
get:主要用于一级缓存,没查到返回null,返回是一个真实对象
load:主要用于二级缓存,没查到抛异常,返回是一个代理
Query query=createQuery("from Customer where customerName=:aa");
query.setString("aa","a1");
List list=query.list();
query.list():如果要用二级缓存,sql相同、数据不能个修改,但
sql只执行一次
query.iterator();其sql执行需两步,第一是取所有主键,
第二步是根据每一个主键查找得到一个对象。
若没有缓存其会执行"行数+1" 次,若有缓存
可以直接取对象。
//批处理更新
Query query=createQuery("delete from Customer");
query.executeUpdate();其不更新缓存
Transaction;
Transaction trans=session.beginTransaction();
trans.commit();
hibernate的核心配置文件及作用
hibernate.cfg.xml:数据连接信息及关联的*.hbm.xml
*.hbm.xml:是一个表与类的具体映射,表名与类名,字段与属性
hibernate对象的生命周期?
自由:与session没有任何关系
持久:与session关联
可以通过set方法直接修改对象在数据库中的值,前提是在事务中
可以通过get方法取出其关联的另一对象,如果是延迟加载要取其非主键属性值或size();
游离:被session抛弃(session关闭、session.evict(对象))
不可以通过set改对象对应的数据库值
不可以通过get取另一对象的值
如何实现hibernate的onetomany其关键的属性有那些,一般主控方在那边?
one有一属性是HashSet存放many的所有对象
many有一属性是具体的一个对象,可以取出它
inverse:主控方(false),维护外键列的值,主控方在many这边,
如果要实现外键的关联必须将被控方作为主控方的属性
lazy:如果是true是延迟加载,取值只取自己的不取关联的内容。
如果是false是直接加载,取值不但取当前而且取所有关联的的对象。
cascade:级联增、删、改
all:级联增、删、改
save-update:级联增、改
为什么用hibernate?
95%
系统运行的速度慢一些
在hibernate的一个具体配置文件中主键的生成机制有几种,请表述两个最重的。
native:开发人员在增加对象值时不管主键
create table a1
(
a1 int identity(1,1) primary key,
a2 varchar2(20)
)
insert into a1(a2) values('aaaaa');
assigned:主键手动给
create table a2
(
a1 int primary key,
a2 varchar2(20)
)
insert into a2(a1,a2) values(1,'aaaaaa');
uuid:hibernate通过一种算法产生一个16位唯一的主键。
spring的三种注入方式是什么?
setter
interface
constructor
spring的核心类及核类配置文件是什么?
ApplicationContext ac=new FileXmlApplicationContext("applicationContext.xml");
Object obj=ac.getBean("id值");
applicationContext.xml
spring配置文件中的主要标签是什么?写一个小实例?
<beans>
<bean id="customer" class="dao.Customer" singleton="true" init-method="init1" destroy-method="destroy1()">
<property name="customerName">
<value>张三</value>
</property>
<property name="address">
<ref local="address"/>
</property>
</bean>
<bean id="address" class="dao.Address">
<property name="addressName">
<value>深圳</value>
</property>
</bean>
</beans>
什么是spring的ioc?
强依赖关系:
List list=new ArrayList();
较弱依赖关系
DocumnetBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
最弱依赖关系:
将类与类依赖关系写到配置文件中,
程序在运行时动态的加载依赖的类,将一种强依赖关系转化为弱依赖关系。
是一个超级工厂
aop是什么?作用?名称及特点?
aop是面向方面编程是对oop的一种补充,不可以代替oop,共提供一些通用的服务如事务、安全、日志
aop的名称:
拦截器:代理
装备:处理类
目标对象:真实对象
连接点:连接的是属性还是方法,一般方法
关切点:要拦截方法的条件
描述struts&spring&hibernate联合的配置文件如何实现?
sh(spring&hibernate)
dataSource
sessionFactory
userDao:(实现类不是接口) public class UserDaoImpl extends HibernateDaoSupport implements UserDao
sessionFactory
facade:(实现类不是接口)
userDao
transactionManager:HibernateTransactionManager
abstractProxy(abstract="true"):TransactionProxyFactoryBean
transactionManager
transactionAttributes
PROPRAGRAM_REQUIRED,readOnly
facadeProxy(parent="abstractProxy"):
target
facade
ss(struts&spring)
在strust中加入一个插件
类:ContextLoaderPlugIn
属性:
contextConfigLocation=/WEB-INF/applicationContext.xml
struts-config.xml中的每一个action的type不再指向真正的Action,而
DelegatingActionProxy
applicationContext.xml中草药
<bean name="/insert" class="struts.action.InsertAction">
<property name="facade">
<ref local="facadeProxy"/>
</property>
</bean>
jdbc、hibernate、ibatis各有什么特点及区别
jdbc(手动):手动写sql,
在执行dml时手动将对象的每一个值给PreparedStatement,再执行相关的操作
在执行dql时返回一个ResultSet,手动将ResultSet中的每一个值
封装到数据类中
ibatis(半自动):手动写sql
在执行dml时直接传一个对象进行增删改
在执行dql时直接返回一个对象,不用手动封装
hibernate(全自动):自动生成sql
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?