<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    all gone

    all gone

    2006年7月18日 #

    Ubuntu UTF8環(huán)境下搭建中文LaTeX環(huán)境

    1. 基本包的安裝
    sudo apt-get install tetex-base tetex-bin tetex-extra
    1. CJK包安裝
    sudo apt-get install latex-cjk-chinese
    1. CJK UTF8字體生成
    將下面的code復(fù)制到文件cvtfont.sh中:

    #!/bin/sh
    #
    # Origin By Edward G.J. Lee
    2001.11.25
    # http:
    //www.study-area.org/tips/latex/pdftex.html
    # This code is Public Domain.
    #
    # Enhanced by intron@intron.ac,
    2006.1.9
    # Modified
    for NetBSD by jungle@soforge.com, 2006.1.14
    # Italic support added by robert.zhangle@gmail.com,
    2006.5.19
    #

    if [ $# -ne 3 ]
    then

    cat
    << EOF
    Usage: `basename $
    0` font.ttf <TeX_Internal_Font_Name> <Tex_Font_Name>
    <TeX_Internal_Font_Name>: Used to name *.enc, *.afm, *.pfb, *.tfm & *.map
    <Tex_Font_Name>: Used in TeX source: \\CJKencfamily{UTF8}{Tex_Font_Name}

    An example: `basename $
    0` gbsn00lp.ttf gbsn00lp songpt1

    EOF

    exit
    1
    fi

    if ! which ttf2pt1; then
    echo
    "Please install pkgsrc fonts/ttf2pt1 before you can run me."
    exit
    1
    fi

    if ! which t1asm; then
    echo
    "Please install pkgsrc fonts/t1utils before you can run me."
    exit
    1
    fi

    if ! which extconv; then
    echo
    "Please install pkgsrc chinese/CJK before you can run me."
    exit
    1
    fi


    cat
    <<EOF
    ***************************************************************************
    * Please confirm that current working directory is EMPTY except scripts *
    * and HAS ENOUGH SPACE to contain so many intermediate files. *
    * If it is not empty, this script may DAMAGE INNOCENT FILES!!! *
    ***************************************************************************
    EOF

    read
    -p "Go ahead?[n]" a

    if [ "$a" != "y" ] && [ "$a" != "Y" ]; then
    exit
    0
    fi

    FONTFILENAME
    ="$1"
    FONTNAME
    ="$2"
    FONTTEXNAME
    ="$3"

    #TEXMFHOME
    =`kpsexpand '$TEXMFHOME'`
    TEXMFMAIN
    =`kpsexpand '$TEXMFMAIN'`
    TEXMFHOME
    ='/usr/share/texmf-tetex/'
    TTFONTFILEDIR
    =${TEXMFHOME}/fonts/truetype/chinese/
    ENCDIR
    =${TEXMFHOME}/fonts/enc/dvips/chinese/${FONTNAME}
    AFMDIR
    =${TEXMFHOME}/fonts/afm/chinese/${FONTNAME}
    TFMDIR
    =${TEXMFHOME}/fonts/tfm/chinese/${FONTNAME}
    PFBDIR
    =${TEXMFHOME}/fonts/type1/chinese/${FONTNAME}
    MAPDIR
    =${TEXMFHOME}/fonts/map/dvips/chinese

    UPDMAPCFG
    =${TEXMFHOME}/web2c/updmap.cfg

    if [ ! -f $UPDMAPCFG ]
    then
    SYSUPDMAPCFG
    =`kpsewhich -format 'web2c files' updmap.cfg`
    cp $SYSUPDMAPCFG $UPDMAPCFG
    fi

    CIDXMAP
    =${TEXMFHOME}/dvipdfm/config/cid-x.map

    if [ ! -f $CIDXMAP ]
    then
    touch $CIDXMAP
    fi

    CJKDIR
    =${TEXMFMAIN}/tex/latex/CJK/UTF8

    INSTALLDIRMODE
    ="-m 0755"
    INSTALLMODE
    ="-m 0644"

    FONTFILEBASENAME
    =`basename "$FONTFILENAME"`
    FDNAME
    =c70${FONTTEXNAME}.fd

    #MAPFILE
    =/usr/local/share/ttf2pt1/maps/cugb.map
    PLANENUM
    =255

    # Initialize ${FONTNAME}.map
    echo
    -n "" > ${FONTNAME}.map


    n
    =0

    echo
    "Generating subfonts from plane $n to plane $PLANENUM ..."

    while [ $n -le $PLANENUM ]
    do
    m
    =`printf %02x $n`

    echo
    -n "[$n]"

    SUBFONTNAME
    =${FONTNAME}${m}

    # Generate
    *.t1a *.afm *.enc
    ttf2pt1
    -GAE -pft -OHUBs -W0 -l plane+pid=3,eid=1,0x$m \\
    "$FONTFILENAME" ${SUBFONTNAME}

    # avoid dvips(k)(before v5.
    86) t1part module bug.
    perl
    -pi -e 's/_/Z/g' ${SUBFONTNAME}.t1a ${SUBFONTNAME}.afm

    # Generate
    *.pfb
    t1asm
    -b ${SUBFONTNAME}.t1a > ${SUBFONTNAME}.pfb 2>/dev/null

    # Generate
    *.tfm
    afm2tfm ${FONTNAME}$m.afm ${FONTNAME}$m.tfm
    >/dev/null
    afm2tfm ${FONTNAME}$m.afm
    -s .167 ${FONTNAME}sl$m.tfm >/dev/null

    # Generate ${FONTNAME}.map
    AFMNAME
    =`grep -m 1 -i fontname ${SUBFONTNAME}.afm | cut -d ' ' -f 2`
    echo
    "${FONTNAME}$m ${AFMNAME} <${FONTNAME}$m.pfb" >> ${FONTNAME}.map
    echo
    "${FONTNAME}sl$m ${AFMNAME} \\" .167 SlantFont \\" <${FONTNAME}$m.pfb" \\
    >> ${FONTNAME}.map

    n
    =`expr $n + 1`
    done

    echo

    cat
    > ${FDNAME} << EOF
    % This file is automatically generated by `basename $0`
    \\\\def\\\\fileversion{
    0.0.1}
    \\\\def\\\\filedate{`date
    +%Y/%m/%d`}
    \\\\ProvidesFile{${FDNAME}}[\\\\filedate\\\\space\\\\fileversion]

    \\\\DeclareFontFamily{C70}{${FONTTEXNAME}}{\\\\hyphenchar \\\\font\\\\m@ne}

    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{n}{
    <-> CJK * ${FONTNAME}}{}
    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{n}{
    <-> CJKb * ${FONTNAME}}{\\\\CJKbold}
    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{it}{
    <-> CJK * ${FONTNAME}sl}{}
    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{it}{
    <-> CJKb * ${FONTNAME}sl}{\\\\CJKbold}
    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{m}{sl}{
    <-> CJK * ${FONTNAME}sl}{}
    \\\\DeclareFontShape{C70}{${FONTTEXNAME}}{bx}{sl}{
    <-> CJKb * ${FONTNAME}sl}{\\\\CJKbold}

    \\\\endinput
    EOF


    #exit
    0;

    echo
    echo
    "Installing ..."

    install
    -d $INSTALLDIRMODE $TTFONTFILEDIR $ENCDIR $AFMDIR $TFMDIR $PFBDIR $MAPDIR $CJKDIR

    install $INSTALLMODE $FONTFILENAME $TTFONTFILEDIR

    n
    =0
    while [ $n -le $PLANENUM ]
    do
    m
    =`printf %02x $n`
    echo
    -n "[$n]"

    install $INSTALLMODE ${FONTNAME}${m}.enc $ENCDIR
    install $INSTALLMODE ${FONTNAME}${m}.afm $AFMDIR
    install $INSTALLMODE ${FONTNAME}${m}.tfm $TFMDIR
    install $INSTALLMODE ${FONTNAME}sl${m}.tfm $TFMDIR
    install $INSTALLMODE ${FONTNAME}${m}.pfb $PFBDIR

    n
    =`expr $n + 1`
    done

    echo

    install $INSTALLMODE ${FONTNAME}.map $MAPDIR
    install $INSTALLMODE $FDNAME $CJKDIR

    echo
    >> $UPDMAPCFG
    echo
    "Map ${FONTNAME}.map" >> $UPDMAPCFG

    # update cid
    -x.map

    echo
    "${FONTNAME}@Unicode@ unicode :0:${FONTFILENAME}" >> $CIDXMAP
    echo
    "${FONTNAME}sl@Unicode@ unicode :0:${FONTFILENAME}" >> $CIDXMAP

    mktexlsr

    #updmap
    -sys
    updmap

    read
    -p "Do you want remove all intermediate files?[n]" a
    if [ "$a" = "y" ] || [ "$a" = "Y" ]; then

    n
    =0
    while [ $n -le $PLANENUM ]
    do
    m
    =`printf %02x $n`
    echo
    -n "[$n]"

    rm
    -f ${FONTNAME}${m}.enc ${FONTNAME}${m}.afm ${FONTNAME}${m}.t1a \\
    ${FONTNAME}${m}.pfb ${FONTNAME}sl${m}.tfm ${FONTNAME}${m}.tfm

    n
    =`expr $n + 1`
    done

    echo

    rm
    -fv $FDNAME ${FONTNAME}.map
    fi

    echo
    echo
    "OK, all done. :-)"
    echo


    根據(jù)自己的需要可以將TEXMFHOME目錄設(shè)置成不同的地方,只要Latex能找到即可
    我將該目錄改為了/usr/share/texmf-tetex,如果相應(yīng)的目錄不存在,則需要自己新建。


    將windows系統(tǒng)中的字體文件拷到腳本所在目錄執(zhí)行腳本即可生成Latex所需字體文件,以simhei.ttf為例:

    sudo ./cvtfont.sh simhei.ttf simhei simhei







    posted @ 2007-05-16 13:34 all gone 閱讀(1123) | 評論 (0)編輯 收藏

    Struts2 入門

         摘要: 很久沒有看Java相關(guān)的東西了,這幾天才發(fā)現(xiàn)Struts2 已經(jīng)發(fā)布了,以前就聽說Struts2就是以前的Webwork2,只是作了少許的改動而已,我以前也沒看過Webwork,所以趕緊下來試了一把。Struts2的地址:http://struts.apache.org/2.x在Eclipse中新建了一個Tomcat工程(如果用WTP插件的話Dynamic Web工程)struts2Test,以下...  閱讀全文

    posted @ 2007-01-08 21:59 all gone 閱讀(8483) | 評論 (8)編輯 收藏

    Ubuntu下NVIDIA驅(qū)動的問題

    前幾天按照Ubuntu How-To上的NVIDIA驅(qū)動安裝說明安裝了8672版的驅(qū)動,結(jié)果發(fā)現(xiàn)只要退出X-Window,系統(tǒng)就會沒有反應(yīng),網(wǎng)上搜了搜,發(fā)現(xiàn)有人也有一樣的情況,按照說明重新安裝、重新配置Xorg,問題依然沒有解決,X-Window也起不來了。

    到NVIDIA網(wǎng)站上下了最新的8774版驅(qū)動后,趕緊找找看怎么自己裝,有人已經(jīng)寫好了
    在恢復(fù)模式下:
    需要gcc支持,如果沒有安裝則:
    apt-get install build-essential gcc
    刪除已經(jīng)安裝的NVIDIA驅(qū)動:
    apt-get --purge remove linux-restricted-modules-`uname -r` linux-restricted-modules-common nvidia-glx nvidia-settings nvidia-kernel-common
    安裝內(nèi)核headers
    apt-get install linux-headers-`uname -r`
    將下載下來的NVIDIA-Linux-x86-1.0-8774-pkg1.run解壓縮:
    sh ./NVIDIA-Linux-x86-1.0-8774-pkg1.run --extract-only
    進(jìn)入解壓后的NVIDIA-Linux-x86-1.0-8774-pkg1文件夾,執(zhí)行安裝:
    ./nvidia-installer -n --x-prefix=/usr/lib/xorg/
    最后由于默認(rèn)安裝到了/usr/lib/xorg/lig/xorg,需要將文件拷到對應(yīng)的目錄下:
    cp --no-dereference /usr/lib/xorg/lib/xorg/libX* /usr/lib/xorg/modules/

    cp /usr/lib/xorg/lib/xorg/modules/drivers/* /usr/lib/xorg/modules/drivers/

    cp --no-dereference /usr/lib/xorg/lib/xorg/modules/extensions/* /usr/lib/xorg/modules/extensions/

    posted @ 2006-09-22 15:42 all gone 閱讀(1048) | 評論 (0)編輯 收藏

    Qt 4下連接MySQL數(shù)據(jù)庫

    前天剛裝了個Qt4for windows,發(fā)現(xiàn)安裝的時候MySQL等數(shù)據(jù)庫插件都沒有安裝,像Qt X11版一樣,都需要自己安裝這些插件。

    在Qt的安裝目錄C:\Qt4.1.2\下,有個src目錄,進(jìn)入plugins\sqldrivers\mysql,可以看到兩個文件,main.cpp和mysql.pro,很顯然要用qmake來完成編譯、生成目標(biāo)。

    編譯前,首先保證依賴的MySQL頭文件和庫文件正確。首先MySQL安裝目錄下的include中的所有文件拷到qmake時能找到的目錄下,接著從lib/opt目錄下拷出libmysql.a,其實lib/opt下只有l(wèi)ibmysql.lib和libmysql.dll,從網(wǎng)上搜了一下找到一個方法從libmysql.dll生成libmysql.a:

    1 、安裝好MySQL (如果不愿意安裝,找個libmySQL.dll文件也可以)

    2、下載Pexports工具

    3、轉(zhuǎn)換操作: pexports libmysql.dll > libmysql.def

    4、使用MinGW的 dlltool轉(zhuǎn)換成為libmysql.a文件。dlltool --input-def libmysql.def --dllname libmysql.dll --output-lib libmysql.a -k

    5、嘗試是否成功:
    將生成的libmysql.a 拷到qmake的lib搜索路徑下后在plugins\sqldrivers\mysql目錄下做:
    qmake -project
    qmake
    make

    如果再出現(xiàn)象mysql_connect@xx (xx是數(shù)字)的錯誤提示。就執(zhí)行第6步。

    6、修改libmysql.def文件,給mysql_connect加上@xx,即mysql_connect@xx

    7、重做第4步

    8、然后嘗試第5步,如果還是出現(xiàn)錯誤提示。就作第6步。一直到?jīng)]有錯誤為止。

    最后C:\Qt4.1.2\plugins\sqldrivers下將會生成需要的libqsqlmysql.a和qsqlmysql.dll。

    找了一個測試文件,通過。
    #include?<QtSql>?
    #include?<QtGui>?


    bool?createConnection(){?
    QSqlDatabase?db?
    =?QSqlDatabase::addDatabase("QMYSQL");?
    db.setHostName("localhost");?
    db.setDatabaseName("test");?
    db.setUserName("test");?
    db.setPassword("");?

    if(!db.open()){?
    QMessageBox::critical(
    0,?QObject::tr("Database?Error"),?
    ??????????????????????????????db.lastError().text())
    ;?

    return?false
    ;?
    }?

    QSqlQuery?query
    ;?
    //query.exec("insert?into?book?values(?3,?'title',?'author')?");?
    query.exec("select?title?,?author?from?book?");?

    while?(query.next())?{?


    ????QString?title?
    =?query.value(0).toString();?
    ????QString?author?=?query.value(1).toString();?

    QMessageBox::critical(
    0,?title,author);?
    ????
    }?


    return?true
    ;?
    }?



    int?main(int?argc
    ,char**?argv){?

    QApplication?app(argc
    ,?argv);?
    ????if?(!createConnection()){?

    return?
    1;?
    }?
    ????????

    ????return?app.exec()
    ;?


    }?

    posted @ 2006-08-28 20:57 all gone 閱讀(2735) | 評論 (0)編輯 收藏

    EJB3.0 + Struts小試

         摘要: 一直想做一個 EJB3.0 結(jié)合 Struts 的例子,前天剛好從網(wǎng)上找到了一個相關(guān)的 Tutorial ,于是小試了一把,雖然只是完成了 Tutorial 上的一小點(diǎn)功能,但是感覺還是有必要寫下來,免得以后還要再去看別人的Tutorial 。 開發(fā)環(huán)境:?? ??? Eclipse3.2 + WTP1.5 , JBoss 4.0.3SP1 , jboss-EJB-3.0_RC...  閱讀全文

    posted @ 2006-08-11 13:52 all gone 閱讀(3065) | 評論 (0)編輯 收藏

    SSH(Spring + Struts + Hibernate)小試 之三

    SSH(Spring + Struts + Hibernate)小試 之三


    前面通過PlugIn我們實現(xiàn)了Spring Context的加載,不過僅僅加載Context并沒有什么實際
    意義,我們還需要修改配置,將Struts Action交給Spring容器進(jìn)行管理。下面將通過一個Regsit
    實例加以說明。

    首先準(zhǔn)備好regist.jsp和login.jsp,在regist.jsp中 的form有name,password,password2,email域。

    在struts-config.xml中添加配置:

    <form-bean name="registForm" type="com.lzy.forum.form.RegistForm" />

    <action path="/regist" name="registForm"
    type="org.springframework.web.struts.DelegatingActionProxy"

    validate="true" input="/regist.jsp" scope="request">
    <forward name="failure" path="/regist.jsp" />
    <forward name="success" path="/login.jsp" />
    </action>


    RegistForm,RegistAction按照原來Struts的方法去寫,我在RegistAction中加入了一個UserDAO對象
    userDAO,這個對象由Spring注入。

    <bean name="/regist" class="com.lzy.forum.action.RegistAction"
    singleton="false">
    <property name="userDAO">
    <ref local="userDAO" />
    </property>
    </bean>

    基本上SSH的架構(gòu)已經(jīng)完成,經(jīng)確認(rèn)后可以自己測試一下了。(完)

    posted @ 2006-07-18 16:41 all gone 閱讀(647) | 評論 (1)編輯 收藏

    SSH(Spring + Struts + Hibernate)小試 之二

    Spring和Struts結(jié)合有幾種方法,我選了最常用的PlugIn方式,在struts-config.xml中加入

    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    ??????<set-property property="contextConfigLocation"
    ?????????? ?value="/WEB-INF/action-servlet.xml" />
    ?</plug-in>

    WEB-INF目錄下的action-servlet.xml就是Spring的配置文件,下面給出的是整個的action-servlet.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "<beans>

    //Data Source

    ?<bean id="dataSource"
    ??class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    ??<property name="driverClassName">
    ???<value>com.mysql.jdbc.Driver</value>
    ??</property>
    ??<property name="url">
    ???<value>jdbc:mysql://localhost:3306/forum</value>
    ??</property>
    ??<property name="username">
    ???<value>test</value>
    ??</property>
    ??<property name="password">
    ???<null />
    ??</property>
    ?</bean>

    // For Hibernate
    ?<bean id="sessionFactory"
    ??class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    ??<property name="dataSource">
    ???<ref local="dataSource" />
    ??</property>
    ??<property name="mappingResources">
    ???<list>
    ????<value>com/lzy/forum/domain/User.hbm.xml</value>
    ????<value>com/lzy/forum/domain/Article.hbm.xml</value>
    ????<value>com/lzy/forum/domain/Board.hbm.xml</value>
    ???</list>
    ??</property>
    ??<property name="hibernateProperties">
    ???<props>
    ????<prop key="hibernate.dialect">
    ?????org.hibernate.dialect.MySQLDialect
    ????</prop>
    ????<prop key="hibernate.show_sql">true</prop>
    ???</props>
    ??</property>
    ?</bean>

    ?<bean id="transactionManager"
    ??class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    ?

    // For DAO
    ?<bean id="userDAO"
    ??class="com.lzy.forum.dao.impl.UserDAOHibernate">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    ?

    ?<bean id="boardDAO"
    ??class="com.lzy.forum.dao.impl.BoardDAOHibernate">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    ?<bean id="articleDAO"
    ??class="com.lzy.forum.dao.impl.ArticleDAOHibernate">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    //For Struts Action

    ?<bean name="/regist" class="com.lzy.forum.action.RegistAction"
    ??singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>

    ?</bean>


    ?<bean name="/login" class="com.lzy.forum.action.LoginAction"
    ??singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/boardManage"
    ??class="com.lzy.forum.action.BoardManageAction" singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/boardNavigate"
    ??class="com.lzy.forum.action.BoardNavigateAction" singleton="false">
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/boardDisplay"
    ??class="com.lzy.forum.action.BoardDisplayAction" singleton="false">
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/articleManage"
    ??class="com.lzy.forum.action.ArticleManageAction" singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>
    ??<property name="articleDAO">
    ???<ref local="articleDAO" />
    ??</property>


    ?</bean>


    </beans>

    經(jīng)過這樣的配置之后,Hibernate事務(wù)交由Spring管理,sessionFactory從Spring容器獲得。下面通過其中的一個DAO實例來看看這樣做帶來的方便。


    //BoardDAO.java

    package com.lzy.forum.dao;

    import java.util.ArrayList;

    import com.lzy.forum.domain.Board;

    public interface BoardDAO {
    ?
    ?public boolean isBoardExist(String name);
    ?
    ?public void addBoard(Board board);
    ?
    ?public void deleteBoard(Board board);
    ?
    ?public Board loadBoard(int id);
    ?
    ?public Board loadBoard(String name);
    ?
    ?public Board loadBoardWithArticles(int id);
    ?
    ?public ArrayList getRootBoardsList();
    ?
    ?
    ?
    }


    //BoardDAOHibernate.java

    package com.lzy.forum.dao.impl;

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.ListIterator;
    import java.util.Set;

    import org.hibernate.Hibernate;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    import com.lzy.forum.dao.BoardDAO;
    import com.lzy.forum.domain.Board;

    public class BoardDAOHibernate extends HibernateDaoSupport implements BoardDAO {

    ?public void deleteBoard(Board board) {
    ??// TODO Auto-generated method stub
    ??this.getHibernateTemplate().delete(board);
    ?}

    ?public void addBoard(Board board) {
    ??// TODO Auto-generated method stub
    ??this.getHibernateTemplate().saveOrUpdate(board);

    ?}

    ?public boolean isBoardExist(String name) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board where name = ? ", new Object[] { name });
    ??if (list.size() > 0) {
    ???// System.out.println("find it");
    ???return true;
    ??}
    ??return false;
    ?}

    ?public Board loadBoard(int id) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board where id = ? ", new Object[] { id });

    ??Board b = null;
    ??if (list.size() > 0) {
    ???b = (Board) list.get(0);
    ??}

    ??return b;
    ?}

    ?public Board loadBoard(String name) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board where name = ? ", new Object[] { name });

    ??Board b = null;
    ??if (list.size() > 0) {
    ???b = (Board) list.get(0);
    ??}

    ??return b;
    ?}

    ?public ArrayList getRootBoardsList() {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board b left join fetch b.ChildBoards where b.Parent = null order by b.id");
    ??System.out.println(list.size() + " root boards found ");
    ??

    ??ListIterator index = list.listIterator();
    ??while (index.hasNext()) {

    ???Board s = (Board) index.next();
    ???//this.getSession(true);
    ???//Hibernate.initialize(s.getChildBoards());
    ???///*
    ??? Set children? = (Set) s.getChildBoards();
    ??? Iterator it = children.iterator();
    ???
    ??? while(it.hasNext()){
    ??? Board b = (Board)it.next();
    ??? //Hibernate.initialize(b);
    ??? System.out.println(b.getName());
    ??? }
    ??? //*/

    ???//System.out.println(children.size() + "child(ren) found ");
    ???//s.setChildBoards(s.getChildBoards());
    ??}

    ??return list;
    ?}

    ?public Board loadBoardWithArticles(int id) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board b left join fetch b.Articles where b.Id = ? ", new Object[] { id });

    ??Board b = null;
    ??if (list.size() > 0) {
    ???b = (Board) list.get(0);
    ??}

    ??return b;

    ?}


    }


    BoardDAOHibernate繼承 HibernateDaoSupport后,通過getHibernateTemplate()得到一個HibernateTemplate實例,然后執(zhí)行CRUD操作,非常簡單。需要注意的是,由于執(zhí)行一次CRUD操作后,Hibernate session關(guān)閉,如果有使用延遲加載策略的對象沒有加載,在后面的Web層很容易出現(xiàn)如下錯誤:
    failed to lazily initialize a collection of role
    從網(wǎng)上搜到的解決方法是Open Session In View,
    <filter>
    ???? <filter-name>hibernateFilter</filter-name>
    ???? <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    ???? </filter-class>

    ???? <!-- singleSession默認(rèn)為true,若設(shè)為false則等于沒用OpenSessionInView -->
    ??? <init-param>
    ?????? <param-name>singleSession</param-name>
    ?????? <param-value>true</param-value>
    ??? </init-param>
    ? </filter>

    ?? <filter-mapping>
    ???? <filter-name>hibernateFilter</filter-name>
    ???? <url-pattern>*.do</url-pattern>
    ?? </filter-mapping>
    我試了試,還是有一些問題,所以后來還是放棄了這種方法,所有在Web層中需要的對象都必須在Business層中加載完成。如下面的代碼所示:

    ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board b left join fetch b.Articles where b.Id = ? ", new Object[] { id });


    這樣Hibernate和Spring的結(jié)合也算完成了。其他的一些DAO類和實現(xiàn)代碼我沒有給出,但是大同小異,和Board的實現(xiàn)類似。


    最后將是Struts 和Spring的結(jié)合,將在下一篇給出。(未完待續(xù))





    posted @ 2006-07-18 16:09 all gone 閱讀(950) | 評論 (0)編輯 收藏

    SSH(Spring + Struts + Hibernate)小試 之一

    之前對Spring Struts Hibernate都稍有了解,Spring的IOC給我留下了很深的印象,容器管理的對象生成
    方法極大地簡化了程序邏輯,Spring也提供了用于Web的Spring MVC 框架,由于我感覺其易用性還是不及
    Struts,所以我還是選擇Struts作為前端WEB框架,Hibernate我一直沒有在Web應(yīng)用中試過,這次當(dāng)然不會
    錯過機(jī)會了。


    開發(fā)環(huán)境的塔建我就不多說了,具體可以參考我以前的幾篇日志。

    在Eclipse中新建一個動態(tài)Web工程,將Struts 、Spring、Hibernate需要的jar都添加到WEB-INF/lib目錄下,
    將Struts標(biāo)簽所需的tld文件、struts-config.xml文件(可以由StrutsIDE生成)添加到WEB-INF下,另外在
    此目錄下添加一個Spring的配置文件applicationContext.xml。


    我參考的例子是夏昕的《深入淺出Hibernate》上的第6章,很好的一個論壇示例。

    首先按照書上的ER模型,在數(shù)據(jù)庫(MySQL)中建立相應(yīng)的數(shù)據(jù)庫。


    create database forum;

    use forum;

    create table user(
    ?id int not null auto_increment primary key,
    ?name varchar(50),
    ?pwd varchar(50),
    ?email varchar(50)

    )type=innodb;


    create table board(
    ?id int not null auto_increment primary key,?
    ?parent_id int,
    ?create_by int not null,
    ?name varchar(50) not null,
    ?remark varchar(255),
    ?create_time datetime,

    ?index(parent_id),
    ?index(create_by),

    ?foreign key(parent_id) references board(id) on delete cascade,
    ?foreign key(create_by) references user(id) on delete no action
    ?
    )type=innodb;


    create table article(
    ?id int not null auto_increment primary key,?
    ?parent_id int ,
    ?board_id int not null,
    ?article_type int not null,
    ?title varchar(255),
    ?body text,
    ?create_by int not null,

    ?create_time datetime,
    ?hits int unsigned,
    ?bytes int unsigned,
    ?last_update_by int not null,
    ?last_update_time datetime,

    ?index(parent_id),
    ?index(board_id),
    ?index(create_by),
    ?index(last_update_by),

    ?foreign key(parent_id) references article(id) on delete no action,
    ?foreign key(board_id) references board(id) on delete cascade,
    ?foreign key(create_by) references user(id) on delete no action,
    ?foreign key(last_update_by) references user(id) on delete no action
    ?
    )type=innodb;

    之后,我選擇了用Hibernate Sychonizer來生成映射文件和實體類,然后對生成的類進(jìn)行修改(刪掉了生成的Base類),
    實際上Hibernate Sychonizer生成的映射文件也有錯誤,需要修改,我也是后來在使用中發(fā)現(xiàn)的。

    //User.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    ?"-//Hibernate/Hibernate Mapping DTD//EN"
    ?"
    http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >

    <hibernate-mapping package="com.lzy.forum.domain">
    ?<class
    ??name="User"
    ??table="user"
    ?>

    ??<id
    ???name="Id"
    ???type="integer"
    ???column="id"
    ??>
    ???<generator class="native"/>
    ??</id>

    ??<property
    ???name="Name"
    ???column="name"
    ???type="string"
    ???not-null="false"
    ???length="50"
    ??/>
    ??<property
    ???name="Pwd"
    ???column="pwd"
    ???type="string"
    ???not-null="false"
    ???length="50"
    ??/>
    ??<property
    ???name="Email"
    ???column="email"
    ???type="string"
    ???not-null="false"
    ???length="50"
    ??/>
    ?

    ??<set name="ArticlesByLastUpdateBy" inverse="true" lazy="true">
    ???<key column="last_update_by"/>
    ???<one-to-many class="Article"/>
    ??</set>

    ??<set name="ArticlesByCreateBy" inverse="true" lazy="true">
    ???<key column="create_by"/>這里的create_by是后來修改的,Hibernate Sychonizer生成的有錯,后面有幾處同樣的錯誤】
    ???<one-to-many class="Article"/>
    ??</set>

    ??<set name="Boards" inverse="true" lazy="true">
    ???<key column="create_by"/>【這里的create_by是后來修改的】

    ???<one-to-many class="Board"/>
    ??</set>


    ?</class>?
    </hibernate-mapping>

    //User.java
    package com.lzy.forum.domain;


    public class User{
    ?private static final long serialVersionUID = 1L;

    //? primary key
    ?private java.lang.Integer id;

    ?// fields
    ?private java.lang.String name;
    ?private java.lang.String pwd;
    ?private java.lang.String email;

    ?// collections
    ?private java.util.Set<Article> articlesByLastUpdateBy;
    ?private java.util.Set<Article> articlesByCreateBy;
    ?private java.util.Set<Board> boards;
    ?
    ?
    ?public java.util.Set<Article> getArticlesByCreateBy() {
    ??return articlesByCreateBy;
    ?}
    ?public void setArticlesByCreateBy(java.util.Set<Article> articlesByCreateBy) {
    ??this.articlesByCreateBy = articlesByCreateBy;
    ?}
    ?public java.util.Set<Article> getArticlesByLastUpdateBy() {
    ??return articlesByLastUpdateBy;
    ?}
    ?public void setArticlesByLastUpdateBy(
    ???java.util.Set<Article> articlesByLastUpdateBy) {
    ??this.articlesByLastUpdateBy = articlesByLastUpdateBy;
    ?}
    ?public java.util.Set<Board> getBoards() {
    ??return boards;
    ?}
    ?public void setBoards(java.util.Set<Board> boards) {
    ??this.boards = boards;
    ?}
    ?public java.lang.String getEmail() {
    ??return email;
    ?}
    ?public void setEmail(java.lang.String email) {
    ??this.email = email;
    ?}
    ?public java.lang.Integer getId() {
    ??return id;
    ?}
    ?public void setId(java.lang.Integer id) {
    ??this.id = id;
    ?}
    ?public java.lang.String getName() {
    ??return name;
    ?}
    ?public void setName(java.lang.String name) {
    ??this.name = name;
    ?}
    ?public java.lang.String getPwd() {
    ??return pwd;
    ?}
    ?public void setPwd(java.lang.String pwd) {
    ??this.pwd = pwd;
    ?}


    }

    //Board.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    ?"-//Hibernate/Hibernate Mapping DTD//EN"
    ?"
    http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >

    <hibernate-mapping package="com.lzy.forum.domain">
    ?<class
    ??name="Board"
    ??table="board"
    ?>
    ???<meta attribute="sync-DAO">false</meta>
    ??<id
    ???name="Id"
    ???type="integer"
    ???column="id"
    ??>
    ???<generator class="native"/>
    ??</id>

    ??<property
    ???name="Name"
    ???column="name"
    ???type="string"
    ???not-null="true"
    ???length="50"
    ??/>
    ??<property
    ???name="Remark"
    ???column="remark"
    ???type="string"
    ???not-null="false"
    ???length="255"
    ??/>
    ??<property
    ???name="CreateTime"
    ???column="create_time"
    ???type="timestamp"
    ???not-null="false"
    ???length="19"
    ??/>
    ??<many-to-one
    ???name="CreateBy"
    ???column="create_by"
    ???class="User"
    ???not-null="true"
    ??>
    ??</many-to-one>
    ??<many-to-one
    ???name="Parent"
    ???column="parent_id"
    ???class="Board"???
    ???not-null="false"
    ???lazy="false">
    ??</many-to-one>
    ?

    ??<set name="Articles" inverse="true" lazy="true" order-by="id">
    ???<key column="board_id"/>【這里的board_id是后來修改的】
    ???<one-to-many class="Article"/>
    ??</set>

    ??<set name="ChildBoards" inverse="true"? lazy="true" order-by="id">
    ???<key column="parent_id"/>這里的parent_id是后來修改的】
    ???<one-to-many class="Board"/>
    ??</set>


    ?</class>?
    </hibernate-mapping>

    //Board.java
    package com.lzy.forum.domain;

    ?


    public class Board? {
    ?private static final long serialVersionUID = 1L;

    //? primary key
    ?private java.lang.Integer id;

    ?// fields
    ?private java.lang.String name;
    ?private java.lang.String remark;
    ?private java.util.Date createTime;

    ?// many to one
    ?private com.lzy.forum.domain.User createBy;
    ?private com.lzy.forum.domain.Board parent;

    ?// collections
    ?private java.util.Set<com.lzy.forum.domain.Article> articles;
    ?private java.util.Set<com.lzy.forum.domain.Board> childBoards;
    ?
    ?
    ?public java.util.Set<com.lzy.forum.domain.Article> getArticles() {
    ??return articles;
    ?}
    ?public void setArticles(java.util.Set<com.lzy.forum.domain.Article> articles) {
    ??this.articles = articles;
    ?}
    ?public java.util.Set<com.lzy.forum.domain.Board> getChildBoards() {
    ??return childBoards;
    ?}
    ?public void setChildBoards(java.util.Set<com.lzy.forum.domain.Board> childBoards) {
    ??this.childBoards = childBoards;
    ?}
    ?public com.lzy.forum.domain.User getCreateBy() {
    ??return createBy;
    ?}
    ?public void setCreateBy(com.lzy.forum.domain.User createBy) {
    ??this.createBy = createBy;
    ?}
    ?public java.util.Date getCreateTime() {
    ??return createTime;
    ?}
    ?public void setCreateTime(java.util.Date createTime) {
    ??this.createTime = createTime;
    ?}
    ?public java.lang.Integer getId() {
    ??return id;
    ?}
    ?public void setId(java.lang.Integer id) {
    ??this.id = id;
    ?}
    ?public java.lang.String getName() {
    ??return name;
    ?}
    ?public void setName(java.lang.String name) {
    ??this.name = name;
    ?}
    ?public com.lzy.forum.domain.Board getParent() {
    ??return parent;
    ?}
    ?public void setParent(com.lzy.forum.domain.Board parent) {
    ??this.parent = parent;
    ?}
    ?public java.lang.String getRemark() {
    ??return remark;
    ?}
    ?public void setRemark(java.lang.String remark) {
    ??this.remark = remark;
    ?}


    }

    //Article.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    ?"-//Hibernate/Hibernate Mapping DTD//EN"
    ?"
    http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " >

    <hibernate-mapping package="com.lzy.forum.domain">
    ?<class
    ??name="Article"
    ??table="article"
    ?>
    ??<meta attribute="sync-DAO">false</meta>
    ??<id
    ???name="Id"
    ???type="integer"
    ???column="id"
    ??>
    ???<generator class="native"/>
    ??</id>

    ??<property
    ???name="ArticleType"
    ???column="article_type"
    ???type="integer"
    ???not-null="true"
    ???length="11"
    ??/>
    ??<property
    ???name="Title"
    ???column="title"
    ???type="string"
    ???not-null="false"
    ???length="255"
    ??/>
    ??<property
    ???name="Body"
    ???column="body"
    ???type="string"
    ???not-null="false"
    ??/>
    ??<property
    ???name="Hits"
    ???column="hits"
    ???type="integer"
    ???not-null="false"
    ???length="10"
    ??/>
    ??<property
    ???name="Bytes"
    ???column="bytes"
    ???type="integer"
    ???not-null="false"
    ???length="10"
    ??/>
    ??<property
    ???name="CreateTime"
    ???column="create_time"
    ???type="timestamp"
    ???not-null="false"
    ???length="19"
    ??/>
    ??<property
    ???name="LastUpdateTime"
    ???column="last_update_time"
    ???type="timestamp"
    ???not-null="false"
    ???length="19"
    ??/>
    ??<many-to-one
    ???name="LastUpdateBy"
    ???column="last_update_by"
    ???class="User"
    ???not-null="true"
    ??>
    ??</many-to-one>
    ??<many-to-one
    ???name="CreateBy"
    ???column="create_by"
    ???class="User"
    ???not-null="true"
    ??>
    ??</many-to-one>
    ??<many-to-one
    ???name="Parent"
    ???column="parent_id"
    ???class="Article"
    ???not-null="false"
    ??>
    ??</many-to-one>
    ??<many-to-one
    ???name="Board"
    ???column="board_id"
    ???class="Board"
    ???not-null="true"
    ??>
    ??</many-to-one>
    ?

    ??<set name="Articles" inverse="true" lazy="false" order-by="id">
    ???<key column="parent_id"/>【這里的parent_id是后來修改的】
    ???<one-to-many class="Article"/>
    ??</set>


    ?</class>?
    </hibernate-mapping>



    //Article.java
    package com.lzy.forum.domain;

    import java.util.Date;

    ?


    public class Article? {
    ?private static final long serialVersionUID = 1L;
    ?// primary key
    ?private java.lang.Integer id;

    ?// fields
    ?private java.lang.Integer articleType;
    ?private java.lang.String title;
    ?private java.lang.String body;
    ?private java.lang.Integer hits;
    ?private java.lang.Integer bytes;
    ?private java.util.Date lastUpdateTime;
    ?private java.util.Date createTime;
    ?

    ?// many to one
    ?private com.lzy.forum.domain.User lastUpdateBy;
    ?private com.lzy.forum.domain.User createBy;
    ?private com.lzy.forum.domain.Article parent;
    ?private com.lzy.forum.domain.Board board;

    ?// collections
    ?private java.util.Set<com.lzy.forum.domain.Article> articles;

    ?public java.util.Set<com.lzy.forum.domain.Article> getArticles() {
    ??return articles;
    ?}

    ?public void setArticles(java.util.Set<com.lzy.forum.domain.Article> articles) {
    ??this.articles = articles;
    ?}

    ?public java.lang.Integer getArticleType() {
    ??return articleType;
    ?}

    ?public void setArticleType(java.lang.Integer articleType) {
    ??this.articleType = articleType;
    ?}

    ?public com.lzy.forum.domain.Board getBoard() {
    ??return board;
    ?}

    ?public void setBoard(com.lzy.forum.domain.Board board) {
    ??this.board = board;
    ?}

    ?public java.lang.String getBody() {
    ??return body;
    ?}

    ?public void setBody(java.lang.String body) {
    ??this.body = body;
    ?}

    ?public java.lang.Integer getBytes() {
    ??return bytes;
    ?}

    ?public void setBytes(java.lang.Integer bytes) {
    ??this.bytes = bytes;
    ?}

    ?public com.lzy.forum.domain.User getCreateBy() {
    ??return createBy;
    ?}

    ?public void setCreateBy(com.lzy.forum.domain.User createBy) {
    ??this.createBy = createBy;
    ?}

    ?public java.lang.Integer getHits() {
    ??return hits;
    ?}

    ?public void setHits(java.lang.Integer hits) {
    ??this.hits = hits;
    ?}

    ?public java.lang.Integer getId() {
    ??return id;
    ?}

    ?public void setId(java.lang.Integer id) {
    ??this.id = id;
    ?}

    ?public com.lzy.forum.domain.User getLastUpdateBy() {
    ??return lastUpdateBy;
    ?}

    ?public void setLastUpdateBy(com.lzy.forum.domain.User lastUpdateBy) {
    ??this.lastUpdateBy = lastUpdateBy;
    ?}

    ?public java.util.Date getLastUpdateTime() {
    ??return lastUpdateTime;
    ?}

    ?public void setLastUpdateTime(java.util.Date lastUpdateTime) {
    ??this.lastUpdateTime = lastUpdateTime;
    ?}

    ?public com.lzy.forum.domain.Article getParent() {
    ??return parent;
    ?}

    ?public void setParent(com.lzy.forum.domain.Article parent) {
    ??this.parent = parent;
    ?}

    ?public java.lang.String getTitle() {
    ??return title;
    ?}

    ?public void setTitle(java.lang.String title) {
    ??this.title = title;
    ?}
    ?public java.util.Date getCreateTime(){
    ??return createTime;
    ?}

    ?public void setCreateTime(java.util.Date createTime) {
    ??// TODO Auto-generated method stub
    ??this.createTime = createTime;
    ?}
    ?

    }

    接下來將會在web中加入Spring支持和為實體類提供DAO支持。(未完待續(xù))

    posted @ 2006-07-18 09:54 all gone 閱讀(1785) | 評論 (2)編輯 收藏

    主站蜘蛛池模板: 色偷偷亚洲第一综合| 成年女人18级毛片毛片免费| 亚洲欧美日韩久久精品| 亚洲精品国产字幕久久不卡| 午夜精品在线免费观看| 免费播放一区二区三区| 国产精品玖玖美女张开腿让男人桶爽免费看 | 日本免费大黄在线观看| jizz在线免费观看| 亚洲色无码专区一区| 亚洲精品免费在线视频| 国产精品亚洲аv无码播放| 日韩亚洲精品福利| 免费观看理论片毛片| 久久久久久99av无码免费网站 | 亚洲视频在线播放| 国产亚洲自拍一区| 男人的天堂亚洲一区二区三区 | 国产成人亚洲精品蜜芽影院| 亚洲成人免费电影| 亚洲AV午夜福利精品一区二区| 午夜亚洲国产成人不卡在线| 在线观看免费成人| 在线视频精品免费| 久久国产精品成人片免费| 国产午夜精品理论片免费观看 | 久久久久久亚洲精品不卡| 国产又大又黑又粗免费视频| 免费三级毛片电影片| 最近高清中文字幕免费| 久久99热精品免费观看牛牛| 中国一级特黄的片子免费| 成在人线av无码免费高潮水| 亚欧洲精品在线视频免费观看| 羞羞视频免费网站日本| 草久免费在线观看网站| 有码人妻在线免费看片| a级毛片免费观看网站| 国产免费人成视频尤勿视频 | 国产成A人亚洲精V品无码性色| 国产亚洲av片在线观看播放|