posts - 195, comments - 34, trackbacks - 0, articles - 1

     摘要: 这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你 识字就能看懂,就能学到知识。写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的 方法,就是慢!慢慢的,如同品一个女人、一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前。

先 概述一下批处理是个什么东东。批处理的定义,至今我也没能给出一个合适的----众多高手们也都没给出----反正我不知道----看了我也不一定信服- ---我是个菜鸟,当然就更不用说了;但我想总结出一个“比较合适的”,而且我也相信自己可以把它解释的很清楚,让更多的菜鸟都知道这是个什么东东,你用 这个东东可以干什么事情。或许你会因为这篇文章而“无条件爱上批处理”,那么我的目的就达到了----我就是要让你爱上它,我就这么拽,你能怎么着??真 的,爱有时候就这么拽,就是这么没理由,就是这么不要脸!真的!
  阅读全文

posted @ 2007-08-13 00:46 小强摩羯座 阅读(278) | 评论 (0)编辑 收藏


Hibernate

一、       基础知识

    Hibernate是对象/关系映射(Object/Relation Mapping)的解决方案。   

    Hibernate架构

    POJO

    hibernate.cfg.xml

    *.hbm.xml

     Hibernate应用

 

二、 几个重要的类

    Configuration  (负责管理Hibernate的配置信息)

当创建SessionFactory时,Configuration实例可以指定使用哪一个映射文挡。应用程序通常只是创建一个Configuration实例,并通过它创建一个SessionFactory实例。

    SessionFactory (负责创建Session实例)

它是线程安全的,可以被多线程调用以取得Session,而且构造SessionFactory很消耗资源,所以多数情况下一个应用中只初始化一个SessionFactory,为不同的线程提供Session

Session 

SessionHibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与Session息息相关。Session不是线程安全的,多个执行线程共享一个Session,将会发生数据共享而发生混乱问题。为了解决此问题,可以采用ThreadLocal变量,使用它可以有效隔离执行所使用的数据,也就避开了Session的多线程之间的数据共享问题。

 

如何调用hibernate API

1、创建Configuration对象。(解析配置文件)

  Configuration config = new Configuration();

  

2、通过Configuration创建Session Factory(线程安全的重量级组件)

 Config = config.configure();   //configure()方法会在CLASSPATH下寻找hibernate.cfg.xml

  SessionFactory = config.buildSessionFactory();

 

3、通过SessionFactory创建Session会话对象。

 Session session = sessionFactory.openSession();

 

4、通过Session取得事务对象。

 Transaction trans session.beginTransaction();

 

5、通过session与数据库进行会话。

  session.save(object o);         //

 session.delete(object o);        //

  session.update(object o);       //

 session.get (Class clazz, Serializable id); //根据Id查找对象

 session.createQuery(String sql);        //自己拼HQL语言查找对象返回一个Query对象。

 

6、提交操作,结束事务。

 Trans.commit();

 

7、关闭Session

 session.close();

  注:第一步和第二步一般放在静态初始化代码块中执行。

 

三、Hibernate中自带IDgenerator的含义:

1identity:用于MySql数据库。特点:递增

 <id name="id" column="id">

    <generator class="identity"/>

 </id>

  注:对于MySql数据库使用递增序列时需要在建表时对主键指定为auto_increment属性。

 

2sequence:用于Oracle数据库

 <id name="id" column="id">

   <generator class="sequence">

     <param name="sequence">序列名</param>

   </generator>

 </id>

 

3native:跨数据库时使用,由底层方言产生。

 Default.sequencehibernate_sequence

 <id name="id" column="id">

   <generator class="native"/>

 </id>

  注:使用nativeHibernate默认会去查找Oracle中的hibernate_sequence序列。

  如果Oracle中没有该序列,连Oracle数据库时会报错。

 

4hilo:通过高低位合成id,先建表hi_value,再建列next_value。必须要     

       有初始值。

 <id name="id" column="id">

    <generator class="hilo">

      <param name="table">high_val</param>

       <param name="column">nextval</param>

      <param name="max_lo">5</param>

    </generator>

 </id>

 

5sequencehilo:同过高低位合成id,建一个sequence序列,不用建表。

<id name="id" column="id">

<generator class="hilo">

<param name="sequence">high_val_seq</param>

<param name="max_lo">5</param>

</generator>

</id>

6assigned:用户自定义id;

<id name="id" column="id">

<generator class="assigned"/>

</id>

 

7foreign:用于一对一关系共享主健时,两id值一样。

 

四、Hibernate类关系的处理:

1OnetoOne关系在数据库中如何体现,在JavaBean中如何体现,在Hibernate中如何映射onetoone关系。           

1、数据库中:一个表的外健对应另一个表的主健,外健要加上Unique约束。或者是两个表共享一个主健。

2javaBean中:在JavaBean中增加一个属性,即另外一个对象的引用,可以单向也可以双向。

3、在hibernate中:

主健映射:都是onetoone要用foreign生成策略。

外健映射:主表中用onetoone,副表通过propertyref  manytoone

 

create table car_pk (

    id number(10,0) not null,

    name varchar2(15),

    serial varchar2(30),

    manufacturer varchar2(50),

    producedate date,

    primary key (id)

);

create table engine_pk (

    id number(10,0) not null,

    model varchar2(20),

    manufacturer varchar2(50),

    producedate date,

    primary key (id)

);

alter table engine_pk

    add constraint fk_engine_car_pk

    foreign key (id)

    references car_pk(id);

One-to-One PK主键映射  (详见代码)

Table car_pk

Id

name

serial

manufacturer 

producedate

 

 

 

 

 

Table engine_pk

Id

model

manufacturer 

producedate

 

 

 

特点:engine_pk 表的Id car_pk表共享主键。

 

One-to-One FK外键映射  (详见代码)

Table car_pk

Id

name

serial

manufacturer 

producedate

 

 

 

 

 

 

Table engine_fk

Id

carid

model 

manufacturer 

producedate

 

 

 

 

 

 

特点:engine_fk表多了carid外键字段来维护与car_fk 表的关系。

 

建表语句如下:

create table engine_fk (

    id number(10,0) not null,

    model varchar2(20) not null,

    manufacturer varchar2(50) not null,

    producedate date,

    carid number(10,0) unique,

    primary key (id)

);

alter table engine_fk

    add constraint fk_engine_car_fk

    foreign key (carid)

   references car_fk(id);

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2ManytoOne关系在数据库中如何体现,在JavaBean中如何体现,在

Hibernate中如何映射manytoon关系。

1、数据库中:一个表的主健对应另一个表的外健。

2javaBean中:一个对象包含另一个对象的一个引用,另一个对象包含这个对象的一组(集合,用set)引用。

3、在hibernate中:用set.key指定具体列。

   Set一端一定要写inverse=“true”表示忽略集合一端的变化。

 

Order类和Item 的一对多关系为例子(详见代码):

 

     Item

 

-id: Integer

-product: String

-amount: int

-order: Order

 

 

-

-

 

     Order

 

-id: Integer

-owner: String

-phone: String

-address: String

-items: Set<Item>

  1        *

 

 

 

 

 

 

 

 

 

 

 


小结: 对象的关联关系有一对一、一对多、多对一和多对多,其中多对一和一对多关系比较常见。

一对一关系有两中方式:以主键关联和以外键关联。 

一对多和多对一通常应设置为双向关联,并在“一”这一方设置inverse="true"(比如一个班级对应多个学生,在班级这一边设置inverse="true")。设置了inverse="true"这一端比较清闲,它把控制权交给了另一端。让“多”这一端有控制权。   

多对多 可以借助中间表来保存两个实体之间的关系。

 

 


对象在Hibernate中的状态图:

   对象3种状态: Transient(瞬时)   Persistent(持久Detached(托管)

 

临时状态

new

 


garbege

get()

load()

find()

iterate()

etc.

                                                                                   

持久化状态

save()

saveOrUpdate()

 

evict()

close()*

clear()*

update()

saveOrUpdate

lock()

delete()

游离状态

 

garbege

 

v

posted @ 2007-08-12 10:25 小强摩羯座 阅读(265) | 评论 (0)编辑 收藏

与你分享五句话(转)

第一句:优秀是一种习惯
第二句话:生命是一种过程
第三句话:两点之间最短的距离并不一定是直线
第四句话:只有知道如何停止的人才知道如何加快速度
最后一句话:放弃是一种智慧,缺点是一种恩惠

多多品味,多多益善!

posted @ 2007-08-10 09:44 小强摩羯座 阅读(106) | 评论 (0)编辑 收藏

vc++常见的问题解答
2007-07-27 11:00
1:fatal error C1010: unexpected end of file while looking for precompiled header directive该如何解决
如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择Not Using Precompiled headers。确定
如果发生错误的文件原本是该工程中的,则检查该文件头部有没有#include "stdafx.h"语句,没有的话添加。
如果还不行,也有可能是定义的类或结构体等最后忘了加分号,注意一下。
2:fatal error RC1015: cannot open include file ’afxres.h’.该如何解决
#include "afxres.h"语句是在.rc文件中的,而afxres.h文件在VC的安装目录中的.\VC98\MFC\INCLUDE目录中,所以着重查一下Tools菜单中Options对话框中的Directories中的包括文件的路径是否正确,是否在VC的安装路径中,不是的话,改过来,如果这方面没问题,则到其他机器中拷贝afxres.h到相应的目录中
3:Dll分配的内存块,应用程序释放,结果报异常。
用GlobalAlloc()代替new, 用GlobalFree() 代替delete就不会出错了
其实还有一个办法,就是把dll的Settings的C/C++选项卡的Code Generation的Use Run-time liberary改成Debug Multithreaded DLL,在Release版本中改成Multithreaded DLL,就可以直接使用new和delete了,没问题
比较规范点的做法一般是DLL分配的内存由DLL释放。在DLL中加一个函数释放内存不是更好吗。
4:发现打印预览的图形明显比屏幕显示图形小,怎么办?
这多半是CDC映射模式的选择引起的,缺省状态下,选择的是MM_TEXT模式,MM_TEXT以设备的像素点为单位,而不同设备的像素点的大小不同,打印机的分辨率比显示器要高很多,所以导致同样图形在打印时候变小。解决之道是统一使用其他定长的映射模式,比如MM_HIMETRIC等等(CDC::SetMapMode()改变映射模式)
5:CString、char*、string、int、_bstr_t、CTime、COleDateTime等等的相互转换,如何判断一个字符串是一个浮点数?

#include<string>
using namespace std;
#include <COMDEF.H>

{
CString strCString="ABC";
char strchar[256],*pstr;

pstr=(LPSTR)(LPCTSTR)strCString; //CString---->char*
strcpy(strchar,(LPSTR)(LPCTSTR)strCString); //CString---->char[]

_bstr_t strbstr=pstr; //char*---->_bstr_t
WCHAR *strWCHAR=strbstr; //b_str_t--->UNICODE

strbstr=strWCHAR;
pstr=strbstr; //UNICODE---->char*

strCString="10";
int istr=atoi((LPSTR)(LPCTSTR)strCString); //CString、char[]、char*------>int
strCString.Format("%d",istr); //int----->CString
sprintf(strchar,"%d",istr); //int----->char[]

pstr=new char[256]; //字符串申请空间
strcpy(pstr,"ABC"); //字符串赋值
delete []pstr; //字符串释放

string strstring="ABC";
pstr=(char*)strstring.c_str(); //string---->char*

strCString="2003-10-27 6:24:37"; //CString--->COleDateTime
COleVariant vtime(strCString);
vtime.ChangeType(VT_DATE);
COleDateTime time4=vtime;



COleDateTime time1(1977,4,16,2,2,2); //COleDataTime--->CTime
SYSTEMTIME systime;
VariantTimeToSystemTime(time1, &systime);
CTime tm(systime);

time_t time2=tm.GetTime(); //CTime--->time_t
COleDateTime time3(time2); //time_t--->COleDateTime

//判断字符串是否是某种类型
CString sValue("123.1");
COleVariant vValue(sValue);

BOOL bStrIsFloat = (SUCCEEDED(VariantChangeType(&vValue, &vValue, 0, VT_R8)) && sValue.Find(’.’) != -1);
if(bStrIsFloat)
{
AfxMessageBox("浮点");
}
}

6:如何建立一个UNICODE应用程序?

建立一个应用程序,打开Alt+F7 settings选项,选择C/C++选项卡,在Preprocessor definenation中加上_UNICODE,在Link选项卡中,在Category选择框中选择Output,在Entry-point symbol编辑框中,添加wWinMainCRTStartup确定。

注意调试UNICODE程序时,需要在安装时VC选择所有选项,否则会缺少动态库和相应的.lib文件


7:ADO操作数据库表,更新出现问题
在打开数据库前,添加如下语句试一下pRecordSet->CursorLocation = adUseClient

posted @ 2007-08-07 23:16 小强摩羯座 阅读(215) | 评论 (0)编辑 收藏

     摘要:   指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。我看了不少书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起书来前后矛盾,越看越糊涂。   阅读全文

posted @ 2007-08-07 23:12 小强摩羯座 阅读(831) | 评论 (0)编辑 收藏

  七月流火依然,八月却是别样了。不是因为天气而是因为这个八月是大四的八月,是离开的八月。而要离开时候我却又离不开的无奈的累积,也是有几份对四年怀念的伤感,总使我的大脑高速运转去回想一些事,去总结一些事,去感慨一些,也最后徒增了几份悲情。但是心中总不认为那些只是一些遐想,而是很有些份量的,于现在,于未来,于我的人生。是此总催促着我来写一写,像是不写便会终身遗憾似的。
        大一不过成了高考的延续和对陌生的新鲜的认识的总和,做一此连自己也不知道为什么要去做的事。一句话太随大流了。
   大二从别人那里看到有些事情竟然可以做得那么好。于是开始心有不平,不平则“名”,于是也便开始做一些事,零零碎碎,目的漫漫,多而不实。也正是印证了后来学到的那个道理:有个人说他之所以做得那么好,不过是要让他身边的人更加看重自己而已。凡人当如此吧。很多时候人还是没有向前考虑的意识的,不过总是向后考虑,加现在,加可能的后来一个月之内的事,而一个月之生的事都没有预算的。正如我们下棋,十几岁时就能看到四五步了,但是当长到二十几岁的时候还是只能看到四五步。很多事我们只以平常的生活方式去对待都是有一个很有限的限度的。换句话说,我们不曾创造奇迹,是因为我们没有激情。我们没有改变。我们大多时候是处在通则久的阶段。而不是变的阶段。
 大三的时候有了些醒悟,想要拿到不曾拿到的奖学金,但是很难了。由于上学期课程(编译评分方法的改变)成绩的影响,而很难了。但是一些目标的树立使我认真的去做了一些事情。后来被证实都是相当有用的。
   大四遗憾的是没有算学分,而导致并4.5个学分,因此成为第二批毕业生。虽关系不大,但是对事情的忽略然后造成了一些损失这些事情的发生是不应该的。
   我是爱学习的学生,但是也是讨厌谈学习的学生。我很庆幸我总是会遇到好的人,在我人生需要的时候。
   开始考研时,我从刘军,蒋锋得到了买书的经验,在八月里我和徐立,还有杨凯一起学习。每天如此,很少间断。记得只和刘军去游泳一次。但是我们有跑步。后来九月份到图书馆学习,有幸遇到管长帮我占位,也是那时,我找回了曾经学习的感觉);有幸发现了在书架下面藏书的方法,我可以不用背那么多书却还可以把在图书馆里发现的好书也藏在那里;有幸管长找到一个可以睡觉的地方,睡在那里比在桌上要舒服的多啊;有幸杨铁源的好说话让我可以搬到他的床位睡,不可能搬下去的话,我难保我会考上,因为晚上睡不好的我会心情很差,就更不用说学习了;有幸后来有钟文凯叫我到后面去坐,有幸遇李泉清和黄航,才有了最后复习阶段的稳定,至少我觉得这个很重要。有幸有我们这边八个人,管霸们八个人一起在那里复习,那种气氛恐怕人生难再了。感激蔡老师对我的支持,那支持里有理解,是让我终生难忘的。
   可我究竟是无情的人吗???还是我不曾理解东方人的处事方式。有很多事我需要去学习,从别人那里学习。
   一路走来,跌跌幢幢。细数我所真正做过的事:看C&R的书,学习C,但是也因此挂了科。数据结构上了二个老师的课(另加张小键的课),最终才算基本入门。有加速度地去学习java和C++。认真的去学习离散。后来数据库,算法,操作系统的实验,网络的实验。仔细一想忽然发现自己做过的事真的不能说少,但是都是深度不够。不是最好。
 学习之外,我做了什么:从大一大二的只是去爬山,到开始溜轮滑,开始游泳,开始跑步,到最后去打乒乓球。也曾去唱K过。
 
 
    

posted @ 2007-08-04 17:11 小强摩羯座 阅读(218) | 评论 (0)编辑 收藏

     摘要: 直接在客户机上安装$MATLAB\toolbox\compiler\deploy\win32目录下的

MCRInstaller.exe程序(83M),就可以了。或者通过matlab命令生成一个CRInstaller.zip

文件,解压缩到客户机上,并将动态链接库目录(??是bin目录吗?)添加到PATH环境变

量中
  阅读全文

posted @ 2007-07-30 23:24 小强摩羯座 阅读(2355) | 评论 (0)编辑 收藏

  再论思考                                                                 

巴尔扎克有句名言:“一个能思想的人,才真正是一个力量无边的人”!

关于社会实践,关于大学,其意义在哪里?我们最需要从中学到什么,得到什么?可能每个人都有自己不同的看法:团队的友谊,实践的经历,调研的经验,等等!

我也一直在思考这个问题,但我得出的结论是:无论在社会实践中还是在大学生活中,培养出对生活对事物思考的习惯也许是最重要的!当思考成为习惯,当你时刻带着思考的眼睛看待你所观察到的现象,你所接触的事物,大学生活,社会调研都将会是另一翻天地!在我看来:“只要我们的脑袋还在,其他一切都只是一种工具”,让我们一起思考吧!

1.      思考最大的敌人就是轻易下结论,轻易下结论是对问题最不负责的表现;

2.      思考的第二大敌人是下绝对结论, 下绝对结论是一个人思维能力狭隘的表现;

3.      不满是思考的最大动力,批判性思维往往是其他思考模式的基础,爱思考的人最喜欢的一句话是:“还有更好的办法吗?”

4.          在生活中,在调研中,人都是两种状态,一种是“局内人”状态,另外一种是“旁观者”状态。在生活中,在调研中,我们更多的是充当一名“旁观者”,但很多人都会忽视自己“旁观者”的角色,想方设法去充当“局内人”,孰不知“旁观者清”的道理!

“旁观者”往往能从事物的整体去看问题,而“局内人”却往往会局限在自己从事的事物上,见树而不见森林,就像一个穷人穷了一辈子可能也不知道自己为什么穷,而只有认真观察了穷人和富人差别的人才更有可能找出穷人之所以穷的原因;这可能也是看下棋的人往往比下棋者看得更全面,想得更周全的原因吧,那么在调研中在生活中,请当好,珍惜好你的“旁观者”身份吧;

5.      团队讨论的效率问题是团队中极其重要的问题,团队讨论处理好了,能“集思广益”,“头脑风暴”,处理不好则可能浪费大量时间而没有多少成效,甚至成为滋生团队不和谐关系的场所!那么如何提高团队讨论的效率?一个很重要的理念是“一个人在同一个时间里只能而且应该只做一件事”,也就是将讨论的问题进行详细的肢解,当整个团队在同一时间只做同一件事情所产生的能量是不可估量的!

我喜欢跟我的队员说:我们这一时刻只讨论我们调研存在的基本事实?不要加入自己任何的主观思想;讨论出所有的基本事实后,我会让我的所有队员讨论存在的问题,同样不容许加入自己的主观思想;然后我会队员讨论解决的方案,同样不能加入主观意识;然后对解决方案的可行性进行考虑,在讨论可行性时不能加入自己关于此方案不可行性的思考,因为关于不可行性的思考是紧接着要讨论的问题,而非此刻讨论的问题,最后是从创新的角度进行思考!当然在团队讨论不一定严格按照上面的步骤走,但一定会将基本事实与主观看法分开进行讨论,并且做到“所有队员在同一时间里只做一件事情,只从同一个角度思考问题”;

6.      一种解决开会迟到的问题,我喜欢用迟到罚钱的方式,效果相当理想,自从实行开始,每个队员都比我早到得多,害我一直没罚成(但队长一定要以身作则);另外一种方法是再厉害的孙悟空也怕唐憎的说道理,我会跟我的队员说:“你迟到一分钟,我们团队就要浪费十分钟;你迟到二分钟,整个团队就要为此浪费二十分钟......,你要迟到十分钟,整个团队就要为此浪费一百分钟,人生有多少个一百分钟可以浪费?”

7.      对一个团队来说,最大的威胁莫过于队员(尤其是队长)表现消极情绪(抱怨情绪),消极情绪在团队中就像一种瘟疫,或迅速传播至整个团队,或将团队成员进行分派,或将表现消极情绪的队员孤立,对团队的士气和团队的和谐造成极大的影响。在团队中每个人都必须有一种信念:Nothing is impossible !没有什么事情是不可能的,只有“还有更好的办法吗?”

8.      头脑风暴:大家也许都听过这样一个故事,一个国王为了了解地球,派了四个大臣往东南西北四个方向进行考察,一个月后,四个大臣回来了,往东走的大臣要国王禀报:“我们的地球是一片沙漠,因为我走了一个月,见到的除了沙漠还是沙漠”,往南走的大臣不满地说:“我们的地球应该是一片汪洋大海,因为我在船上坐了一个月,见到的除了大海还是大海”,这时往西走的大臣就不乐意了:“我们的地球应该是一片永远走不忘的草原,因为我走了一个月,见到的除了草原还是草原”,往北走的大臣说“我们的地球应该是一片森林,因为我走了一个月,见到的除了森林还是森林”,但今天我们都知道我们的地球是包括沙漠,大海,草原,森林的多彩世界,我们在团队讨论中,队员之间的观点往往不是对与错的问题,而是思考角度的不同,也许大家观点的总和才更能反映事物的真实面目,因此在团队中,无论是谁都没有剥夺他人表达自己观点的权利;

9.      如何做到队员之间的合理分工,各尽所能,充分调动起每个队员的积极性?项目负责制也许能帮到我们的忙!我喜欢让我的团队去思考问题,去找出和设计出自己的方案,当一个方案出来后,我们就进行充分的讨论,只要你的项目好,通过了,大家就按照你的方案干(当然在讨论中,往往会对原方案有较大的补充或修改);

10.  思考也许不是对与错的问题,但却一定存在深与浅,宽与窄的问题,愿每位队员在社会实践中深入思考,全面思考,培养出思考的习惯!

                                                    

                                                     张天平

                                                    2007-07-21

posted @ 2007-07-23 13:49 小强摩羯座 阅读(124) | 评论 (0)编辑 收藏

     摘要:   阅读全文

posted @ 2007-07-16 14:45 小强摩羯座 阅读(178) | 评论 (0)编辑 收藏

     摘要:   阅读全文

posted @ 2007-07-11 01:00 小强摩羯座 阅读(371) | 评论 (0)编辑 收藏

仅列出标题
共20页: First 上一页 12 13 14 15 16 17 18 19 20 下一页