SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm
例如:
select getdate()
2004-09-12 11:06:08.177
这对于在要不同数据库间转移数据或者习惯oracle日期格式YYYY-MM-DD HH24:MI:SS的人多少有些不方便.
我整理了一下SQL Server里面可能经常会用到的日期格式转换方法:
举例如下:
select CONVERT(varchar, getdate(), 120 )
2004-09-12 11:06:08
select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','')
20040912110608
select CONVERT(varchar(12) , getdate(), 111 )
2004/09/12
select CONVERT(varchar(12) , getdate(), 112 )
20040912
select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12
其它我不常用的日期格式转换方法:
select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004
select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004
select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004
select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004
select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004
select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004
select CONVERT(varchar(12) , getdate(), 108 )
11:06:08
select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1
select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004
select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1
select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177
更多的及具体说明请参考SQL Server的联机丛书.
Trackback:
http://fengyu.china.com/sqlserver_datefmt.htm
全面掌握
百度空间技巧之CSS详细说明
body 整个空间页面{background-color:#FFFFFF}
--------------------------------------------------------------------------------
空间名称和简介区域
#header 主体部分{height:89px;background:#3399CC}
#header div.lc 左背景图{background:url(temp1/hdl.jpg) no-repeat}
#header div.rc 右背景图{background:url(temp1/hdr.jpg) no-repeat top right}
#header div.tit 空间名称{top:8px;left:20px;line-height:22px;font-size:20px;font-family:黑体}
#header div.tit a.titlink 空间名称链接{color:#FFFFFF;text-decoration:none}
#header div.tit a.titlink:visited{color:#FFFFFF;text-decoration:none}
#header div.desc 空间简介{top:33px;left:20px;color:#FFFFFF;font-size:13px}
#tabline TAB菜单下方的横线{top:89px;background-color:#FFFFFF}
#tab TAB菜单主体{top:67px;background:url(temp1/tabbg.gif) repeat-x}
#tab a.on,#tab a.on:link,#tab a.on:visited TAB选中状态{margin-top:3px;border-left:1px solid
#FFFFFF;border-right:1px solid #FFFFFF;border-top:1px solid #FFFFFF;line-
height:19px;background-color:#F3F1F1;color:#197CAE;font-size:14px}
#tab span TAB与TAB之间的分割符“|”{color:#FFFFFF;font-size:14px}
#tab a:link TAB未选中状态{color:#FFFFFF;text-decoration:none;font-size:14px}
#tab a:visited{color:#FFFFFF;text-decoration:none;font-size:14px}
#tab2 设置TAB菜单主体{background:#DAE9F5}
#tab2 span TAB选中状态{color:#000000;font-size:12px;font-weight:bold}
#tab2 a TAB未选中状态{font-size:12px}
#tab2 a:link{color:#0000CC}
#tab2 a:visited{color:#0000CC}
--------------------------------------------------------------------------------
.stage 内容区域(TAB菜单与版权信息之间的区域){background:#F3F1F1}
其它区域(即访问量等信息)
#comm_info 主体{color:#333333;font-family:Arial;text-align:left}
#comm_info div.line 分界线{margin-top:5px;line-height:8px;border-top:1px solid #D2E9F4}
#comm_info a 链接{color:#3399CC}
--------------------------------------------------------------------------------
页码区域
#page 主体{height:30px;font-size:14px;font-family:Arial;text-align:center}
#page span 当前页码(不可点击){padding:3px;color:#000000;font-size:14px;font-weight:bold}
#page a.pc 上一页和下一页{color:#3399CC;font-size:14px;font-weight:bold}
#page a.pc:visited{color:#3399CC}
#page a.pi 页码(可点击){padding:3px;color:#3399CC;font-size:14px}
#page a.pi:visited{color:#3399CC}
--------------------------------------------------------------------------------
模块
.mod {margin-bottom:10px}
.modhandle{cursor:move}
.modth 模块标题栏主体{height:24px}
.modhead{padding:4px 4px 0 4px}
.modopt 模块操作区(如写新文章){padding:4px 4px 0 0}
.modtit 模块标题区(如文章列表){color:#FFFFFF;font-size:12px;font-weight:bold}a.modtit
{color:#FFFFFF}a.modtit:visited{color:#FFFFFF}
.modtitlink{color:#FFFFFF;font-size:12px;font-weight:bold}a.modtitlink{color:#FFFFFF;text-
decoration:none}a.modtitlink:visited{color:#FFFFFF;text-decoration:none}a.modtitlink:hover
{color:#FF5100;text-decoration:underline}
.modact 操作文字链接(如文章列表){color:#FFFFFF;font-size:12px}a.modact:link
{color:#FFFFFF}a.modact:visited{color:#FFFFFF}
.modbox 模块内容区{padding:10px 10px 0 10px;background-color:#FFFFFF}
.modtl 模块左上角背景{background:url(temp1/ptitl.gif) no-repeat top left;line-height:1px}
.modtc 模块中上背景{background:url(temp1/ptitc.gif) repeat-x}
.modtr 模块右上角背景{background:url(temp1/ptitr.gif) no-repeat top right;line-height:1px}
.modbl 模块左下角背景{background-color:#FFFFFF;line-height:1px}
.modbc 模块中下背景{background-color:#FFFFFF;line-height:1px}
.modbr 模块右下角背景{background-color:#FFFFFF;line-height:1px}
--------------------------------------------------------------------------------
文章区域
#m_blog div.tit 文章标题{font-size:14px;font-weight:bold}
#m_blog div.tit a 文章标题链接{color:#333333;font-size:14px;font-weight:bold}
#m_blog div.tit a:visited{color:#333333}
#m_blog div.date 文章发表日期{margin:5px 0 8px 0;color:#666666}
#m_blog div.cnt 文章内容{color:#333333;line-height:20px;font-size:14px}
#m_blog div.more{margin:14px 0 16px 0}
#m_blog div.more a 阅读全文链接{color:#3399CC;font-size:14px}
#m_blog div.more a:visited{color:#3399CC}
#m_blog div.opt 文章操作区(如编辑、评论等){color:#666666;font-size:12px}
#m_blog div.opt a 文章操作链接{color:#3399CC;font-size:12px}
#m_blog div.opt a:visited{color:#3399CC}
#m_blog div.line 分界线{margin-top:17px;line-height:17px;border-top:1px solid #D2E9F4}
#m_blog div.none 无文章提示信息{padding:100px 0 100px 0;color:#333333;font-size:14px}
--------------------------------------------------------------------------------
个人档案区域
#m_pro a 链接{color:#3399CC}
#m_pro a:visited{color:#3399CC}
#m_pro div.image 个人头像{text-align:center}
#m_pro div.act 操作区(如加为好友、发送消息){margin-top:10px}
#m_pro div.user 用户名{margin-top:10px;color:#333333;font-size:12px;font-weight:bold}
#m_pro div.desc 用户简介{color:#333333;font-size:12px}
#m_pro div.line 分界线{margin-top:17px;line-height:17px;border-top:1px solid #D2E9F4}
#m_pro td{color:#333333;line-height:24px;font-size:14px}
--------------------------------------------------------------------------------
相册区域
#m_album div.image 照片{text-align:center}
#m_album div.page {color:#666666;font-size:12px;text-align:center}
#m_album div.page a{color:#0000CC;font-size:12px}
#m_album div.page a:visited{color:#0000CC}
--------------------------------------------------------------------------------
友情链接区域
#m_links div.item 子项{color:#333333;font-size:12px}
#m_links div.item a 名称(链接){color:#3399CC;font-size:12px;text-decoration:none}
#m_links div.item a:visited{color:#3399CC}
#m_links div.line 分界线{margin-top:5px;line-height:8px;border-top:1px solid #D2E9F4}
--------------------------------------------------------------------------------
文章分类
#m_artclg div.item 子项{color:#666666;font-size:12px}
#m_artclg div.item a 分类名称(链接){color:#3399CC;font-size:12px}
#m_artclg div.item a:visited{color:#3399CC}
#m_artclg div.line 分界线{margin-top:5px;line-height:8px;border-top:1px solid #D2E9F4}
--------------------------------------------------------------------------------
最新评论区域
#m_comment div.item 子项{color:#333333;font-size:12px}
#m_comment div.item a 发表人(链接){color:#3399CC;font-size:12px}
#m_comment div.item a:visited{color:#3399CC}
#m_comment div.item a.cnt 评论摘要(链接){color:#333333;font-size:12px;text-
decoration:none}
#m_comment div.item a.cnt:visited{color:#333333;text-decoration:none}
#m_comment div.item a.cnt:hover{color:#333333;text-decoration:underline}
#m_comment div.line 分界线{margin-top:5px;line-height:8px;border-top:1px solid #D2E9F4}
--------------------------------------------------------------------------------
相册列表
#m_albumlist div.note{color:#333333;font-size:14px}
#m_albumlist div.desc 简介{margin-bottom:12px;padding:3px 10px 3px 10px;line-
height:22px;background-color:#F2F2F2;font-size:14px}
#m_albumlist div.none 无照片提示信息{padding:100px 0 100px 0;color:#333333;font-size:14px}
#m_albumlist div.line 分界线{margin-top:10px;line-height:16px;border-top:1px solid #D2E9F4}
#m_albumlist div.tit 照片标题{margin:6px 0 7px 0;color:#333333;font-size:14px}
#m_albumlist div.tit a 照片标题链接{color:#3399CC;font-size:14px}
#m_albumlist div.tit a:visited{color:#3399CC}
#m_albumlist span.count 照片数量{color:#666666;font-size:12px;font-weight:bold}
#m_albumlist span.size 照片尺寸{color:#999999;font-size:12px;font-family:Arial}
#m_albumlist a.act 操作区链接(如编辑、删除){color:#3399CC;font-size:12px}
#m_albumlist a.act:visited{color:#3399CC}
#m_albumlist a.page 页码链接{color:#0000CC;font-size:14px}
#m_albumlist a.page:visited{color:#0000CC}
#m_albumlist td.image{padding:5px;border:1px solid #999999;background:#FFFFFF}
--------------------------------------------------------------------------------
好友列表
#m_friend div.filter{margin-bottom:10px;padding-left:10px;padding-
top:10px;height:27px;line-height:27px}
#m_friend div.catalog{margin-bottom:10px;padding-left:10px;height:27px;line-
height:27px;background-color:#F2F2F2;font-size:14px}
#m_friend div.user{margin-top:4px;color:#333333;font-size:12px}
#m_friend div.user a 好友名称(链接){color:#3399CC;font-size:12px}
#m_friend div.user a:visited{color:#3399CC}
#m_friend div.line 分界线{margin-top:10px;line-height:16px;border-top:1px solid #D2E9F4}
--------------------------------------------------------------------------------
设置访问统计、模板设置
#m_setting a 链接{color:#3399CC}
#m_setting a:visited{color:#3399CC}
#m_setting 主体{line-height:22px;color:#333333;font-size:14px}
#m_setting img.sel 模板预览图(选中状态){border:4px solid #FFDB7B}
#m_setting img.unsel 模板预览图(未选中状态){border:1px solid #D2D2D2}
#m_setting span.tit 模板标题名称{font-size:14px}
#m_setting span.usr 作者名{color:#666666}
#m_setting div.sel “当前模板”文字{padding-top:6px;font-size:14px;font-weight:bold}
#m_setting div.line 分界线{margin-top:20px;line-height:16px;border-top:1px solid #D2E9F4}
--------------------------------------------------------------------------------
系统公告
#m_sysinfo a 链接{color:#3399CC}
#m_sysinfo a:visited{color:#3399CC}
#m_sysinfo 主体{line-height:22px;color:#333333;font-size:14px}
#m_sysinfo span.new 最新{color:#FF0000;font-size:10px;font-family:Arial}
#m_sysinfo span.date 发布时间{color:#666666;font-size:14px}
--------------------------------------------------------------------------------
基本选项
#m_setbase 主体{color:#333333;font-size:14px}
#m_setbase td{color:#333333;font-size:14px}
#m_setbase div.line 分界线{margin-top:5px;line-height:8px;border-top:1px solid #D2E9F4}
--------------------------------------------------------------------------------
网友评论
#in_comment 主体{width:710px}
#in_comment div.tit 标题{margin-bottom:12px;color:#333333;font-size:14px;font-weight:bold}
#in_comment div.user 发表人名{margin-bottom:6px;color:#333333;font-size:12px}
#in_comment div.user a 发表人名(链接){color:#3399CC;font-size:12px}
#in_comment div.user a:visited{color:#3399CC}
#in_comment div.user span.date 发表时间{color:#666666;font-size:12px}
#in_comment div.desc 评论内容{color:#333333;font-size:12px}
#in_comment div.line 分界线{margin-top:17px;line-height:17px;border-top:1px solid #D2E9F4}
TrackBack:
http://www.mboba.com/art/517_16.htm
Tomcat是Sun和Apache合作产生出来的JSP Server, 它支持Servlet 和JSP. Tomcat本身可以作为Web Server, 当处理静态页面时,Tomcat不如Apache迅速,不象Apache一样可配置. Apache作为最流行的Web服务器,它功能强大,高效,但并不支持JSP及servlet,所以通常的做法是把它们整合起来,让Apache处理静态页面,而把动态页面的请求交给Tomcat处理,发挥各自的优势. 通过在Apache中加载整合模块和进行设置,Apache就能够根据URL,把不属于自己的请求转给Tomcat. 要让Apache和Tomcat联合工作,还必需有一个连接器(connector)把它们联系起来. Connector对于性能、配置的方便性有很重要的影响,目前大致上有JK1.x,JK2, mod_webapp三种connector可以使用.JK使用比较广泛.JK2是JK1.x的改进,比较新。这三种Connector的配置方法大相径庭,在参考别人的整合方法时一定要注意. 另外,Tomcat是用Java写的,所以你的系统必须有JDK或JRE. 我的OS是Solaris9,用到的版本分别是Apache 2.0.47 ; Tomcat 5.0.27 ; Jk2 2.0.4; J2sdk 1.4.2_05.
现在开始: 好了,先去下载要用到了软件,它们都是for free的. Apache ,Tomcat ,Jk2在Apache的官方网站上都可以下的到. http://www.apache.org JDK 在Sun的网站上. http://www.sun.com 以下是我下载到的: httpd-2.0.47.tar.gz jakarta-tomcat-5.0.27.tar.gz jakarta-tomcat-connectors-jk2-src-current.tar.gz j2sdk-1_4_2_05-solaris-sparc.tar.Z (32bit的, 先安装这 个再安装下面64bit的) j2sdk-1_4_2_05-solaris-sparcv9.tar.Z(最后两个是Solaris的Package,对于其他的系统下可用,不过可以下载相应的版本.) 安装Apache 对于Apache的安装,有很多帖子都介绍过, 安装时注意一点:一定要有 --enable-so 加载so模块,这是整合要用到的. gzip –d httpd-2.0.47.tar.gz tar xvf httpd-2.0.47.tar cd httpd-2.0.47 ./configure – with-layout=Apache2 -prefix=/path to install directory -enable-so make make install 好了,Apache的安装完成了.
我的安装目录是/usr/local/apahce2.修改apache的http.conf ServerName name OfYourServer Group nogroup 进入/usr/local/apache2/bin 执行 ./apachectl start 启动apache (./apachectl stop 停止) 如果成功,通过浏览器就可以看到Apche的默认主页了 http://ServerIp (httpd –l 可以列出已经加载的模块) 安装JDK Java是SUN开发的,所以它在自家的OS上预装了java的运行环境. java -version 可以看到java的版本号.Soaris9是1.4.1_01a uncompress j2sdk-1_4_2_05-solaris-sparc.tar.Z tar xvf j2sdk-1_4_2_05-solaris-sparc.tar 解压后得到几个SUNW开头的文件,把它们放到一个目录下 先要将以前的java包删除! pkgrm SUNWj3dmo SUNWj3man SUNWj3dev SUNWj3rt pkgrm SUNWlj3dv SUNWlj3rt (如果有的话,pkginfo | grep SUNWj3 查看) 添加新包, pkgadd –d ./ (在刚才放解压的几个SUNW目录) 再安装64bit的包, 同样 uncompress j2sdk-1_4_2_05-solaris-sparcv9.tar.Z tar xvf j2sdk-1_4_2_05-solaris-sparcv9.tar pkgadd –d ./ 好了,安装完了.
java –version ,看版本号变了! 详细的说明,参考SUN网站上的文档! 安装Tomcat 在安装Tomcat之前,要设置两个环境变量: JAVA_HOME =/usr/j2se CLASSPATH =/usr/j2se/lib:/usr/j2se/jre/lib (这是针对Solaris9的,Solaris8 /usr/java1.2; Solaris7 /usr/java1.1) (其他的系统下,是你安装JDK的目录) export JAVA_HOME CLASSPATH 有了,这两个变量,Tomcat才能安装. jakarta-tomcat-5.0.27.tar.gz 是个二进制文件解压后解可用. 我把它解压到了,/usr/local/ src/jakarta-tomcat-5.0.27 建一个链接 ln –s /usr/local/ src/jakarta-tomcat-5.0.27 /usr/local/tomcat 这样以后升级就方便了,刚才的apache也应该这么做. 设置相应的变量: CATALINA_HOME=/usr/local/tomcat CATALINA_BASE=/usr/local/tomcat export CATALINA_HOME CATALINA_BASE 进入/usr/local/tomcat/bin ./startup.sh 启动tomcat 通过浏览器 http://SeverIP:8080 看到了一只猫!(5.0才有吧,4.X没看到) port 8080 是Tomcat的默认端口 安装JK2 如果以上安装顺利的话,继续安装JK2吧 先解压到/usr/local/src下得到了, jakarta-tomcat-connectors-jk2-2.0.4-src 进入目录, cd jk/native2 ./buildconf.sh (我没成功,跳过了) ./configure&--with-apxs2=/usr/local/apache2/bin/apxs& make make install (如果不成功,把mod_jk2.so&拷贝到Apache得modules下) cp&jk/build/jk2/apache2/mod_jk2.so& /usr/local/apache2/modules 还有一个jkjni.so&,说是用来启动Apache 时自动启动Tomcat的,如果就也拷贝吧.我没有看到! cp&jk/build/jk2/apache2/jkjni.so&/usr/local/apache2/modules 整合 步入正题了,整合涉及到了4个配置文件 Apache 的 httpd.conf 和 workers2.properties (创建) Tomcat 的 server.xml 和 jk2.properties (不过这两个文件,我没改过也成功了) &httpd.conf 在Apache中添加mod_jk2.so模块: LoadModule&jk2_module&modules/mod_jk2.so workers2.properties: 这是我的workers2.properties #&Example&socket&channel,&override&port&and&host [channel.socket:localhost:8009] port=8009 host=127.0.0.1 #&define&the&worker [ajp13:localhost:8009] channel=channel.socket:localhost:8009 #&Uri&mapping [uri:/jsp-examples/*] worker=ajp13:localhost:8009 好了,重启Apache和Tomcat http://ServerIp/jsp-examples 如果看到的效果和 http://ServerIp:8080/jsp-examples 一样就说明整合成功.
出处:http://www.chinabs.net/webj2ee/default.asp?infoid=424
Hibernate.cfg.xml配置文件:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "hibernate-configuration-2.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- properties -->
<!-- jndi -->
<property name="connection.datasource">java:comp/env/jdbc/quickstart</property>
<property name="connection.provider_class">net.sf.hibernate.connection.DatasourceConnectionProvider</property>
<property name="dialect">net.sf.hibernate.dialect.SQLServerDialect</property>
<!-- jdbc
<property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=pubs</property>
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
-->
<property name="jdbc.fetch_size">50</property><!-- 一次读的数据库记录数 -->
<property name="jdbc.batch_size">30</property><!-- 设定对数据库进行批量删除 -->
<property name="show_sql">true</property><!-- 将Hibernate发送给数据库的sql显示出来 -->
<!-- Mapping files -->
<mapping resource="cat.hbm.xml"/>
</session-factory>
</hibernate-configuration>
数据库表主键的知识点:
Generator 为每个 POJO 的实例提供唯一标识。一般情况,我们使用“native”。class 表示采用由生成器接口net.sf.hibernate.id.IdentifierGenerator 实现的某个实例,其中包括:
“assigned”
主键由外部程序负责生成,在 save() 之前指定一个。
“hilo”
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
“seqhilo”
与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。
“increment”
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。
“identity”
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。
“sequence”
采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。
“native”
由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。
“uuid.hex”
由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
“uuid.string”
与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。
“foreign”
使用另外一个相关联的对象的标识符作为主键。
以下举例:
1、指定参数的情况:
<id name="id" unsaved-value="0">
<generator class="sequence">
<param name="sequence">SEQ_CHILD</param>
</generator>
</id>
使用的是sequence,适合oracle数据库;
2、对于sql server2000中的数据库子增字段,在配置文件使用下列方法实现:
<id name="id" type="long" unsaved-value="0">
<column name="id" sql-type="numeric" not-null="true" />
<generator class="identity" />
</id>
这里主要是:identity:代表由sql server2000数据库自己提供子增字段.如果要hibernate自己提供,则用increment关键字来实现
3、如果表中的主键用字符串类型:可以用hibernate自己提供的方法实现主键唯一:
<id name="id" type="string" unsaved-value="null">
<column name="cid" sql-type="char(32)" not-null="true" />
<generator class="uuid.hex" />
</id>
使用的是uuid.hex: 采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库。
重要的知识点:
1. 如果有部门表,有员工表,员工表中有dep_id,则表部门类和员工类是one-to-many的关系:
可以使用: ( 在部门类department中使用下列)
Department类:
/** 部门的所有员工 */
private Set staffs = new TreeSet();
xml的文件:
<set name="staffs" >
<key column="dep_id"/>
<one-to-many class="hbp.sys.data.Staff"/>
</set>
如果是list,需要用索引<index> </index>,具体其中的含义,不是很明白.待以后研究
2. 如果部门要有一个负责人,即部门表(tb_department)中有一个字段:staff_id.
那么表示部门和负责人之间的关系是many-to-one的关系
Department类:
/** 部门负责人id */
private Staff staff;
xml 文件
<many-to-one name="staff" class="hbp.sys.data.Staff" column="staff_id"/>
3. 多对多关系,一般我们是做一个中间关联表.我用角色和权限做了个例子,
Right(id,name) Role(id,name) 中间表:tb_role_right(role_id,right_id)
Right类中有一个Role的集合:private Set roles=new TreeSet();
Role类中也有一个Right的集合:private Set rights=new TreeSet();
则两者是明显的多对多关系.使用many-to-many来实现;
xml文件中
right.hbm.xml:如下:
<set name="roles" table="tb_role_right" cascade="all">
<key column="right_id"/>
<many-to-many column="role_id" class="hbp.sys.data.Role"/>
</set>
role.hbm.xml文件中类似:
<set name="rights" table="tb_role_right" cascade="all">
<key column="role_id"/>
<many-to-many column="right_id" class="hbp.sys.data.Right"/>
</set>
4. 几个值得注意的问题:
a)在xml?映射文件中,写类的名字时一定用类的全名:即:包+类名如:(hbp.sys.data.Staff),这个错误使我费了半天劲.:(
b)我在写实现基本DAO操作时,写了
session.delete("from Right as right where right.id="+id);
程序死活报错,我折腾了半天,跟踪到底,才恍然大悟,hibernate在解析sql语句的时候把
其中的right,当成了数据库中的右连接("保留字"),唉,这种关键字,不能随便用啊,:)
5. hibernate中HQL语言的查询根据你的sql的不同而返回不同的对象类型.
如果你使用session.find(String hql)
一般会返回一个List,如:from Staff staff;返回的是包含所有的员工对象的集合
如你的hql为:select count(*) from Staff staff;则返回的是一个Integer对象
如果你使用的hql为:select count(distinct staff.name),count(*) from Staff staff;则返回的是一个Object
即Object[],需要先把他转换成Object[],然后在取[0],[1].
这种设计我不知道hibernate是如何处理的,感觉既好也不好.好的是可以使用一个find获得任意查询
不好在于根据hql来处理返回结果,容易出错.
出处:
http://www.chinabs.net/webj2ee/default.asp?infoid=400经常看见jsp版里有人问时间操作的问题,这些问题一般包括:取当前时间,把一个指定的字符串时间转化成时间类型,求两个时间之间的天数,求一段时间以前的时间,求一段时间以后的时间,在这里就把这些问题汇总一下。
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.text.*"%>
<%@ page import="java.util.*"%>
<%
//字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
out.println(d);
out.println("<br>");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mDateTime1=formatter.format(d);
out.println(mDateTime1);
out.println("<br>");
out.println(d.getTime());
out.println("<br>");
//当前时间
Calendar cal = Calendar.getInstance();
// SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss G E D F w W a E F");
String mDateTime=formatter.format(cal.getTime());
out.println(mDateTime);
out.println("<br>");
//1年前日期
java.util.Date myDate=new java.util.Date();
long myTime=(myDate.getTime()/1000)-60*60*24*365;
myDate.setTime(myTime*1000);
String mDate=formatter.format(myDate);
out.println(mDate);
out.println("<br>");
//明天日期
myDate=new java.util.Date();
myTime=(myDate.getTime()/1000)+60*60*24;
myDate.setTime(myTime*1000);
mDate=formatter.format(myDate);
out.println(mDate);
out.println("<br>");
//两个时间之间的天数
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date= myFormatter.parse("2003-05-1");
java.util.Date mydate= myFormatter.parse("1899-12-30");
long day=(date.getTime()-mydate.getTime())/(24*60*60*1000);
out.println(day);
out.println("<br>");
//加半小时
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
java.util.Date date1 = format.parse("2002-02-28 23:16:00");
long Time=(date1.getTime()/1000)+60*30;
date1.setTime(Time*1000);
String mydate1=formatter.format(date1);
out.println(mydate1);
out.println("<br>");
//年月周求日期
SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
java.util.Date date2= formatter2.parse("2003-05 5 星期五");
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
String mydate2=formatter3.format(date2);
out.println(mydate2);
out.println("<br>");
//求是星期几
mydate= myFormatter.parse("2001-1-1");
SimpleDateFormat formatter4 = new SimpleDateFormat("E");
String mydate3=formatter4.format(mydate);
out.println(mydate3);
out.println("<br>");
%>