blogjava's web log

blogjava's web log
...

内有:
操作手册
测试分析报告
测试计划
概要设计说明书
开发进度月报
可行性研究报告
模块开发卷宗
软件需求说明书
数据库设计说明书
数据要求说明书
详细设计说明书
项目开发计划
..............等。。。

有需要的朋友可以点下面的连接下。。。


软件工程国家标准文档.rar
posted @ 2006-03-27 20:44 record java and net 阅读(10219) | 评论 (45)编辑 收藏
原文:http://blog.csdn.net/sunsnow8/archive/2005/03/05/312359.aspx

1.两种配置文件:
  A.hibernate.cfg.xml   和   B.hibernate.properties

  A中可含映射文件的配置,而B中hard codes加映射文件。

  A。Configuration config=new Configuration().config();
  B. Configuration config=new Configuration();
     config.addClass(TUser.class);


2.你不必一定用hibernate.cfg.xml或hibernate.properties这两文件名,
   你也不一定非得把配置文件放在Classes下,
   File file=new File("c:\\sample\\myhibernate.xml");
   Configuration config=new Configuration().config(file);

3. session.Flush()
   强制数据库立即同步,当用事务时,不必用flush,事务提交自动调用flush
   在session关闭时也会调用flush


4. Hibernate总是使用对象类型作为字段类型

5. XDoclet专门建立了hibernate doclet,就是在java代码上加上一些
   java docTag,后来再让XDoclet分析该java代码,生成映射文件;

6.HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分。

7.关系:
  Constrained : 约束,表明主控表的主键上是否存在一个外键(foreigh key)
   对其进行约束。

  property-ref:关联类中用于与主控类相关联的属性名,默认为关联类的主键属性名

  单向一对多需在一方配置,双向一对多需在双方进行配置

8.lazy=false:被动方的记录由hibernate负责记取,之后存放在主控方指定的
  Collection类型属性中

9. java.util.Set或net.sof.hibernate.collecton.Bag类型的Collection


10.重要:inverse:用于标识双向关联中的被动方一端。
         inverse=false的一方(主控方)负责维护关联关系.默认值:false

11.batch-size:采用延迟加载特征时,一次读入的数据数昨。

12.一对多通过主控方更新(主控方为一方时)

   user.getAddresses().add(addr);
   session.save(user);//通过主控对象级联更新  

13.在one-to-many 关系中,将many 一方设为主动方(inverse=false)将有助性能
   的改善。在一方设置关系时,inverse=true,即将主控权交给多方,
   这样多方可主动从一方获得foreign key,然后一次insert即可完工。


   addr.setUser(user);//设置关联的TUser对象
   user.getAddresses().add(addr);
   session.save(user);//级联更新 

14.只有设为主控方的一方才关心(访问)对方的属性,被动方是不关心对方的属性的。

15.one-to-many与many-to-one节点的配置属性不同:
   一对多关系多了lazy和inverse两个属性
   多对多节点属性:column:中间映射表中,关联目标表的关联字段
                   class:类名,关联目标类
                   outer-join:是否使用外联接    

   注意:access是设置属性值的读取方式。


        column是设置关联字段。


16.多对多,注意两方都要设置inverse和lazy,cascade只能设为insert-update
   多对多关系中,由于关联关系是两张表相互引用,因此在保存关系状态时必须对双方同时保存。

   group1.getRoles().add(role1);
   role1.getGroups().add(group1);

   session.save(role1);
   session.save(group1);

17.关于vo和po
   vo经过hibernate容量处理,就变成了po(该vo的引用将被容器保存,并且在session关闭时flush,因此po如果再传到其它地方改变了,就危险了)
 
   vo和po相互转换:BeanUtils.copyProperties(anotherUser,user);

18.对于save操作而言,如果对象已经与Session相关联(即已经被加入Session的实体容器中),则无需进行具体的操作。因为之后的Session.flush过程中,Hibernate
会对此实体容器中的对象进行遍历,查找出发生变化的实体,生成并执行相应的update
语句。

19.如果我们采用了延迟加载机制,但希望在一些情况下,实现非延迟加
载时的功能,也就是说,我们希望在Session关闭后,依然允许操作user的addresses
属性
Hibernate.initialize方法可以通过强制加载关联对象实现这一功能:
这也正是我们为什么在编写POJO时,必须用JDK Collection接口(如Set,Map),
而非特定的JDK Collection实现类(如HashSet、HashMap)申明Collection属性的
原因。

20.事务:从sessionFactory获得session,其自动提交属性就已经关闭(AutoCommit=false),此时若执行了jdbc操作,如果不显式调用session.BeginTransaction(),是不会执行事务操作的。

   jdbc transaction:基于同一个session(就是同一个connection)的事务;
   jta  transaction:跨session(跨connection)事务.

   对于jta事务,有三种实现方法:
     A。UserTransaction tx=new InitialContext().lookup("...");
        tx.commit();
     B. 使用hibernate封装的方法:(不推荐)
        Transaction tx=session.beginTransaction();
        tx.commit();
     C. 使用ejb之sessionBean的事务技持方法,你只要在把需要在发布描述符中,把需要jta事务的方法声明为require即可

21.悲观锁,乐观锁:
   乐观锁一般通过version来实现,注意version节点必须出现在id后。


22.Hibernate中,可以通过Criteria.setFirstResult和Criteria.setFetchSize方法设定分页范围。
   Query接口中也提供了与其一致的方法,hibernate主要在dialect类中实现在这个功能。


23.cache
   <hibernate-configuration>
 <session-factory>
 ……
  <property name="hibernate.cache.provider_class">
   net.sf.ehcache.hibernate.Provider
  </property> 

  还需对ecache本身进配置
  <ehcache>
 <diskStore path="java.io.tmpdir"/>
 <defaultCache
 maxElementsInMemory="10000" //Cache中最大允许保存的数据数量
 eternal="false" //Cache中数据是否为常量
 timeToIdleSeconds="120" //缓存数据钝化时间
 timeToLiveSeconds="120" //缓存数据的生存时间
 overflowToDisk="true" //内存不足时,是否启用磁盘缓存
 />
  </ehcache>

  之后在映射文件中指定各个映射实体的cache策略
  <class name=" org.hibernate.sample.TUser" .... >
 <cache usage="read-write"/>
 ....
 <set name="addresses" .... >
  <cache usage="read-only"/>
 ....
 </set>
 </class>

 *****************************************************
 Query.list()跟Query.iterate()的不同:
 对于query.list()总是通过一条sql语句获取所有记录,然后将其读出,填入pojo返回;
 但是query.iterate(),则是首先通过一条Select SQL 获取所有符合查询条件的记录的
id,再对这个id 集合进行循环操作,通过单独的Select SQL 取出每个id 所对应的记
录,之后填入POJO中返回。

 也就是说,对于list 操作,需要一条SQL 完成。而对于iterate 操作,需要n+1
条SQL。,list方法将不会从Cache中读取数据。iterator却会。


24.ThreadLocal:它会为每个线程维护一个私有的变量空间。实际上,
其实现原理是在JVM 中维护一个Map,这个Map的key 就是当前的线程对象,而value则是
线程通过ThreadLocal.set方法保存的对象实例。当线程调用ThreadLocal.get方法时,
ThreadLocal会根据当前线程对象的引用,取出Map中对应的对象返回。

 这样,ThreadLocal通过以各个线程对象的引用作为区分,从而将不同线程的变量隔离开
来。


25.Hibernate官方开发手册标准示例:
  public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory
sessionFactory = new
Configuration().configure().buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException(
"Configuration problem: " + ex.getMessage(),
ex
);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException
{
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}


    
26.通过filter实现session的重用:
   public class PersistenceFilter implements Filter
{
protected static ThreadLocal hibernateHolder = new ThreadLocal();
public void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain)
throws IOException, ServletException
{
hibernateHolder.set(getSession());
try
{
……
chain.doFilter(request, response);
……
}
finally
{
Session sess = (Session)hibernateHolder.get();
if (sess != null)
{
hibernateHolder.set(null);
try
{
sess.close();
}
catch (HibernateException ex) {
throw new ServletException(ex);
}
}
}
}
……}

27.Spring的参数化事务管理功能相当强大,笔者建议在基于Spring Framework的应用
开发中,尽量使用容器管理事务,以获得数据逻辑代码的最佳可读性。
 
public class UserDAO extends HibernateDaoSupport implements IUserDAO
{
public void insertUser(User user) {
getHibernateTemplate().saveOrUpdate(user);
}
}


  上面的UserDAO实现了自定义的IUserDAO接口,并扩展了抽象类:
HibernateDaoSupport
HibernateSupport实现了HibernateTemplate和SessionFactory实例的关联。
HibernateTemplate对Hibernate Session操作进行了封装,而
HibernateTemplate.execute方法则是一封装机制的核心

  *在spring的配置文件里,移植了整个hibernate.cfg.xml的内容。


原文:http://blog.csdn.net/sunsnow8/archive/2005/03/05/312359.aspx
posted @ 2006-03-27 11:27 record java and net 阅读(474) | 评论 (0)编辑 收藏

 

JSP 动作的作用
JSP动作利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码,通过标记库定义自定义标记
-----起始标记
-----结束标记
-------空标记

包括:
<jsp:include>
<jsp:param>
<jsp:forward>
<jsp:plugin>
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>

<jsp:useBean>标记

创建Bean或从服务器获得现有Bean

语法:
<jsp:useBean  id="bean name" class="class name" />
或者
<jsp:useBean  id="bean name" class="class name ">
  初始化代码
</jsp:useBean>

jsp:useBean动作用来装载一个将在JSP页面中使用的JavaBean。这个功能非常有用,因为它使得我们既可以发挥Java组件重用的优势,同时也避免了损失JSP区别于Servlet的方便性 !


获得Bean实例之后,要修改Bean的属性既可以通过jsp:setProperty动作进行,也可以在Scriptlet中利用id属性所命名的对象变量,通过调用该对象的方法显式地修改其属性 .

id属性-在整个页面引用Bean的唯一值
Bean名称的规则:
      唯一
区分大小写
第一个字符必须为字母
不允许有空格

可为同一 Bean 类指定不同的 id 值.

class 属性-JavaBean 的类名

---Count Bean不属于包
             <jsp:useBean id="count" class="Count" />
-----Count Bean属于test包
             <jsp:useBean id="count" class="test.Count" />



type属性---------将引用此对象的变量的类型
beanName 属性-指定串行化Bean的名称

scope 属性-表明Bean应可用的环境
----page
----session
----request
-----application


page 作用域
将 JavaBean 对象存储在当前页面的 javax.servlet.jsp.PageContext 中
JavaBean 对象仅可用于当前页面

session 作用域
将 JavaBean 对象存储在 HTTP 会话中
JavaBean 对象在当前 HttpSession 的生命周期内可用于所有页面


request 作用域
将 JavaBean 对象存储在当前 ServletRequest 中
JavaBean 对象可用于被包括的 JSP 页面

application 作用域
将 JavaBean 对象存储在 ServletContext 中
JavaBean 对象可用于共享同一 ServletContext 的所有页面


非空 useBean 标记仅在新建 Bean 实例时才会处理标记的内容

<jsp:useBean id="currentuser" class="CurrentUser" scope="session">
    Hello,new user!!!
</jsp:useBean>

 

<jsp:getProperty>标记

检索 Bean 属性的值,将此值转换成字符串,并插入输出结果中
name 属性-指定 Bean 的名称
property 属性-指定 Bean 的属性
<jsp:getProperty name="bean name" property="property name"/>


<jsp:setProperty>标记

设置 Bean 类的属性
name 属性-指定 Bean 的名称
property 属性-指定 Bean 的属性
value 属性-指定要设置的值

<jsp:setProperty name="bean name" property="property name" value="str" />
jsp:setProperty动作有下面四个属性
 name属性是必需的。它表示要设置属性的是哪个Bean。
property property属性是必需的。它表示要设置哪个属性。
有一个特殊用法:如果property的值是“*”,表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。

value属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如“true”)通过Boolean.valueOf转换,int和Integer类型的属性值(比如“42”)通过Integer.valueOf转换。 
value和param不能同时使用,但可以使用其中任意一个

 param是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

例如,下面的代码片断表示:如果存在numItems请求参数的话,把numberOfItems属性的值设置为请求参数numItems的值;否则什么也不做。

<jsp:setProperty name="orderBean"  property="numberOfItems"  param="numItems" /> 
如果同时省略value和param,其效果相当于提供一个param且其值等于property的值。进一步利用这种借助请求参数和属性名字相同进行自动赋值的思想,你还可以在property(Bean属性的名字)中指定“*”,然后省略value和param。此时,服务器会查看所有的Bean属性和请求参数,如果两者名字相同则自动赋值。


<jsp:forward>标记
将控制权传输至本地服务器上的另一地址

page 属性-指定替代地址
可为静态值,也可在请求时计算
语法:
<jsp: forward page = "localURL" />
<jsp:forward page=“/utils/errorReporter.jsp” />
<jsp:forward page="<%= someJavaExpression %>" />

<jsp:include>标记

可将另一个页面生成的内容包括在当前页面的输出结果中
也可包括Servlet
page 属性-要插入当前页面的文档
flush 属性-是否刷新当前页面的缓冲器
<jsp:param> 标记指定附加的 request 参数

<jsp:include page="localURL" flush="true" >
 <jsp:param name="parameterName1" value="parameterValue1" />
  <jsp:param name="parameterNameN" value="parameterValueN" />
<jsp:include page="localURL" flush="true" />

 

include 指令和 include 动作的区别
动重新编译和类大小
静态或动态内容的包括
合并主页和包括的页面的时间
共享局部变量
修改的生效
变量的作用域
include指令,它是在JSP文件被转换成Servlet的时候引入文件,而这里的jsp:include动作不同,插入文件的时间是在页面被请求的时候!

整理的有点乱。恐怕就我自己看的懂了(晕)...

posted @ 2006-03-27 00:40 record java and net 阅读(3058) | 评论 (4)编辑 收藏

Struts Logic 标签库中的标签可以根据特定的逻辑条件来控制输出网页的内容

,或者循环遍历集合中的所有元素,先来回顾一下Logic标签库中一些标签吧。。

进行比较运算的Logic标签
进行字符串匹配的Logic标签
判断指定内容是否存在的Logic标签
进行循环遍历的标签
进行请求转发或重定向的Logic标签


进行比较运算的Logic标签

<logic:equal>       比较变量是否等于指定的常量
<logic:notEqual>    比较变量是否不等于指定的常量
<logic:greaterEqual>比较变量是否大于或等于指定的常量
<logic:greateThan>  比较变量是否大于指定的常量
<logic:lessEqual>   比较变量是否小于或等于指定的常量
<logic:lesThan>     比较变量是否小于指定的常量


进行字符串匹配的Logic标签

<logic:match>      判断变量中是否包含指定的常量字符串
<logic:notMatch>   判断变量中是否不包含指定的常量字符串


判断指定内容是否存在的Logic标签

<logic:empty>     判断变量中是否为空
<logic:netEmpty>  判断变量中是否不为空

<logic:present>   判断指定的JavaBean . Cookie等 是否存在
<logic:notPresent>判断指定的JavaBean . Cookie等 是否不存在

<logic:messagesPresent>    判断指定的消息是否存在
<logic:messagesNotPresent>  判断指定的消息是否不存在

进行循环遍历的标签

<logic:iterate>
它是Logic标签库中最复杂的,也是用途最广的一个标签。

进行请求转发或重定向的Logic标签

<logic:forward>
<logic:redirect>



刚刚还看到了这篇http://www.blogjava.net/action/archive/2005/11/01/17707.aspx讲的比较详细。
我就懒的记了。。

posted @ 2006-03-26 16:40 record java and net 阅读(7070) | 评论 (0)编辑 收藏

文件有3M 分成了二个文件
日常小知识.part1.rar
日常小知识.part2.rar

没有事的时候可以看看。。哈哈。。
posted @ 2006-03-25 21:05 record java and net 阅读(510) | 评论 (1)编辑 收藏
仅列出标题
共31页: First 上一页 23 24 25 26 27 28 29 30 31 下一页 

导航

常用链接

留言簿(44)

新闻档案

2.动态语言

3.工具箱

9.文档教程

友情链接

搜索

最新评论