复习答案.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 + -
显示快捷键?